on
[실전 개발자를 위한 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