스프링 프레임워크(27) 사용자 관리 프로젝트 아키텍처
사용자 관리 프로젝트 아키텍처
- 스프링에서 편리한 개발을 위해 계층화
- 세가지 계층들은 독립적으로 분리할 수 있도록 구현
- 일반적으로 각 계층 사이에는 인터페이스를 이용하여 통신
프레젠테이션 계층
- 브라우저상 웹 클라이언트의 요청 및 응답 처리
- 상위 계층(서비스, 데이터 액세스)에서 발생하는 Exception 처리
- 최종 UI에서 표현할 도메인 모델 사용
- 최종 UI에서 입력한 데이터에 대한 유효성 검증 기능 제공
- 비즈니스 로직과 최종 UI를 분리하기 위한 컨트롤러 기능 제공
@Controller
사용해 작성된 Controller 클래스가 이 계층에 속한다.
- JSP, html
서비스 계층
- 비즈니스 로직처리 및 관련 도메인 모델 적합성 검증
- 트랜잭션 처리
- 프레젠테이션 계층 - 데이터 액세스 계층 사이 연결 역할으로 직접 통신하지 않게 한다.
- 다른 계층과 통신하기 위한 인터페이스 제공
@Service
와 Service 인터페이스 사용해 작성한 Service 구현 클래스가 이 계층에 속함
데이터 액세스 계층
- 데이터 액세스 로직 객체화
- 영구 저장소의 데이터 CRUD
- ORM 프레임워크(MyBatis,Hibernate) 주로 사용
- DAO 인터페이스와
@Repository
사용해 작성된 DAO 구현 클래스가 이 계층에 속함
- Spring JDBC
도메인 모델 클래스
- RDBMS의 엔티티와 비슷한 개념 실제 VO, DTO 객체
- 3개의 계층 전체에 결쳐서 사용한다.
- 멤버변수는 private로 선언하고, getter setter 메소드를 호출해 접근하는 클래스
클래스 역할
프레젠테이션 계층
UserController 클래스
- UI 계층, 서비스 계층 연결 역할 클래스
- JSP에서 UserController 통해 서비스 계층의 UserService를 사용하게 된다.
- 서비스 계층의 UserService 인터페이스를 구현하나 객체를 IoC 컨테이너가 주입해줌(
@Autowired
)
서비스 계층
UserService 인터페이스
UserServiceImpl 클래스
- UserService Interface 구현한 클래스
- 복잡한 비즈니스 로직 구현
- 데이터 액세스 계층의 UserDao 인터페이스를 구현한 객체를 IoC 컨테이너가 주입해줌(
@Autowired
)
데이터 액세스 계층
UserDao 인터페이스
UserDaoImplJDBC
- UserDao 인터페이스 구현 클래스
- 데이터 액세스 로직 구현
- SpringJDBC 사용시 DataSource를 IoC 컨테이너가 주입
- MyBatis 사용 시 SqlSession IoC 컨테이너가 주입