컨트롤러의 책임
- 클라이언트의 요청(값) 수신
- Content-Type을 확인해서 application/json 이면 @RequestBody를 붙여준다. x-www-form-urlencoded 이면 DTO로 받아준다.
![](https://blog.kakaocdn.net/dn/bcekDW/btsnZvpCDGs/jfxQsXLdaAIWXFxgCypbqk/img.png)
- 유효성검사(DB가 필요없는 모든 검사)
- DispatcherServlet이 @Valid 어노테이션과 Errors errors 매개변수를 작성해주면 자동으로 유효성 검사를 진행해주고, 유효성 검사가 실패하면 errors 변수에 에러를 담아준다.
- 잘못 받은 값에 대한 응답
- AOP(관점지향 프로그래밍)처리하는 것이 좋다.
- 정상적으로 처리되었을 때 응답
![](https://blog.kakaocdn.net/dn/EKCCW/btsnZCoCh3G/mn69mKgCpluFwyldgSbll1/img.png)
서비스의 책임
- DB연결
- DTO 생성
- 비즈니스 로직 구현
- 서비스 레이어는 애플리케이션의 비즈니스 규칙을 구현합니다. 비즈니스 로직은 애플리케이션의 핵심 기능과 비즈니스 규칙을 담당하며, 데이터 처리, 알고리즘, 외부 시스템과의 통합 등을 처리합니다.
- 트랜잭션 관리
- 서비스 레이어는 트랜잭션 관리를 수행합니다. 트랜잭션은 여러 개의 데이터 조작 작업을 논리적으로 묶어서 원자적인 작업 단위로 처리하고, ACID (원자성, 일관성, 격리 성, 지속성) 속성을 보장합니다. 서비스 레이어는 트랜잭션을 시작하고 커밋 또는 롤백하는 등 의 작업을 수행하여 데이터 일관성을 유지합니다.
- 예외 처리
- 서비스 레이어는 비즈니스 로직 실행 중 발생하는 예외를 처리합니다. 예외 처리는 오류 상황을 적절하게 처리하고, 예외를 캡슐화하고 로깅하는 등의 작업을 수행합니다.
스프링 부트(Service Layer)는 스프링 프레임워크에서 비즈니스 로직을 구현하고 제공하는 레이어 이다. 서비스 레이어는 애플리케이션의 비즈니스 요구사항을 구현하기 위한 핵심 로직을 포함하며, 컨트롤러(Controller)와 데이터 액세스 계층(DAO, Repository) 사이에서 중간 계층으로 작동한다.
스프링 부트에서는 서비스 레이어를 구현하기 위해 @Service 어노테이션을 사용하여 클래스를 표시하고, 해당 클래스의 메서드에서 비즈니스 로직을 구현합니다. 서비스 레이어는 스프링의 의존 성주입(Dependency Injection) 기능을 사용하여 컨트롤러, 데이터 액세스 계층 등과 협력한다.
서비스에서의 Exception 위임
- @Transactional 어노테이션을 붙이면 메서드 종료시에 커밋을 자동으로 해주고, 중간에 RuntimeException이 발동하면 rollback 해준다.
- 서비스에서 오류 발생시에 throw 을 던지는데 이것은 나를 호출한 쪽으로 익셉션 처리를 위임한다 는 뜻이다.
- 이렇게 위임을 하는 이유는 위임하지 않으면, 컨트롤러쪽으로 어떤 응답을 줘야하는데, return type이 고정될 수 없기 때문에 코딩하기가 어려워진다.
- 예외처리를 해주지 않으면 서버 내부정보가 외부로 유출되고, 공통DTO의 형식을 지키지 않아서 프론트엔드쪽에서 처리가 어려워진다.
- 참고: https://yunzae.tistory.com/177
예외처리
스프링에서의 예외처리 1. try-catch 컨트롤 메서드 내에서 try-catch로 처리 2. ExceptionHandler메서드가 처리 컨트롤러에서 처리 @ControllAdvice클래스에서 모든 처리 3. 예외 종류별로 뷰지정- SimpleMappingExce
yunzae.tistory.com
'I leaned > 스프링,스프링부트' 카테고리의 다른 글
Open In View (0) | 2023.07.17 |
---|---|
DTO (0) | 2023.07.17 |
요청 DTO 유효성 검사 (0) | 2023.07.17 |
JPA N+1문제 와 Fetch join (0) | 2023.07.10 |
컨트롤러에 비즈니스로직을 넣으면 안되는 이유 (0) | 2023.07.04 |