본문 바로가기

카테고리 없음

애플리케이션 구조 3계층

반응형

1. 애플리케이션 구조 3계층

  • 프레젠테이션 계층 : UI와 관련된 처리 담당, 웹 요청과 응답, 사용자 요청을 검증, 주 사용 기술 > 서블릿과 HTTP 같은 웹 기술, 스프링 MVC
  • 데이터 접근 계층 : 실제 데이터베이스에 접근하는 코드, 주 사용 기술 > JDBC, JPA, Redis등
  • 서비스 계층 : 비즈니스 로직을 담당, 주 사용 기술 >가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성
  • 이렇게 계층을 나눈 이유도 서비스 계층을 최대한 순수하게 유지하기 위한 목적이 크다.
  • 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가지고 간다.

2. 중요한 서비스 계층

  • 서비스 계층은 핵심 비즈니스 로직이 들어있는 계층
  • 비즈니스 로직은 최대한 변경없이 유지되어야 한다.
  • 서비스 계층은 순수해야 한다.
  • 서비스 계층을 특정 기술에 종속적이지 않게 개발해야 한다.
  • 이렇게 계층을 나눈 이유도 서비스 계층을 최대한 순수하게 유지하기 위한 목적이 크다.
  • 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가지고 간다.(시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경)
  • 프레젠테이션 계층은 클라이언트가 접근하는 UI와 관련된 기술인 웹, 서블릿, HTTP와 관련된 부분을 담당해준다. 그래서 서비스 계층을 이런 UI와 관련된 기술로부터 보호해준다.
  • 예를 들어서 HTTP API를 사용하다가 GRPC 같은 기술로 변경해도 프레젠테이션 계층의 코드만 변경하고, 서비스 계층은 변경하지 않아도 된다.
  • 데이터 접근 계층은 데이터를 저장하고 관리하는 기술을 담당해준다. 그래서 JDBC, JPA와 같은 구체적인 데이터 접근 기술로부터 서비스 계층을 보호해준다.
  • 예를 들어서 JDBC를 사용하다가 JPA로 변경해도 서비스 계층은 변경하지 않아도 된다.
  • 물론 서비스 계층에서 데이터 접근 계층을 직접 접근하는 것이 아니라, 인터페이스를 제공하고 서비스 계층은 이 인터페이스에 의존하는 것이 좋다.
  • 그래야 서비스 코드의 변경 없이 JdbcRepository 를 JpaRepository 로 변경할 수 있다.
  • 서비스 계층이 특정 기술에 종속되지 않기 때문에 코드도 깔끔하고, 비즈니스 로직을 유지보수 하기도 쉽고, 테스트 하기도 쉽다.
  • 정리하자면 서비스 계층은 가급적 비즈니스 로직만 구현하고 특정 구현 기술에 직접 의존해서는 안된다.
  • 이렇게 하면 향후 구현 기술이 변경될 때 변경의 영향 범위를 최소화 할 수 있다.
반응형