0. 배경
URL은 다르지만 중복되는 부분이 있다면?
중복되는 부분을 별도의 객체나 메소드로 분리해서 Controller에서 처리하도록
-> Service 객체로 구현하고 컨트롤러는 Service 객체를 사용하도록 함
1. Service 객체란?
- 비즈니스 로직을 수행하는 메소드를 가지고 있는 객체
- 보통 하나의 비즈니스 로직은 하나의 트랜잭션으로 동작함
2. 트랜잭션이란?
- 하나의 논리적인 작업
- 원자성, 일관성, 독립성, 지속성
JDBC 프로그래밍에서 트랜잭션 처리 방법
- DB에 연결된 후, Conenction 객체의 setAutoCommit 메소드에 false를 파라미터로 지정
- 입력, 수정, 삭제 SQL을 실행한 후, 모두 성공했을 경우 Connectino이 가지고 있는 commit() 메소드를 호출함
@EnableTransactionManagement
- Spring Java Config 파일에서 트랜잭션을 활성화할 때 사용하는 애노테이션
- Java Config를 사용하게 되면, PlatformTransactionManager 구현체를 모두 찾아서 그 중 하나를 매핑해 사용함
- 특정 트랜잭션 매니저를 사용하려면, TransactionManagementConfigurer를 Java Config 파일에서 구현하고 원하는 트랜잭션 매니저를 리턴하도록 함
- 혹은, 특정 트랜잭션 매니저 객체 생성 시 @Primary 애노테이션을 지정함
3. Layered Architecture
서비스 객체에서 중복으로 호출되는 코드의 처리
- 데이터 엑세스 메소드를 별도의 Repository(DAO) 객체에서 구현하도록 하고 서비스는 Repository 객체를 사용하도록 함
- Presentation Layer (Controller)
- Service Layer (Business Logic)
- Repository Layer (DAO)
설정의 분리
- 각 레이어에 관련된 설정을 분리하는 것이 바람직함
- Spring 설정 파일을 Presentation 레이어와 나머지로 분리할 수 있음
- web.xml 파일에서 Presentation 레이어에 대한 Spring 설정은 DispatcherServlet이 읽도록 하고, 그 외의 설정은 ContextLoaderListener를 통해서 읽도록 함
- DispatcherServlet을 경우에 따라 2개 이상 설정할 수 있음
- 이 경우에는 각각의 DispatcherServlet의 ApplicationContext가 각각 독립적이기에 각각의 설정 파일에서 생성한 Bean을 서로 사용할 수 없음
- 위의 경우와 같이 동시에 필요한 Bean은 ContextLoaderListener를 사용함으로써 공통으로 사용하게 할 수 있음
- ContextLoaderListener와 DispatcherServlet은 각각 ApplicationContext를 생성함
- ContextLoaderListener가 생성하는 ApplicationContext가 Root Context가 되고, DispatcherServlet이 생성한 인스턴스는 Root Context를 부모로 하는 자식 Context가 됨
- 자식 Context들은 Root Context의 설정 Bean을 사용할 수 있음
'강의 노트 > 웹 프로그래밍(풀스택)' 카테고리의 다른 글
[boostcourse] 3.11. Controller - BE (0) | 2023.07.09 |
---|---|
[boostcourse] 3.10. Layered Architecture - BE (2) (0) | 2023.06.27 |
[boostcourse] 3.9. Spring MVC - BE (2) (0) | 2023.06.26 |
[boostcourse] 3.9. Spring MVC - BE (1) (0) | 2023.06.26 |
[boostcourse] 3.8. Spring JDBC - BE (0) | 2023.06.25 |