티스토리 뷰

pluralsight 코스 중 하나이고, DDD 코스의 최초 동영상인 클린 아키텍처: 패턴, 프랙티스, 원리 를 2회째 보고 SNS에 정리한 내용을 여기에도 옮깁니다. (옮기면서 보강도 좀 하고요.)

이미지 출처는 위에 링크 건 강의의 강의 자료입니다 (유료). 문제되면 삭제할테니 삭제 요청해주세요.

(본 글은 이 블로그에서 설정중인 크리에이티브 커먼즈 라이선스를 적용하지 않습니다. 문제가 될 수 있어서요...)

1. 클린 아키텍처가 무엇인가?

  • 실 사용 목적(Inhabitat)을 위한 아키텍처 (아키텍트나 로우레벨을 위함이 아님)
  • 상세 구현 내용이 하려는 일을 기술하는 걸 방해해서는 안 된다
  • 아키텍처 에센셜리즘

2. 도메인 중심 아키텍처

  • DB나 로우 레벨 구현에 의존하는 대신, 해결하려는 문제를 중심으로 아키텍처 만들기
  • 여러 종류를 언급하나 결국 "전부 같은 거 아냐?" 라는 얘기가 나왔다고...
  • 의존성 주입(DI) 을 사용해 DB나 인프라가 도메인/앱에 거꾸로 의존하게 만듦

왼쪽에서 오른쪽으로.

3. 애플리케이션 레이어

  • 도메인 프로젝트에 있는 도메인 엔티티로 실제로 문제를 해결하는 걸 기술하는 부분
  • 커맨드-쿼리 의존성 분리 (CQRS) 로 프레젠테이션 & 애플리케이션 두 계층을 분리
  • DB, 인프라도 의존성 주입으로 거꾸로 애플리케이션 레이어에 의존하도록 구성

애플리케이션 프로젝트에 인터페이스 선언, 실 클래스는 퍼시스턴스 & 인프라에 각각 있음. 점선은 ORM 때문에. (본래는 없어야 함)

4. 커맨드 - 쿼리 의존성 분리 (CQRS)

  • 실제 명령(커맨드) & 조회(쿼리) 는 애플리케이션 레이어에 있음
  • 프레젠테이션은 의존성 주입(인터페이스)으로 커맨드, 쿼리를 사용하기만 함
  • 커맨드, 쿼리
    • 커맨드: 명령, 바꾸는 것 (결과 반환하지 않음)
    • 쿼리: 조회, 가져오는 것 (바꾸지 않음)
    • 실제로는 이렇게 나누기 어려운 경우도 있음 (스택 푸시 팝이라던지)
  • 요는 단방향 사이클이라는 것
  • DB를 쪼개느냐 하나만 쓰느냐에 따라 세 종류 정도로 분류 가능
    • 단일 DB
    • 읽기, 쓰기 DB 분리
    • 이벤트 스토어, 읽기 분리 (이벤트 소싱)

DB 부분이 분리가 가능해진다는 거랑 프레젠테이션에서 앱을 뗄 수 있다는 게 포인트인듯

5. 기능 위주 구성 (Functional organization - 스크리밍 아키텍처)

  • 스크리밍: 시스템 구성이 의도!!!!! 하고 비명을 질러야 한다
  • 폴더 구성에서 차이가 남
    • 모델, 컨트롤러 폴더가 아니라
    • 판매, 고객 등의 단위로 나뉨
  • 커질수록 비슷한 목적 끼리 모여있으니 유지보수가 쉬워지지만 프로젝트에 처음 입갤하는 비용이 올라감

6. 마이크로 서비스

(지금 단계에선 관심분야 밖인 주제이긴 했습니다. 아직 실제로 어찌 하는지는 좀 이해가 안 돼요...)

  • 시스템을 서브 시스템으로 쪼개는데, 역시 DI를 써서 분리하고
  • 아니나다를까 의도 단위로 분리, 겹치는 부분은 서로 다른 클래스로 있을 수 있음 ("바운더리") : 세일즈: 고객연락처, 고객지원: 고객
  • 분리하는 스케일은 의견이 갈림

겹치는 바운더리를 각각의 사본으로 분리한 케이스

7. 테스트 가능한 아키텍처

(제일 관심있던 부분)

  • 테스트 수준별 피라미드
    • 수동 테스트 (제일 비용이 쎔)
    • UI 자동화 테스트 (유지보수가 힘듦)
    • 시스템 테스트 -> (클린 아키텍처에 의해) -> 인수 테스트(Acceptence Test)
      • 인수 테스트로 바꾸면, 코드로 비즈니스 로직을 테스트할 수 있게 됨
    • 유닛 테스트 (제일 쌈)
  • 클린 아키텍처는 서비스 테스트를 자동화하게 해줌: 프레젠테이션, DB, 인프라를 모킹해서 앱, 도메인만 남김
  • 예시 프로젝트에서 사용한 것들
    • 테스트: NUnit
    • 모킹: Moq, AutoMoq
    • 인수 테스트작성: 스펙플로우
      • (gherkin은 업무상 테스트만 텍스트로 좀 써봤지 실제 코드로 들어가는 건 여기서 처음 봤습니다.)

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함