본문 바로가기
Progamming/BoostCourse

레이어드 아키텍처(Layered Architecture) 란?

by 동그란 혜주 2019. 5. 13.
  • 들어가기 전에

이번 시간에는 웹 어플리케이션을 만들 때 자주 사용하는 레이어드 아키텍처(Layered Architecture)에 대해 알아보자.

 

 

 

  • 학습 목표

1. 웹 어플리케이션 개발시 레이어드 아키텍처(Layered Architecture)가 사용되는 이유에 대해 이해한다.

2. 웹 어플리케이션 개발시 각 레이어드의 구성요소에 대해 이해한다.

 

 

 

  • 핵심 개념

- Controller

- Service

- Repository

 

 

 

  • Controller에서 중복되는 부분을 처리하려면?

- 별도의 객체로 분리한다.

- 별도의 메소드로 분리한다.

 

 

 

  • 컨트롤러와 서비스

- 비지니스 메소드를 별도의 Service 객체에서 구현하고, 컨트롤러는 Service 객체를 사용하도록 한다.

 

 

 

  • Service 객체란?

- 비지니스 로직(Business Logic)을 수행하는 메소드를 가지고 있는 객체

- 보통 하나의 비지니스 로직은 하나의 트랜잭션으로 동작

 

 

 

  • 트랜잭션(Transacrion) 이란?

- 원자성 (Atomicity)

- 일관성 (Consistency)

- 독립성 (Isolation)

- 지속성 (Durability)

 

 

 

  • 원자성 (Atomicty)

- rollback : 변경사항 취소

- commit : 변경사항 저장

 

 

 

  • 일관성 (Consistency)

트랜잭션이 진행되는 동안에 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터로 진행된다.

 

 

 

  • 독립성 (Isolation)

- 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 없다.

- 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없습니다.

 

 

 

  • 지속성 (Duraility)

- 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다.

 

 

 

  • JDBC 프로그래밍에서 트랜잭션 처리 방법

- DB에 연결된 후 Connection객체의 setAutoCommit메소드에 false를 파라미터로 지정한다.
- 입력, 수정, 삭제 SQL이 실행을 한 후 모두 성공했을 경우 Connection이 가지고 있는 commit()메소드를 호출한다.

 

 

  • @EnableTransactionManagement  

- Spring Java Config파일에서 트랜잭션을 활성화 할 때 사용하는 어노테이션
- Java Config를 사용하게 되면 PlatformTransactionManager 구현체를 모두 찾아서 그 중에 하나를 매핑해 사용
- 특정 트랜잭션 메니저를 사용하고자 한다면 TransactionManagementConfigurer를 Java Config 파일에서 구현하고, 원하는 트랜잭션 메니저를 리턴하도록 하거나,
 특정 트랜잭션 메니저 객체를 생성시 @Primary 애노테이션을 지정

 

 

  • 서비스 객체에서 중복으로 호출되는 코드의 처리 

- 데이터 엑세스 메소드를 별도의 Repository(Dao) 객체에서 구현하도록 하고 Service는 Repository 객체를 사용하도록 한다.

 

 

 

 

  • 레이어드 아키텍처

 

 

  • 설정의 분리

- Spring 설정 파일을 프리젠테이션 레이어쪽과 나머지를 분리할 수 있다. web.xml 파일에서 프리젠테이션 레이어에 대한 스프링 설정은 DispathcerServlet이 읽도록 하고, 그 외의 설정은 ContextLoaderListener를 통해서 읽도록 한다.
- DispatcherServlet을 경우에 따라서 2개 이상 설정할 수 있는데 이 경우에는 각각의 DispathcerServlet의 ApplicationContext가 각각 독립적이기 때문에 각각의 설정 파일에서 생성한 빈을 서로 사용할 수 없다. 
- 위의 경우와 같이 동시에 필요한 빈은 ContextLoaderListener를 사용함으로써 공통으로 사용하게 할 수 있다.
- ContextLoaderListener와 DispatcherServlet은 각각 ApplicationContext를 생성하는데, ContextLoaderListener가 생성하는 ApplicationContext가 root컨텍스트가 되고 DispatcherServlet이 생성한 인스턴스는 root컨텍스트를 부모로 하는 자식 컨텍스트가 된다. 참고로, 자식 컨텍스트들은 root컨텍스트의 설정 빈을 사용할 수 있습니다.

 

'Progamming > BoostCourse' 카테고리의 다른 글

RestController란?  (0) 2019.05.14
Spring MVC를 이용한 웹 페이지 작성 실습  (0) 2019.03.14
Spring MVC 구성요소  (0) 2019.03.14
Spring MVC란?  (0) 2019.03.14
Spring JDBC 실습  (0) 2019.03.13

댓글