[스프링부트와 AWS로 혼자 구현하는 웹 서비스] Spring 웹 계층 / 비즈니스 로직 처리 패턴

세이라·2023년 7월 22일
0

스터디를 통해 스프링부트와 AWS로 혼자 구현하는 웹 서비스(저자 이동욱) 서적을 공부하는 중입니다.

공부/실습한 내용을 정리한 포스팅입니다.
책에 모르는 부분이 있으면 구글링하거나 챗gpt에 물어봐서 보충하였습니다.
(아직 초보라 모르는 부분이 많아 이것저것 다 적었습니다.)

참고한 사이트 출처는 포스팅 맨 하단에 적었습니다.

Spring 웹 계층


출처 : [스프링] Spring 웹 계층

Web Layer

  • 흔히 말하는 Controller, View Template 영역
  • 이외에도 Filter, Interceptor, ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역을 일컫음.

※ Filter : 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공.
※ Intercepter : 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로챔.
※ ControllerAdvice : @ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation

Service Layer

  • @Service에 사용되는 서비스 영역
  • 일반적으로 Controller와 Dao의 중간 영역
  • @Transactional이 사용되어야 하는 영역

※ Transaction : 모든 작업들이 성공적으로 완료되어야 작업 묶음의 결과를 적용하고, 어떤 작업에서 오류가 발생했을 때는 이전에 있던 모든 작업들이 성공적이었더라도 없었던 일처럼 완전히 되돌림.

Repository Layer

  • DB 접근 영역

Dtos

  • DTO(Data Transfer Object)는 계층 간의 데이터 교환을 위한 객체. Dtos는 이들의 영역을 뜻함.
  • View Template에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등

Domain Model

  • Domain이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것을 도메인 모델이라 함.
  • @Entity가 사용된 영역
  • 무조건 DB의 테이블과 관계가 있어야만 하는 것은 아님. VO처럼 값 객체들도 이 영역에 해당

※ VO(Value Object) : 값 그 자체를 나타내는 객체로, DTO와 반대로 로직을 포함할 수 있으며, VO의 경우 특정 값 자체를 표현하기 때문에 불변성의 보장을 위해 생성자 사용.


비즈니스 로직 처리 패턴

도메인 모델 패턴

  • Domain 부분에서 비즈니스 로직을 가지고 객체 지향의 특성을 적극 활용 하는 것을 도메인 모델 패턴 즉, Entity 안에 비즈니스 로직을 가지고 객체지향을 활용.
  • 도메인 모델 패턴 사용 시, Entity는 객체로서 이용됨.
  • 직관적으로 어떤 처리가 일어나는지 알 수 있음.

트랜잭션 스크립트 패턴

  • 하나의 트랜잭션으로 구성된 로직을 단일 함수 또는 단일 스크립트에서 처리하는 구조. 엔티티에는 비즈니스 로직이 거의 없고, 서비스 계층에서 대부분의 비즈니스를 처리.
  • 트랜잭션 스크립트 패턴 사용 시, Entity는 getter,setter만 제공하는 단순한 자료구조로 사용하는 방식이 됨.

도메인 모델 패턴의 Service

서비스 메소드는 트랜잭션과 도메인 간의 순서만 보장. 비즈니스 로직을 처리X

출처

🙈[Spring] Interceptor (1) - 개념 및 예제🐵
[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)
Transactional 어노테이션
도메인 모델 패턴, 트랜잭션 스크립트 패턴
[JAVA] DTO와 VO의 차이

0개의 댓글