Spring 계층형 개발 Architecture
Spring Architecture
Architecture란?
아키텍처란?
아키텍처는 중,대규모 어플리케이션들은 개발 및 유지보수를 하는데 있어 보다 효율적인 구조를 갖기 위해서
계층형 설계 구조를 가지는 것이 일반적이다.
이에 보편적으로 가지는 계층형 구조는
사용자 영역을 관리하기 위한 🍏프레젠테이션 계층
사용자 요청을 처리하기 위한 🍏서비스 계층
요청 정보를 바탕으로 데이터를 관리하기 위한 🍏데이터액세스 계층
이렇게 3가지 계층과 모든 계층에서 사용되는 도메인 모델 클래스로 구성한다.
View<-> | Controller<-> | Service<-> | <->DAO |
사용자 영역을 관리하기 위한 프리젠테이션 계층
Presentation Layer
브라우저상의 웹 클라이언트의 요청 및 응답을 처리
타 계층(서비스계층, 데이터 액세스계층)에서 발생하는 Exception에 대한 처리
최종 UI에서 입력한 데이터에 대한 유효성 검증(Validation) 기능을 제공
비즈니스 로직과 최종 UI를 분리하기 위한 컨트롤러 기능을 제공 (@Controller 어노테이션을 사용하는 Class)
Controller Class
UI 계층과 서비스 계층을 연결하는 역할을 하는 클래스
JSP에서 Controller를 통해서 서비스 계층의 Service를 사용하게 된다.
서비스 계층의 Service 인터페이스를 생성하나, 객체를 IoC 컨테이너가 주입해 준다.
사용자의 요청을 처리하기 위한 서비스 계층
Service Layer
애플리케이션 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 적합성 검증
DataBase 트랜잭션(Transaction) 처리
프리젠테이션 계층과 데이터 액세스 계층 사이를 연결하는 역할로서 두 계층이 직접 적으로 통신하지 않게 하여 애플리케이션의 유연성이 증가
다른 계층들과 통신하기 위한 인터페이스를 제공하고 이를 구현화한 ServiceImpl 클래스 를 사용
(@Service 어노테이션을 사용하는 Class)
Service Interface
Service 계층의 상위 인터페이스로, Service와 관련된 메소드를 정의하는 역할을 한다.
ServiceImpl Class
Service 인터페이스를 구현한 클래스로, 복잡한 업무 로직이 있을 경우이 클래스에서 업무 로직을 구현함
요청 정보를 바탕으로 데이터를 관리하는
Data Access Layer
영구 저장소(관계형 데이터베이스)의 데이터를 조작하는 데이터 액세스 로직을 객체화
영구 저장소의 데이터를 조회, 등록, 수정, 삭제 함
ORM(Object Relational Mapping) 프레임워크 (MyBatis, Hibernate)를 주로 사용 하는 계층
DAO 인터페이스와 이를 구현화한 DAO Impl 클래스를 사용 (@Repository 어노테이션을 사용하는 Class)
Dao Interface
데이터 액세스 계층에 속한 상위 인터페이스로, DataBase 접근과 관련된 메소드를 정의하는 역할
DaoImpl Class
Dao 인터페이스를 구현한 클래스로 이 클래스에서는 데이터 액세스 로직 을 구현한다. MyBatis를 사용하는 경우, SqlSession을 IoC 컨테이너를 통해 주입받음
Domain Class
관계형 데이터 베이스의 엔티티와 비슷한 개념을 가지는 것으로 실제
VO(Value Object) 혹은 DTO(Data Transfer Object) 객체에 해당
도메인 클래스는 3개의 계층 전체에 걸쳐 사용
private으로 선언된 멤버변수가 있고, 그 변수에 대한 getter와 setter 메서드를 가진 클래스를 말함
(@Component 어노테이션을 통해 의존성 주입 가능)