Application 각 역할에 의해 분리되어 작성, 관리되는 패턴
효율적인 개발과 유지보수를 위해 Application을 계층화해서 개발
대규모의 중/대규모 Application에서 적용한다
일반적으로 3-layered 구조가 많이 쓰인다
각 레이어는 독립된 R&R을 가진다
Layered Architecture는 인접한 레이어로만 통신이 가능하고 대표적으로 OSI 7 레이어가 있다
반드시 Layer를 거쳐서 통신하는 구조
Layered Architecture의 사례로는 전자정부 프레임워크가 있다. 작성된 Application의 공통된 형태를 띌 수 있도록 한다
다층 구조(Multi-tier Architecture, n-tier Architecture)도 Layered Architecture 중 하나이다. 비즈니스 로직을 완전히 분리하여 데이터베이스 시스템과 클라이언트 사이에 배치한 클라이언트 서버 시스템의 일종이다
Spring 에서 기본적으로 제공되고 있는 방식은 아니지만 중/대규모 프로젝트를 구현할 땐 Layered Architecture를 사용하는 것이 굳어져있다
Layered Architecture는 Application을 3가지 영역(프레젠테이션,비즈니스,데이터)으로 나누는 방법을 택할 수 있다
사용자와 상호작용을 담당
사용자의 요청을 분석 및 응답
기능을 수행
트랜잭션 수행
데이터의 저장과 조회를 담당
주로 DB와 연동하여 작업한다
Layered Architecture 를 사용한 대표적인 패턴
Application을 Model,View,Controller로 구분
UI를 가지는 대부분의 Application은 MVC 패턴을 사용한다 예) Angular, Android,iOS,Spring MVC etc
앞의 프레젠테이션 영역을 좀 더 layering 해놓은 형태라고 볼 수 있다
사용자의 요청(입력)을 처리한다
model과 화면을 서로 연결시켜준다
view에 포함된 바인딩되기 이전의 데이터를 관리하는 것
데이터를 저장 및 처리
view와 model 사이 중간에 바인딩을 시켜주는 역할을 수행한다
(1) Annotation을 사용
Annotation은 JDK 1.5에서 도입되었다
Annotation은 Layered Architecture를 지원한다
@Component와 하위 Annotation을 사용한다
이렇게 등록을 해놓고, xml 설정파일엔 <context:component-scan base-package="패키지명" />
태그를 추가해준다
태그 추가 시, 패키지 명 이후 하위 패키지를 검색해 @Component Annotation을 포함하는 모든 클래스를 Bean으로 자동 등록한다
Bean이 될 수 있는 모든 Component들을 자동으로 찾아 Bean Container에 등록한다
단, 의존성 관계는 따로 등록하지 않는다
component 간 의존 관계는 Autowired라는 Annotation으로 적용한다
Component-scan과 수동(Setter,생성자) DI는 혼용해서 사용할 수 있다
<context:component-scan>
태그를 작성한다