Layered Architecture & @Component, 게시판 insert 예제

bacccine·2022년 6월 17일
0

spring

목록 보기
5/10

계층화 아키텍처(Layered Architecture)

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와 연동하여 작업한다

MVC 패턴이란?

Layered Architecture 를 사용한 대표적인 패턴
Application을 Model,View,Controller로 구분
UI를 가지는 대부분의 Application은 MVC 패턴을 사용한다 예) Angular, Android,iOS,Spring MVC etc

앞의 프레젠테이션 영역을 좀 더 layering 해놓은 형태라고 볼 수 있다

view

사용자의 요청(입력)을 처리한다
model과 화면을 서로 연결시켜준다

model

view에 포함된 바인딩되기 이전의 데이터를 관리하는 것
데이터를 저장 및 처리

controller

view와 model 사이 중간에 바인딩을 시켜주는 역할을 수행한다

컴포넌트(스프링에서 관리되는 Bean, Managed Bean) 자동 등록

(1) Annotation을 사용
Annotation은 JDK 1.5에서 도입되었다
Annotation은 Layered Architecture를 지원한다

@Component와 하위 Annotation을 사용한다

이렇게 등록을 해놓고, xml 설정파일엔 <context:component-scan base-package="패키지명" /> 태그를 추가해준다
태그 추가 시, 패키지 명 이후 하위 패키지를 검색해 @Component Annotation을 포함하는 모든 클래스를 Bean으로 자동 등록한다

Context:component-scan

Bean이 될 수 있는 모든 Component들을 자동으로 찾아 Bean Container에 등록한다
단, 의존성 관계는 따로 등록하지 않는다

@Autowired

component 간 의존 관계는 Autowired라는 Annotation으로 적용한다
Component-scan과 수동(Setter,생성자) DI는 혼용해서 사용할 수 있다


게시판에 글 insert하기 예제(DB를 사용하지 않은 경우)

1) 수동으로 Bean 등록하는 방법

  1. vo 패키지 밑에 Article VO 클래스를 만든다
  2. 이를 사용하는 ArticleDAO 클래스를 만든다. DAO에서 DB 조작 동작이 수행된다
  3. Service 클래스에선 이를 호출하여 동작시킬 로직을 구현한다, setter 메소드가 필요하다
  4. spring_context.xml에 service와 ArticleDAO를 bean으로 등록한다
  5. service 는 ArticleDAO를 setter injection으로 주입받는다

2) 자동으로 Bean 등록하는 방법

  1. Service 클래스 명 위에 @Service 를 붙인다
  2. ArticleDAO 클래스 명 위에 @Repository를 붙인다
  3. spring_context.xml에 Namespaces 탭으로 이동
  4. context에 체크
  5. Source 탭으로 이동해서 <context:component-scan> 태그를 작성한다
  6. 해당 태그는 기본적으로 어떤 하위 패키지에서 검색할지를 지정하는 base-package 속성을 가진다
  7. Service에 setter injection을 적용할 DAO 변수 위에 @Autowired Annotation을 붙인다
  8. @Autowired를 붙이면 기존에 Service 클래스에서 작성하였던 setter 메소드가 필요없어진다

0개의 댓글