여러가지 애플리케이션 구조가 있지만 가장 단순하면서 많이 사용하는 방식은 역할에 따라 위 3가지 계층으로 나누는 것이다.
- 프레젠테이션 계층
- UI와 관련된 처리 담당
- 웹 요청과 응답
- 사용자 요청을 검증
- 주 사용 기술 : 서블릿과 같은 HTTP 웹 기술, 스프링 MVC
- 서비스 계층
- 비즈니스 로직을 담당
- 주 사용 기술 : 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성.
- 데이터 접근 계층
- 실제 데이터베이스에 접근하는 코드
- 주 사용 기술 : JDBC, JPA, File, Redis, Mongo …
이 3가지 계층 중 가장 중요한 곳은 어디일까?
바로 서비스 계층이다.
- 핵심 비즈니스 로직이 들어있는 서비스 계층은 시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술이 변해도 변경 없이 유지되어야 한다.
- 이렇게 하려면 서비스 계층은 특정 기술에 종속적이지 않도록 개발해야 한다.
- 계층을 나누는 이유도 서비스 계층을 최대한 순수하게 유지하기 위한 목적이 크다.
- 기술에 종속적인 부분은 프레젠테이션 계층, 데이터 접근 계층에서 가진다.
- 예를 들어 HTTP API를 쓰다가 GRPC 같은 기술로 변경해도 프레젠테이션 계층만 변경하면 되고, JDBC를 쓰다가 JPA로 변경해도 데이터 접근 계층만 바꾸고 서비스 계층은 유지하는 것이다.
- 서비스 계층이 특정 기술에 종속되지 않기 때문에 비즈니스 로직을 유지보수하기도 쉽고, 테스트도 쉽다.