소프트웨어 아키텍처 = 구조

좋은 아키텍쳐가 중요한 이유?

  • 기능과 구조는 나란히 있는 것이 아니라 구조가 기능을 뒷받침해야 안정적이고 변경이 용이하다

소프트웨어 아키텍쳐의 목표

  • 필요한 시스템을 만들고 유지보수하는데 투입된 인력을 최소화한다

기능 부족 + 구조 좋음 = 기능 추가해서 사용하면 된다, 앞으로 개선해 나가면 됨

좋은 아키텍처를 구성하는 방법

  • 코드를 쉽게 파악하고, 변경할 수 있게 돕는 규칙
  • 패러다임, 설계원칙, 컴포넌트 응집성 원칙, 컴포넌트 결합 원칙 등등…

아키텍처 패턴 : 원칙들을 지키며 코딩하기 쉽도록 도움을 줌

패턴 사용법

  1. 일단 따라하기
  2. 원칙들을 학습하고 이해한 후에 따라하기
  3. 각자의 프로젝트에 적용
  4. 고민이 되는 지점들은 원칙에 맞게, 혹은 크게 벗어나지 않는 선에서 타협하여 적용

계층형 아키텍쳐

클린 아키텍쳐

클린 아키텍쳐?

  • 공통의 목표 : 관심사의 분리
  • 공통의 핵심 규칙 : 의존ㅜ 성의 방향은 안쪽, 고수준을 향함

핵심

  1. 중요도에 따라 계층을 나눔
  2. 의존성의 방향은 항상 안쪽, 고수준을 향함 (다형성을 이용하여 어디서든 의존성 역전 가능)

헥사고날 아키텍쳐

  • 클린 아키텍쳐 기본 다이어그램과 비슷한 형태
  • 엔티티 중심, 유즈케이스가 감싸는 형태, 어댑터(controller, gateway, presenters)가 바깥을 감싸는 형태

아키텍쳐 패키지/클래스 구조 비교

계층형 아키텍쳐

  • 의존성이 아래로 향하는 형태
  • 가장 밑바닥에 있는건 Database

기능 기반 패키지

  • 연관된 기능, 도메인 개념에 따라 나눔
  • 계층 구조가 분리되지 않음

헥사고날 아키텍쳐

  • 수직, 수평으로 나눔
  • DB 계층에 대한 의존성 역전
  • 도메인이 다른 세부 사항에 의존하지 않음
  • 클래스와 패키지 구조가 많아짐

Ref

https://youtu.be/g6Tg6_qpIVc?si=9V_JSN6MTRkxnw8V