해당 게시물들은 이동욱 저자님의 "스프링 부트와 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
'Web > 스프링 부트와 aws로 구현하는 웹서비스' 카테고리의 다른 글
7. 스프링부트, Gradle, Junit 업데이트 하기 (0) | 2021.07.19 |
---|---|
6. 게시판 등록 api 만들어 보기 (0) | 2021.07.16 |
4. JPA 사용해보기 (0) | 2021.07.14 |
3. 롬복 (0) | 2021.07.14 |
2. TDD와 테스트 코드 (0) | 2021.07.08 |
댓글