Spring MVC
Spring MVC 프레임워크는 웹 어플리케이션을 빌드하기 위한 프레임워크로 MVC(Model, View, Controller)
디자인 패턴을 따른다.
Spring MVC 설정
web.xml
- Web Application 설정을 위한 Deployment Descriptor로 dispatcher-servlet을 호출
- 서버가 deploy할 때 웹 정보 설정
- 브라우저가 웹에 접근하기 위해서는 WAS에게 필요한 정보를 제공
WebInitializer.java
로 작성가능
applicationContext.xml
- Web Application 최상단에 위치하고 있는 context
- BeanFactory를 상속받으며 필요한 설정정보를 담은 파일
- 여러 서블릿에서 공통적으로 공유해서 사용할 수 있는 Bean 선언
- @Service
, @Repository
, @Configuration
, @Component
WebAppConfig.java
로 작성가능
dispatcher-servlet.xml
- WAS가 사용자 요청을 받으면 제일 앞에서 모든 요청을 처리함
- 공통처리 작업을 처리한 후 적절한 세부 Controller로 작업을 위임
- HandlerMapping
, @Controller
, ViewResolver
DispatcherServletConfig.java
로 작성가능
위의 .xml
파일들을 읽으면서 Spring Container
생성

실행순서
- Web Application 실행
- WAS에 의해
web.xml(WebInitializer.java)
실행
ContextLoaderListner
생성
WebAppConfig.class
등록으로 applicationContext.xml(WebAppConfig.java)
로딩
applicationContext.xml(WebAppConfig.java)
로 Container 설정
- 사용자 요청(http request) 발생 시
dispatcher-servlet.xml(DispatcherServletConfig.java)
를 로딩하여 Container 설정
- 세부 Controller 동작
- 요청에 따라 View 또는 Service 수행
Spring Web 계층
Spring Web 계층에는 Presentation Layer
, Business Layer
, Persistence Layer
가 존재하며 관심 분리를 통해 대상 계층에 집중이 가능해지고 모듈화로 재사용성이 증가하며 계층별 테스트가 용이해진다는 장점이 있다.
Presentation Layer
- 브라우저 상의 웹 클라이언트 요청 및 응답 처리
- 사용자 요청에 맞는
@Controller
호출
- Business Layer, Persistence Layer에서 발생하는 예외처리
- 인증이나 JSON 변환이 이루어짐
Controller
, View
포함
Business Layer(Service Layer)
- 실제 비지니스 로직을 수행하는 컴포넌트
- 외부 API를 사용하거나 공통적으로 사용해야하는 작업을 처리
- Controller에서 요청을 보내면
DAO
를 이용해 실제 비지니스 로직을 수행
DAO
에서 받은 Entity
의 유효성을 확인하고 DTO
로 변환
- Persistence Layer와 Presentation Layer가 직접적으로 통신하지 않게 함
- 트랜잭션 관리
Service Interface
, @Service
Persistence Layer
- Repository Layer 혹은 Data Access Layer라고 불림
- DB에 데이터를 CRUD(Create, Read, Update, Drop)하는 계층
DAO Interface
, @Repository
Spring Model
Spring Model에는 Entity
, DAO
, DTO
, VO
가 있어 각 계층별로 사용하는 모델이 달라 데이터베이스에 저장된 정보 변환을 예방할 수 있다.
Entity
- 실제 데이터베이스와 일대일 매칭되는 클래스
- DB Table 내 존재하는 컬럼만을 속성으로 가져야 함
- 상속받거나 구현될 수 없으며 Presentation Logic을 가질 수 없음
객체의 일관성
을 보장하기 위해 setter의 무분별한 사용을 금지함
- 구현 메소드는 주로 Service Layer에서 사용함
DAO(Data Access Object
- DB에 접근하기 위한 객체로
CRUD 기능
을 수행
- DB 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위함
Pa
, Hibernate
, MyBatis
등의 Persistence Framework를 통해 접근
DTO(Date Transfer Object)
- 계층간 데이터 교환을 위한 Java Beans
- 로직을 가지지 않는 순수한 데이터 객체로 getter/setter 메서드만 가짐
- 데이터 전송 객체라는 의미를 가지며 주로
비동기 처리
시 많이 사용됨
VO(Value Object)
- literal 개념으로 값 그 자체의 의미를 가진 불변 클래스
Read-Only
로 getter메서드만 가짐
equals()
, hashcode()
오버라이딩을 통해 모든 값들이 같아서 동일 객체인지 판단