만들면서 배우는 클린 아키텍처를 요약한 글입니다.


스터디 참가 이유

우아한 형제들에서 주관, 진행하는 2022 우아한 스터디에 참여하게 되었다. 스터디의 주제는 헥사고날 아키텍쳐로 구현하는 작은 스프링 부트 토이 프로젝트.

데브코스 교육을 참가할 당시 프로젝트를 진행하기 위해서 구조를 먼저 짜야했다.
클린 아키텍처, 무슨 아키텍처 등 어디서 들은건 있어서 프로젝트의 구조를 어떻게 짤 것인가에 대한 고민하고 이 고민의 답을 원했지만 유튜브 영상을 보아도 쉽게 이해하기 힘들었으며, 멘토님들, 주변의 현직 개발자분들에게 다 물어봤지만 회사 바이 회사, 팀 바이 팀, 사람 바이 사람 모두 개발하는 방식이 달랐다.

빠듯한 기한 내에 프로젝트를 마무리하기 위해서는 개발을 시작해야했기에 1차로 도메인별로 일단 크게 디렉토리를 나누고, 그 안에서 컨트롤러, 서비스, 레포지토리, dto, entity 모든 클래스별로 하위 디렉토리를 평행하게 만들었고 이 부분이 찝찝하게 남게 되었다.

우아한 스터디는 책 발표나 토론 스터디에서 끝나지 않고 공부한 지식을 토이 프로젝트에도 바로 적용해볼 수 있는 좋은 기회다.
또한 개발 경력이 적다보니 스터디를 통해서 다른 분들은 어떻게 개발하는지, 환경은 어떠한지 다양한 주제로 얘기하고 공유하며 서로의 개발 능력치를 이끌어낼 수 있을 것이라고 생각했다.

정답은 없을 수 있다. 하지만 상황에 맞는 최선의 방식을 찾고 싶다. 책 내용을 수용하되 최대한 사소한 것들에도 질문을 많이 가지며 비판적으로 읽고 싶다.
열정 넘치고 최신 기술 동향에 관심 많은 조원들을 만난 것 같아서 기대가 된다 ☺


이 책에 대하여

들어가기 전

낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처 구축하고자 한다.

불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하는 것을 매우 어렵게 만든다.

전통적인 계층형 아키텍처(layered architecture) 스타일의 단점

로버트 마틴(Robert C. Martin)의 클린 아키텍처 & 알리스테어 콕번(Alistair Cockburn)의 육각형 아키텍처(hexagonal architecture) & 도메인 중심 아키텍처의 장점

전통적 계층형 아키텍처

프레젠테이션 계층(사용자와의 상호작용 담당)
     ⬇
도메인 계층
     ⬇
영속성 계층(엔티티의 영속성 처리)
  • 모두 별도의 계층으로 분리
  • 도메인 계층 입장에서 의존성은 비대칭적이다
    • 위에서 의존성이 내려오고, 하위 계층으로 의존성을 보냄

헥사고날 아키텍처

사용자 인터페이스, 데이터베이스(외부 요소) ↔ (분리) 비즈니스 로직

  • 전자 두 개는 기술만 다를 뿐 도메인 관심사를 다루지 않는다. → 공통점
프레젠테이션 계층(사용자와의 상호작용 담당)
     ⬇
도메인 계층
     ⬆
영속성 계층(엔티티의 영속성 처리)
  • 의존성의 방향 ⇒ 핵심!
  • 비즈니스 로직(도메인 계층)이 외부 요소에 의존하지 않고, 프레젠테이션 계층과 데이터 소스 계층이 도메인 계층을 의존한다.
  • 도메인 계층 입장에서 의존성은 대칭적이다
  1. 내부(inside)
    : 비즈니스 관심사를 다룬다.
  2. 외부(outside)
    : 기술적 관심사를 다룬다.
    • 어댑터(adapter): 외부에 포함된 기술적인 컴포넌트
    • 포트(port): 어댑터가 내부와 상호작용하는 접점

육각형 아키텍처 = 포트와 어댑터 패턴


이 책은 유연하고 유지보수가 용이한 아키텍처를 구축하는 방법을 알려준다.

1개의 댓글

comment-user-thumbnail
2022년 5월 10일

정말 하고 싶던 스터디인데 글 올라오는 거 열심히 읽겠습니다!

답글 달기