본문 바로가기
Web/스프링 부트와 aws로 구현하는 웹서비스

5. Spring 웹 계층 정리

by 장인이 2021. 7. 16.

해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다.

 

 등록, 수정, 삭제 api를 작성하기 전에, Spring 웹 계층을 한번 정리하고 진행할 것이다.

 

 

 Spring에서는 웹 계층을 크게 Web Layer, Service Layer, Repository Layer으로 나눈다.

 

 우선 Web Layer는 브라우저 상의 웹 클라이언트의 요청, 응답을 처리하는 곳이다. 흔히 사용하는 @Controller, 그리고 JSP/Freemarker 등의 뷰 템플릿(HTML, CSS와 같은 마크업 속성과 뷰 인스턴스에서 정의한 데이터, 로직들을 연결해 브라우저에서 볼 수 있는 HTML형태로 변환해 주는 것)의 영역이다.

 + 이 외에도 외부 요청과 응답에 대한 전반적인 영역을 담당한다.

 

 Service Layer는 @Service 어노테이션이 사용되는 Service 구현 클래스가 이 계층에 속한다. 이는 Web Layer와 Repository Layer를 연결하는 역할을 하며, 두 계층이 직접적으로 연결되지 않게 한다. 즉, 보통 Controller와 Dao의 중간 영역에서 사용된다. 또한 @Transactional이 사용되는 영역이다.

 + 여기서 Transaction이란, 하나의 쿼리만으로 해결할 수 없는 로직을 만들 때 사용하는 방식이다. 예를 들어서 A에서 B에게 금액을 송금하는 로직을 작성할 경우, 1) A에 10000원을 차감한다, 2) B에 10000원을 추가한다로 볼 수 있다. 하지만 1)이 진행된 후 오류로 로직이 취소된다면, A만 10000원이 차감된 매우 큰 오류가 발생할 수 있다. 이럴때 이런 2개 이상의 쿼리를 Transaction으로 묶어서 DB에 전송하고, 에러가 발생할 경우 자동으로 모든 과정을 원래대로 되돌려논다.

 

 Repository Layer는 데이터베이스와 직결되는 계층으로, 데이터 저장소에 접근하는 영역을 말한다. DAO 혹은 @Repository 어노테이션을 사용한 DAO 구현 클래스가 이 계층에 속하게 된다. DB에 데이터를 CRUD(Create, Read, Update, Delete)하는 곳이다.

 

 DTO는 각 계층의 데이터를 주고 받는 객체이다. 주로 DB에서 데이터를 받아 Service 혹은 Controller 등으로 보낼 때 사용한다. 특별히 다른 로직을 가지지 않고, getter 혹은 setter만 지닌다.

 

 Domain Model은 개발 대상을 모든 사람이 동일하게 볼 수 있도록 단순화 시킨 것을 말한다. @Entity가 사용되는 Entity 클래스 또한 도메인 모델이며, 무조건 DB의 테이블과 관계가 있어야만 하는 것은 아니다.

 


- 학습 내용 저장할 github

https://github.com/imgzon3/imgzon3-springboot-test

 

imgzon3/imgzon3-springboot-test

Contribute to imgzon3/imgzon3-springboot-test development by creating an account on GitHub.

github.com

 

댓글