[ 목차 ]
개발자는 어떻게 하면 더욱 코드를 효율적으로 작성하고, 유지보수가 쉽고, 성능이 좋은 코드를 작성할 수있을지 고민을 해야합니다. 이러한 내용을 바탕으로 서비스를 개선하고, 기술이 변하더라도 쉽고 빠르게 대응 가능하고 좋은 코드를 만들 수 있습니다.
이러한 고민속에는 아키텍쳐 설계가 코어로 자리잡고 있다고 생각합니다. 아키텍쳐를 설계하다보면 자연스레 계층과 관련된 레퍼런스를 접할 수 있습니다. 결국 잘 설계된 아키텍쳐를 기반으로 품질이 좋은 코드와 유지보수가 좋은 코드, 유연성 있는 소프트웨어가 나온다고 해도 과언이 아닙니다.
저 역시도 Layered architecture과 같은 내용을 많이 접했습니다.
그래서 과연 Layered Architecture가 무엇인지 알아보고 더 나아가 정리해 보겠습니다.
[ 레이어드 아키텍쳐 ]
백엔드에서는 계층 패턴의 적용을 레이어드 아키텍쳐 패턴 ( Layered Architecture Pattern ) 이라고 합니다.
이 패턴의 핵심은 코드의 역할이나 행위, 논리적인 부분을 독립된 형태(모듈)로 나눠서 구성하는 패턴입니다.
때문에 한 계층의 변경이 다른 계층에 영향을 주지 않아 독립적으로 설계가 가능하고 계층을 보호할 수 있습니다.
핵심적으로 !! 관심사의 분리가 가능합니다
일반적으로 이 레이어드 아키텍쳐 ( Layered Architecture )에서는 3개의 레이어를 다음과 같이 표현하고 있습니다.
( 애플리케이션의 크기나 복잡도 그리고 요구사항에 따라 달라질 수 있다는 점이 핵심입니다. )
- 표현 계층 ( Presentation Layer - Web Ly)
- 비즈니스 계층 ( Business Layer - Service Ly )
- 퍼시스턴스 계층 ( Persistence Layer - Repository Ly)
- DataBase
1. Presentation Layer
한줄 요약 : 사용자의 요청과 응답을 처리하는 책임을 가지는 계층
대부분 표현 계층에는 사용자(클라이언트 - Client)의 요청(Request)을 받고 응답(Response)를 반환하는 API를 정의하는 행위가 대부분이며 routing, 보안, 로깅 등의 여러가지 전처리를 추가할 수 있습니다. ( 그 외 다른 역할은 담당하지 않음 )
표현계층에서는 요청과 응답에 따른 프로토콜을 어떤 방식을 선택하냐에 따라 개발의 방법이 달라집니다.
단순히 UI를 표현하는 역할을 주로 하게 된다. ( 사용자와의 상호 작용이 핵심 )
2. Business Layer
한줄 요약 : 비즈니스 로직 수행과 관련된 책임을 가지는 계층
비즈니스 계층에서는 표현 계층(Presentation Ly)에서 넘어온 요청에 관한 비즈니스 로직을 구성하는 부분입니다.
다른 레퍼런스나 학습 자료에서 나오는 계층인 Application Layer 과 Domain Layer와 성격이 비슷합니다.
2 - 1 Application Layer
앞 계층(PL) 와 다음 계층인 Domain Layer 사이에서 비즈니스 로직을 처리하는데, 앞 계층에서 받은 요청에 대한 처리를 수행합니다.
이 때 DB(데이터베이스)와 직접적인 상호작용을 하지 않아야 하며, DL(Domain Layer)의 엔티티와 데이터를 처리하는 일만 수행합니다.
그럼 왜 이 계층이 Application Layer일까?
애플리케이션 레이어에서는 높은 수준의 추상화 기능들을 담고 있습니다. 이 계층에 속하는, 존재하는 함수들은 애플리케이션의 요구사항이며 특정 행위를 추상화하고 있으며 이로 인해 자연스레 서비스 로직과 객체를 포함하고 있는 것입니다.
2 - 2 Domain Layer
핵심 비즈니스의 로직이 존재하는 계층으로 어떤 외부 관심사에도 의존하지 않는 순수한 비즈니스 로직만 포함하고 있어야 합니다.
데이터의 유효성 검증, 엔티티 간 관계 처리, 비즈니스 로직 수행 등 낮은 추상화 수준을 가지고 있기에 애플리케이션 기능 단위로 직접 활용될 가능성은 적습니다.
3. Persistence Layer
퍼시스턴스 계층에서는 데이터와 관련된 부분을 구현합니다. 만약 앞 레이어(Business Layer)에서 데이터와 관련된 작업을 요청하면, 이 계층에서는 데이터를 읽고, 쓰고, 수정하는 등의 행위를 하게 됩니다.
[ 장점 ]
레이어드 아키텍쳐의 핵심은 위에서도 한번 언급한 관심사의 분리(Seperation of concerns)입니다.
각 레이어에서는 각 레이어에 맞는 로직 및 기능들을 구현해야합니다.
각각의 레이어는 오직 자기보다 하위에 있는 레이어에만 의존을 가지고 있습니다.
이러한 이유로 아키텍쳐에서 레이어의 역할이 분명해 코드의 확장성이 높아집니다.
[ 참고 레퍼런스 ]
https://kimjingo.tistory.com/159
'스프링 > 백엔드' 카테고리의 다른 글
그쪽도 홍박사(Redis)님을 아세요? (1) (0) | 2024.12.11 |
---|---|
@Transactional 그리고 트랜잭션 (1) | 2023.08.16 |
Repository와 Service (0) | 2022.06.12 |
로깅 간단히 알아보기 (0) | 2022.05.18 |
REST API 기초와 사용법 (2022.12.08 추가) (0) | 2022.03.28 |