[실전 개발자를 위한 Spring Framework] 6강 Layered Architecture...

[실전 개발자를 위한 Spring Framework] 6강 Layered Architecture...

카테고리 없음 [실전 개발자를 위한 Spring Framework] 6강 Layered Architecture & @Component

6강 Layered Architecture & @Component

하고 대표적 사례로 OSI 7레이어가 있다.

어노테이션 기능은 JDK1.5에서 도입되었다.

Layered Architecture - 특징

□ 계층화 아키텍쳐

○ 효율적인 개발과 유지보수를 위해 계층화하여 개발

○ 대부분의 중/대규모 어플리케이션에 적용

○ 각 레이어는 독립된 R&R;을 가짐

○ Layered Architecture는 인접한 레이어로만 통신이 가능하다.

○ Spring에서 기본적으로 제공하는 방식은 아님

○ 3가지 영역으로 구분됨

- Client(화면)와 DB가 끝단에 위치

왼쪽 위 클라이언트 / 가운데 3영역이 레이어드를 이루고 있음 / 오른쪽아래 DB

□ 프레젠테이션 영역

○ 사용자와 상호작용을 담당

○ 사용자의 요청을 분석/응답

○ 화면과 연결하는 레이어

□ 비즈니스 영역

○ 기능을 수행

○ 트랙잭션 수행

○ 그 중간을 이어주는 레이어

□ 데이터 영역

○ 데이터의 저장과 조회를 담당

○ 주로 데이터베이스와 연동하여 작업

MVC 패턴

□ MVC 패턴

○ Layered Architecture를 사용한 대표적 패턴

○ 프레젠테이션 레이어를 세분화한 패턴

○ 어플리케이션을 Model, View, Controller로 구분

○ UI를 가지는 대부분의 어플리케이션은 MVC혹은 변형된 MVC 패턴을 사용

예) Angular, Android, iOS, SpringMVC...

view: 실질적으로 프레젠테이션 쪽을 담당하는 부분 / model: view의 사용자가 실제로 보는 화면과 데이터가 바인딩돼서 사용자에게 전달됨. 바인딩하기 전에 데이터를 가지고 있는 것을 model로 별도로 처리 / controller: 중간에서 view와 model을 바인딩시켜주고 제어시켜줌.

사례: 전자정부 프레임워크

전자정부 프레임워크는 어플리케이션 개발에 LA라는 이 방식을 제공함으로써 전자 프레임워크로 작성된 애플리케이션이 공통된 형태를 띌 수 있게끔 제공해줌.

컴포넌트 자동등록

여기서 말하는 컴포넌트는 Managed Bean을 의미. 이 Bean들은 스프링 설정파일에 일반적으로 설정했으나, 모든 Bean들을 다 설정파일에 등록하기엔 설정 파일이 복잡해짐. 그래서 Annotation을 사용하여 컴포넌트를 자동으로 등록하는 기능을 제공함.

□ 어노테이션(Annotation)을 사용

○ @Componnt와 하위 어노테이션을 사용

스프링에서는 컴포넌트라는 어노테이션을 상속한 3개 어노테이션이 주로 사용됨. 어노테이션 자체가 Layered Architecture를 지원해주는 모습임. @Controller-프레젠테이션 @Service-비즈니스 @Repository-데이터

○ 각각의 레이어별로 사용하는 컴포넌트(빈)을 어노테이션을 통해서 등록을 해놓고, xml 설정 파일에는 component-scan이라는 태그를 추가해줌

○ 패키지 명 이후 하위 패키지를 검색해 @component 어노테이션을 포함하는 모든 클래스를 빈으로 자동 등록

@Autowired

□ Context:component-scan

○ Bean이 될 수 있는 모든 Component들을 자동으로 찾아 Bean Container에 등록

○ 단, 의존성 관계 등록은 따로 하지 않음

□ @Autowired

○ @Autowired를 통해 DI 자동으로 이루어짐

○ Component 간의 의존관계는 Autowired라는 Annotation으로 적용

○ Component-scan과 수동(Setter, 생성자) DI는 혼용해서 사용 가능

실습

◇ 학습목표

1. 게시판의 글쓰기 기능 구현 (가상 구현)

- BbsService.registArticle(Article )

- ArticleDAO.insertArticle(Article )

2. Service, DAO, VO .. Layering

이를 구현하기 위해 VO가 필요함 VO는 Article 이라는 이름으로 만들어봄. 또한 layered architecture 구현.

3. @Service, @Repository 어노테이션 등록

- 사용

4. @Autowired 사용으로 DI 구현

1. 게시판의 글쓰기 기능 구현 (가상 구현)

□ 클래스 생성

○ Service 클래스 생성

- hello-web - Java Resources - src/java/main - kr.co.acomp.hello.service에 오른쪽 마우스 클릭

- New → Class

- Name: BbsService

- 코드 작성

private ArticleDAO articleDAO; # ② 서비스에서 DAO를 호출. DAO가 멤버 변수로 잡힌 패턴. 이름은 컨벤션을 따라 만듦.

public void registArticle(Article article) { # ① 메소드명은 registArticle이라고 만듦. Article 타입의 변수를 파라미터로 하나 잡음. 이 파라미터 Article이 실제 데이터를 가지고 있는 VO에 해당. 여기선 별도로 만들어봄.

}

○ ArticleDAO 클래스 생성

- kr.co.acomp.hello.dao에 오른쪽 마우스 클릭

- New → Class

- Name: ArticleDAO

- 코드 작성

public void insertArticle(Article article) { # 파라미터로 데이터를 받음

system.out.println("insert ok.."); # 원래는 데이터베이스와 연동되어 실제로 insert하는 쿼리가 수행되어야겠으나 지금은 가상적으로 insert ok라는 로그만 찍어주게끔 만들어줌. 실제 이 로그가 떨어지면 insert가 완료되었다고 가정.

}

○ Article 클래스 생성

- ArticleDAO 코드 Article에 커서 올리고 create class 'Article' 클릭

- Package: kr.co.acomp.hello.vo

- 코드 작성

private int articleId; # 게시판에 글을 쓴다 가상을 하고 속성 설정 int 글 번호

private String author; # 글 쓴 사람

private String title; # 글 제목

private String content; # 글 본문

○ Article 클래스 생성자 만들기

- 코드 } 전에 커서 두고 오른쪽 마우스 클릭

- Source → Generate Constructor using Fields → OK

○ Article 클래스 디폴트 생성자 만들기

- private String content; 아래에 입력

- Public Article() {}

○ 멤버변수에 대한 세터게터 만들기

- 코드 } 전에 커서 두고 오른쪽 마우스 클릭

- Source → Generate Getters and Setters

- 4가지 프라퍼티 다 클릭 → OK

○ toString 만들기

- 코드 } 전에 커서 두고 오른쪽 마우스 클릭

- Source-Generate toString() - OK

□ 클래스 생성

○ BbsService.java 코드 수정

private ArticleDAO articleDAO; # 더블클릭

public void registArticle(Article article) { # 더블클릭

articleDAO.insertArticle(article); # 이제 registArticle이라는 기능을 호출하는 쪽에서는 데이터를 전부 다 article value object로 데이터로 만들어서 파라미터로 넣어주게 됨. registArticle BbsService의 메소드는 DAO를 호출하게 됨. 서비스는 일반적으로 DAO를 호출함. DAO에 실질적으로 DB에 insert하는 코드.

□ 설정파일에 ServiceDAO, BbsService 등록

○ spring-context 코드 수정

- 맨 아래에 추가

BbsService.java

이 ArticleDAO를 사용하려면 주입을 시켜줘야 함.

articleDAO 변수를 초기화시켜야하기 때문에 Setter로 주입해봄

public void setArticleDAO(ArticleDAO dao) {

this.articleDAO = dao;

}

주입에 대한 설정

spring-context.xml

Hellomain코드 수정

HelloService -> BbsService

BbsServie 임포트

Service.registArticle(new Article());

ArticleDAO

- int result = service.calcTwoNumbersAndSquare(4, 8);

2. Service, DAO, VO .. Layering

from http://eneffet.tistory.com/54 by ccl(A) rewrite - 2021-01-31 02:01:16