스프링/백엔드

Backend Layered Architecture

지팡구 2023. 11. 6. 23:19

[ 목차

개발자는 어떻게 하면 더욱 코드를 효율적으로 작성하고, 유지보수가 쉽고, 성능이 좋은 코드를 작성할 수있을지 고민을 해야합니다. 이러한 내용을 바탕으로 서비스를 개선하고, 기술이 변하더라도 쉽고 빠르게 대응 가능하고 좋은 코드를 만들 수 있습니다.

 

이러한 고민속에는 아키텍쳐 설계가 코어로 자리잡고 있다고 생각합니다. 아키텍쳐를 설계하다보면 자연스레 계층과 관련된 레퍼런스를 접할 수 있습니다.  결국 잘 설계된 아키텍쳐를 기반으로 품질이 좋은 코드와 유지보수가 좋은 코드, 유연성 있는 소프트웨어가 나온다고 해도 과언이 아닙니다.

 

저 역시도 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

 

[Backend] 백엔드 API 패턴 - 레이어드 아키텍처 패턴(layered architecture)

개발 단계에서 좋은 코드의 구조를 생각하는 것은 쉽지 않습니다. 코드 아키텍처를 구상할 때는 확장성(extensibility), 재사용성(reusability), 유지 보수 가능성(maintainabiliy), 가독성(readability)와 같은

kimjingo.tistory.com