Spring

Spring Framework - Layered Architecture

728x90

참조한 강의 : www.boostcourse.org/web326/lecture/58982/

 

 

- Layered Architecture

: 큰 규모의 기업용 소프트웨어를 개발할때는, 단순히 개인의 토이프로젝트 처럼 아무런 구조 없이 막 짜내는게 아니라, 일정한 구조를 가지고 설계되어야 한다. 그래서 소프트웨어 개발이전에 설계 단계를 거치고, 이때 자주 사용되는 아키텍처들을 패턴화해서 묶어놓은 것을 아키텍처 패턴이라 부른다.

레이어드 아키텍처는 이 아키텍처 패턴 중 하나로, N-Tier Architecture 라고도 불리며, 이름에서 알 수 있듯, 여러개의 레이어를 나눠놓고 각 레이어마다 서로 다른 기능을 담당하도록 분리해 놓은 것을 말한다.

각 레이어가 서로 독립적이며, 아래 그림에서 보듯이, 위에서 아래로 요청이 처리되며 바로 아래에 있는 레이어가 바로 위의 레이어에게 의존하는 형태를 띄는 구조이다.

 

출처 : https://velog.io/@burgundy/%EB%A0%88%EC%9D%B4%EC%96%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-Layered-Architecture

 

1) Presentation Layer

: View 를 담당하는 부분으로, 클라이언트와 직접적으로 맞닿는 부분이다.

 

2) Business Layer

: Business Logic 을 처리하는 부분으로, 스프링에서는 Service 객체가 이부분에 해당한다. 

Service 객체라는 것은 하나의 트랜잭션으로 구성되어 작동한다.

 

3) Persistence Layer

: Model 부분을 담당하는 것으로, 데이터베이스와 접근하기 위한 DAO (Data Access Object), ORM 등이 있는 곳이다.

 

 

* Service 객체?

MVC 구조에서 Controller 부분이 비지니스 로직을 처리하는 부분인데, 로직이 겹치는 경우가 존재한다.

예를들면, 쇼핑몰 사이트를 개발하는데, 게시판에서도 회원정보를 보여줘야 하고, 상품 목록 보기에서도 회원정보를 보여줘야 하는경우, 회원정보를 읽기 위해서 모두 하나의 Controller 에 다 넣어야 할까?

이런 경우, 보통 별도의 Service 객체를 만들어서 분리를 해놓는다.

회원 Service, 상품 Service, 게시판 Service 등 이런식으로 분리를 해놓고 여기에 컨트롤러를 연결하는 방식을 취한다.

 

 

* 왜 레이어드 아키텍처를 써야 하는가?

이 아키텍처를 쓸때의 장점은 아래 같은 내용들을 꼽을 수 있다.

1) 코드 유지보수가 용이하다

2) 재사용성이 높다

3) 테스트 구현이 편해진다

4) 코드 가독성을 높인다

 

예를들어서, Presentation Layer 를 웹 페이지가 아닌, 앱으로 사용한다고 했을때, 나머지 부분은 코드를 크게 바꾸지 않아도 재사용이 가능해진다. 단순히 View 만 바꾸는것이기 때문이다.

이런것처럼, 서로 역할이 명확하게 분할되어 있다보니, 어느 한쪽이 문제 생기면 전체를 바꾸는게 아니라 일부만 고쳐서 다시 쓸 수도 있고, 명확히 구분되어 있으니, 리팩토링하기에도 용이할것이다.

 

 

 

* 참고) 10가지 소프트웨어 아키텍처 패턴

mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/

 

[번역] 10가지 소프트웨어 아키텍처 패턴 요약

10 Common Software Architectural Patterns in a nutshell을 번역한 글입니다. 대형 엔터프라이즈 규모의 시스템들은 어떻게 설계되었는지에 대해 궁금해 한 적이 있나요? 우리는 주요 소프트

mingrammer.com

 

728x90

'Spring' 카테고리의 다른 글

Spring Framework - AOP 코드 예제  (0) 2021.02.24
Spring Framework - AOP Overview  (0) 2021.02.17
Spring Framework - 연관 관계 매핑  (0) 2021.02.13
Spring Framework - Eager, Lazy Loading  (0) 2021.02.11
Spring Framework - Persistence Context  (0) 2021.02.06