[개발지식] layered architecture / clean architecture(->hexagonal architecture)

Hyo Kyun Lee·2025년 3월 13일
0

개발지식

목록 보기
75/84

1. 개요

프로덕트를 만들때 무엇을 먼저 시작해야 하는가, 개발자마다 그 출발점은 다르겠지만 가장 기본은 디자인 패턴일 것이라 생각한다.

기술을 사용하는 근본적인 원인은 문제발생과 해결방안일 것이고, 디자인 패턴을 사용하는 근본적인 원인은 프로덕트의 개발과 관리일 것이다.

따라서 프로덕트의 개발을 위해 디자인 패턴을 어떻게 적용하고 사용해야 할지 가장 먼저 고민할 가능성이 높고, 단순히 경험적/결과론적인 사용보다는 논리적/과정적인 이해를 바탕으로 어떠한 디자인 패턴 및 구조 체계를 사용할 것인지 고민해야 프로덕트의 품질을 더 높일 수 있을 것이다.

지금까지 단순하게 MVC Pattern, MVVM Pattern 등 디자인 패턴의 종류를 열거하면서 시작하였다면, 이제는 더 큰 범주를 이해하고 이에 맞는 "골격", "구조"을 선택하는 방향으로 접근하는 것이 바람직할 것이다.

이에 대해 공부하면서 알게된 내용들을 기록하였다.

2. Layered Architecture

우리가 흔히 알고 있고, 가장 많이 사용하는 아키텍처이자 구조이다. 이제부터는 MVC Pattern이 아닌, Layered Architecture에 기반한 MVC Pattern이라 이해하도록 한다.

각 계층 혹은 체계별 역할과 관심사를 분리하여, 책임이 있는 기능 및 역할을 수행하고 높은 수준의 유지보수성과 테스트라는 장점을 채택한 구조이다.

일단 너무 "계층"이라는 단어에 얽매일 필요는 없고, "모듈" 혹은 "체계", 더 쉽게는 같은 역할을 하는 요소들이 모인 구조적 체계라 이해하는 것이 더 좋을 것으로 보인다.

이를 달리 이해해보면,

  • Presentation Layer : 사용자의 요청과 응답을 받고, 이를 처리할 비즈니스 로직에게 요청을 전달하고 응답을 전달받는 매개 역할을 한다.
  • Business Layer : 비즈니스 로직을 수행한다. 데이터를 어떻게 받고 화면에 출력하는 것은 관심이 없고, 말 그대로 로직을 수행하여 가다듬은 자원을 Presentation Layer에 전달한다.
  • Persistence Layer : 영속성 계층, DB에 직접적인 전산요청 및 접근을 하는 역할을 한다. MyBatis, JPA 등을 통해 데이터베이스와 연결 혹은 매핑을 하면서 DB엔티티 혹은 인터페이스가 존재하는 영역이다.
  • Database Layer : 말 그대로 Database가 존재하며, Business Layer는 Persistence Layer의 도움을 기반으로 DB Layer와 상호작용하면서 비즈니스 로직을 수행한다.

Layered Architecture의 단점은 DB의 구조가 바뀐다면, Layered의 장점(낮은 결합도 및 높은 응집도)이 무색하게 모든 영역이 영향을 받아 동일하게 구조 혹은 매핑 요소를 변경해주어야 한다는 것에 있다.

그렇기에 최대한 변경점에 대한 결합도를 낮춰줄 수 있는 대안이 필요할 것이고, 그렇기에 OOP나 재사용과 같은 개념을 확실하게 알아두어야 한다.

3. Clean Architecture

Layered Architecture보다는 추상적이면서 프로덕트를 구성하기 위한 디자인 패턴의 기초 구조를 제공해주는 뼈대역할을 하며, Layered Archi에서 발생한 의존성 및 변경도를 낮추기 위해 고안된 구조이다(Core in Inner)

Hexagonal Architecture가 Clean Architecture를 구체화한 대표적인 구조 중 하나이다.

각 구성요소들은 자신들의 책임과 역할이 주어졌지만, 세부적인 구성이나 역할 분담을 위해 세분화할 수 있다.

Layered 구조에 비해 개발자의 숙련도나 이해도로 인한 품질영향도가 크고, 역할 혹은 도메인별 구성에 따라 패키지 결합도나 복잡도 등이 달라질 수 있으므로 신중한 선택이 필요할 것이다. 특히, 대부분의 프로젝트가 Layered Architecture를 채택하고 있다는 점이나 부분적(제한적)인 방향에서의 활용(금융권에서 외부 데이터를 송수신할때 Adapter 구성에 대해서만 Clean Architecture 채택 등)하고 있다는 점에서, 일단 Layered Architecture를 정확히 이해한 후에 Clean Architecture를 이해하는 것이 더 효율적인 접근 방향으로 보인다.

Clean/Hexagonal Architecture에 대한 내용은 추후 더 깊이 공부해보면서 추가 기록을 남겨두도록 한다.

4. 참고자료

Layered Archi - https://velog.io/@kangukii97/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-Layered-Architecture-%EA%B3%84%EC%B8%B5%ED%98%95-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98
Clean Archi - https://velog.io/@hongjunland/Clean-Architecture
Hexagonal Archi - https://gngsn.tistory.com/258

0개의 댓글