백엔드

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

넌 감동란이었어 2023. 10. 12. 20:44

레이어드 아키텍처(Layered Architecture)가 무엇인지 알아보겠습니다.

 

레이어드 아키텍처를 들어가기전에 소프트웨어 아키텍처가 무엇인지 먼저 알아보도록 하겠습니다.

 

소프트웨어 아키텍처란?

소프트웨어 아키텍처란, 소프트웨어 시스템의 전체적인 구조와 구성요소들 간의 상호작용을 설계하는 것을 말한다.

 

건축물로 비유해보자면 뼈대를 잡는 것과 같다.

어떤 자재를 사용하고 어떻게 조립하는지에 따라 건축물의 결과가 달라진다.

 

이와 비슷하게 소프트웨어 아키텍처는 시스템의 전체적인 동작을 결정하고, 시스템의 품질( 확장성(extensibility), 재사용성(reusability), 유지 보수 가능성(maintainabiliy), 가독성(readability) )에 직접적으로 영향을 미친다.

 

그만큼 소프트웨어 아키텍처를 선택할 때는 신중히 결정해야하는데 오늘은 그 중 가장 기본적인 레이어드 아키텍처에 대해서 알아보자.

 

레이어드 아키텍처란?

 

레이어드 아키텍처란, 소프트웨어 시스템을 관심사 별로 여러개의 계층으로 분리한 아키텍처를 뜻한다. 

즉, 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어서 구성하는 패턴이다.

각각의 계층이 서로 독릭접으로 구성되어 있기 때문에 한 계층이 변경되더라도 다른 계층에 영향을 주지 않게 설계할 수 있다.

 

레이어드 아키텍처는 설명하는 사람마다 조금씩 다른 구성을 가지고 있다.  먼저, 레이어드 아키텍처의 구성은 딱 하나로 정해져 있지 않고, 애플리케이션의 크기, 복잡도, 요구사항 등에 따라 달라질 수 있다. 그래서 계층을 분리해 각 계층 사이의 의존성을 줄여서 외부 변화로부터 비즈니스 로직의 변화를 막고, 애플리케이션의 유지보수와 확장성을 높이려는 목적으로 만들어진 설계의 한 방법이라는 것을 알고, 이 목적을 달성하기 위해 이 공부를 시작하면 좋을 것 같다.  

그래서 아래의 그림들처럼, 레이어드 아키텍처의 구성은 정말 다양하다.

이번 시간에는 Presentation Layer, Business Layer, Persistence Layer로 분류할 수 있는 이 세가지 계층에 대해 공부할 것이다.

 

Presentation Layer

사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분이다.

웹사이트에서는 UI 부분에 해당하기 때문에 비즈니스 로직을 처리하지 않아야하며, 단순히 UI를 표현하는 역할만을 수행해야 한다.

 

Business Layer

이름 그대로 비즈니스 로직을 구현하는 부분이다. Presentation Layer로부터 전달받은 요청에 맞게 동작하는 로직을 구현하면 된다.

Business Layer에서는 데이터베이스와 직접적으로 상호작용하지 않아야한다.

 

Persistence Layer

Persistence layer는 데이터베이스와 관련된 로직을 구현하는 부분이다. 웹 어플리케이션의 데이터베이스와의 상호작용을 처리(생성, 수정, 읽기)한다.

 

레이어드 아키텍처 핵심요소

레이어드 아키텍처의 핵심 요소는 단방향 의존성이다. 각각의 레이어는 오직 하위에 있는 레이어에만 의존한다.

또 다른 핵심요소는 관심사의 분리(Separation of Concerns)이다. 즉 각 레이어의 역할이 명확하다는 의미이다. 예를 들어 Persistation layer에는 비즈니스 로직이 전혀 구현되어 있지 않다.

 

장단점

 

 

장점:

코드의 재사용성 및 유지보수성

각 계층이 관심사별로 분리되어있기 때문에 코드의 재사용성과 유지보수성이 향상된다.

 

변화에 유연하게 대처

각 계층이 독립적이기 때문에 개발,확장,변경이 가능하다.

 

테스트 용이성

각 계층이 독립적이기 때문에 단위 테스트나 통합 테스트가 용이하게 수행된다.

 

단점:

 

계층간 통신을 통해 동작하기 때문에, 데이터의 전달 및 변환 과정에서 일부 오버헤드가 발생한다.

이는 계층이 많아지면 많아질수록 더욱 증가한다.

 

계층을 구분하기 어렵고 잘못 구분할 경우 수정이 빈번해질 수 있다.

 

대규모 프로젝트에서는 설계를 할 때 계층의 개수 및 규모를 정하기 어렵다.

 

 

참고

https://xxeol.tistory.com/26

 

[소프트웨어 아키텍처] 레이어드 아키텍처(Layered Architecture)란?

레이어드 아키텍처(Layered Architecture)가 무엇인지 알아보자. 소프트웨어 아키텍처란? 소프트웨어 아키텍처란, 소프트웨어 시스템의 전체적인 구조와 구성요소들 간의 상호작용을 설계하는 것을

xxeol.tistory.com

https://kimjingo.tistory.com/159

 

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

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

kimjingo.tistory.com

https://engineerinsight.tistory.com/63

 

[Spring] 레이어드 아키텍처(Layered Architecture): 독립적으로 계층을 설계해보자!

💋 레이어드 아키텍처란? 소프트웨어를 여러 개의 계층으로 분리해서 설계하는 방법 각각 계층이 서로 독립적으로 구성되어 있어서 한 계층의 변경이 다른 계층에 영향을 주지 않게 설계할 수

engineerinsight.tistory.com

 

service에서 왜 비즈니스로직하면 안되는지

dao랑 database차이

https://6mini.github.io/software%20architecture%20pattern/2022/11/16/layered-architecture/

'백엔드' 카테고리의 다른 글

Repository vs Dao  (0) 2023.10.19