소프트웨어 아키텍처 = 구조
좋은 아키텍쳐가 중요한 이유?
- 기능과 구조는 나란히 있는 것이 아니라 구조가 기능을 뒷받침해야 안정적이고 변경이 용이하다
소프트웨어 아키텍쳐의 목표
- 필요한 시스템을 만들고 유지보수하는데 투입된 인력을 최소화한다
기능 부족 + 구조 좋음 = 기능 추가해서 사용하면 된다, 앞으로 개선해 나가면 됨
좋은 아키텍처를 구성하는 방법
- 코드를 쉽게 파악하고, 변경할 수 있게 돕는 규칙
- 패러다임, 설계원칙, 컴포넌트 응집성 원칙, 컴포넌트 결합 원칙 등등…
아키텍처 패턴 : 원칙들을 지키며 코딩하기 쉽도록 도움을 줌
패턴 사용법
- 일단 따라하기
- 원칙들을 학습하고 이해한 후에 따라하기
- 각자의 프로젝트에 적용
- 고민이 되는 지점들은 원칙에 맞게, 혹은 크게 벗어나지 않는 선에서 타협하여 적용
계층형 아키텍쳐
클린 아키텍쳐
클린 아키텍쳐?
- 공통의 목표 : 관심사의 분리
- 공통의 핵심 규칙 : 의존ㅜ 성의 방향은 안쪽, 고수준을 향함
핵심
- 중요도에 따라 계층을 나눔
- 의존성의 방향은 항상 안쪽, 고수준을 향함 (다형성을 이용하여 어디서든 의존성 역전 가능)
헥사고날 아키텍쳐
- 클린 아키텍쳐 기본 다이어그램과 비슷한 형태
- 엔티티 중심, 유즈케이스가 감싸는 형태, 어댑터(controller, gateway, presenters)가 바깥을 감싸는 형태
아키텍쳐 패키지/클래스 구조 비교
계층형 아키텍쳐
- 의존성이 아래로 향하는 형태
- 가장 밑바닥에 있는건 Database
기능 기반 패키지
- 연관된 기능, 도메인 개념에 따라 나눔
- 계층 구조가 분리되지 않음
헥사고날 아키텍쳐
- 수직, 수평으로 나눔
- DB 계층에 대한 의존성 역전
- 도메인이 다른 세부 사항에 의존하지 않음
- 클래스와 패키지 구조가 많아짐