Posts 스프링 게층구조
Post
Cancel

스프링 게층구조

스프링 계층구조

img

Web 계층

  • 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역
  • 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@Controller Advice) 등 외부 요청과 응답에 대한 전반적인 영역을 나타낸다.
  • 외부 요청과 응답에 대한 전반적인 영역. 어플리케이션의 진입점이기 때문에 다른 레이어에서 발생한 예외도 처리함. 인증을 관리하고 권한없는 사용자의 인가를 거부하는 역할도 함.
  • 데이터 처리 : DTO만 처리해야함.

Service 계층

  • @Service가 사용되는 서비스 영역. @Transactional이 사용되어야하는 영역이기도 함.
  • 일반적으로 Controller와 Dao 중간영역에서 사용됨.
  • 트랜잭션에 대한 경계역할. 어플리케이션과 인프라 서비스를 모두 포함하고 있음.
  • 데이터 처리 : DTO를 메소드의 매개변수로 사용. 도메인 모델 객체를 처리. 데이터 전송 객체만 웹 레이어로 반환할 수 있음.
  • 주의 사항 : 서비스는 다른 서비스를 조합하거나, DAO를 연결하는 역할을 수행. 서비스는 가볍게 둬야하며 비즈니스 로직을 구현하면 안됨. (비즈니스 로직은 도메인 영역에서 처리)

Repository 계층

  • 가장 낮은 계층으로 사용되는 Database와 같이 데이터 저장소에 접근하는 영역
  • Dao(Data Access Object) 영역이라고 부름
  • 데이터 처리 : 엔티티를 메소드 매개변수로 가져올 수 있고, 엔티티를 리턴함

DTOs

  • DTO는 계층간에 데이터 교환을 위한 객체이며, DTOs는 이들의 영역을 말함.
  • ex) 뷰 템플릿 엔진에서 사용될 객체나 Repository 계층에서 결과로 넘겨준 객체 등이 Dto이다.

Domain Model

  • 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고, 공유할 수 있도록 단순화 시킨 것을 도메인 모델이라고 한다.
  • 비즈니스 로직을 처리함.
  • @Entity가 사용된 영역 역시 도메인 모델이다.
  • 무조건 DB 테이블과 관계가 있어야하는 것은 아니다.(VO처럼 값 객체들도 도메인 모델에 해당)
  • 예시 : 택시 앱에서, 배차/탑승/요금 등이 모두 도메인임.


계층간 흐름도

img


비즈니스 로직을 도메인에 넣는 이유

기존에는 서비스 계층에서 처리하였으나, 복잡한 서비스에서는 더 많은 모델을 읽어 서비스를 제공하기 때문에, 서비스 계층은 매우 복잡해짐.

반면 도메인에서 처리할 경우, 각자 본인의 취소 이벤트처리를 하며, 서비스 메소드는 트랜잭션과 도메인간의 순서만 보장한다.


출처

https://loosie.tistory.com/296

https://velog.io/@smallcherry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B3%84%EC%B8%B5-Spring-Web-Layer

This post is licensed under CC BY 4.0 by the author.

WAS vs 웹서버

프론트 아키텍쳐 흐름

Comments powered by Disqus.