반응형

인상깊은 부분

[[커네이선스]] 생각보다 자주 언급되는 개념이다.

3장 대충 넘겼는데 나중에 다시 읽어야할수도..

궁금한 것

  • [[커네이선스]]를 결합 혹은 의존이라는 개념과 동일하다고 생각해도 될까? 단순 코드레벨이 아니라 비즈니스 개념 상의 결합/의존/응집을 표현하고자 하는걸까?

요약

7.1 커플링과 커네이선스

  • [[커네이선스]] 정의 : 두 컴포넌트 중 한쪽이 변경될 경우 다른 쪽도 변경해야 전체 시스템의 정합성이 맞는다면 이들은 커네이선스를 갖고 있는 것이다. (= 결합 or 의존을 갖고있다고 받아들이면 되나)
    • 정적 커네이선스 (정적 코드 분석으로 발견할 수 있는 것)
    • 동적 커네이선스 (런타임 동작에 관한 것) : 동적 커네이선스는 동기, 비동기 두 종류가 있음
      • 동기 : 분산 서비스끼리 동기 호출을 하면 호출부(caller)는 피호출부(callee)의 응답을 기다려야함
      • 비동기 : 이벤트 기반 아키텍처의 비동기 호출은 fire and forget 방식이라 두 서비스는 개별적으로 동작함

        7.2 [[아키텍처 퀀텀(architecture quantum)]]과 세분도

  • 소프트웨어를 서로 엮는 것은 컴포넌트 레벨의 커플링만이 아님. 많은 비즈니스 개념이 의미상 여러 시스템 파트를 한데 엮어 기능적으로 응집되어 있음 (= 단순 코드레벨이 아니라 비즈니스 개념상의 결합/의존/응집을 표현하고자 하는걸까)
  • 아키텍처 퀀텀(architecture quantum)이란?
    • 정의 : 높은 기능 응집도(high functional cohesion)와 동기적 커네이선스(synchronous connascence)를 가진, 독립적으로 배포 가능한(independently deployable) 아티팩트
      • 독립적으로 배포 가능 : 예를 들어 단일 데이터베이스를 사용하여 배포된 시스템은 아키텍처 퀀텀이 1이지만, 마이크로서비스 아키텍처는 서비스마다 데이터베이스가 따로 있으니 퀀텀이 여러 개임
      • 높은 기능 응집도 : 기능 응집도가 높다는 건 아키텍처 퀀텀이 목적에 맞는 뭔가를 하고 있다는 뜻
      • 동기적 커네이선스 : 동기적 커네이선스는 아키텍처 퀀텀을 형성하는 어플리케이션 컨텍스트 내부 또는 분산 서비스 간의 동기 호출을 의미함
        • 예를 들어, 호출부가 피호출부보다 확장성이 훨씬 좋다면 타임아웃과 여타 신뢰성 문제가 발생할 수 있음. 따라서 동기 호출은 호출의 길이에 대해 동적 커네이선스를 만들어 냄. 즉 한쪽이 다른 쪽을 기다린다면 호출하는 도중에는 양쪽의 운영 아키텍처 특성이 동일해야함.
        • 예를 들어, 경매 시스템에서 많은 경매가 일시에 종료된다면 어떨까? 첫번째 호출은 통과하고 나머지 호출은 모조리 타임아웃이 발생할 것임. 각 컴포넌트 간에 비동기 통신 링크를 만들고 메시지 큐가 일시적인 버퍼 역할을 수행하도록 설계하면 비동기적 커네이선스 덕분에 아키텍처가 한층 더 유연해질 것임. 자세한 내용은 [[아키텍처 101 14. 이벤트 기반 아키텍처 스타일]] 에서 다시 살펴보겠음
    • 아키텍처 퀀텀을 정의하려면 컴포넌트가 어떻게 서로 연결되어(wired) 있는지 측정할 방법이 필요한데, 이것이 바로 [[커네이선스]]라는 개념임. 그래서 아키텍처 퀀텀의 의미를 이해하려면 먼저 커네이선스라는 핵심 메트릭을 잘 알아두어야함
    • 아키텍처 퀀텀 개념은 아키텍처 특성의 새로운 범위를 제시함. p136 에서는 아키텍처 퀀텀이라는 새로운 시각으로 아키텍처 특성을 보기 위해, GGG 라는 아키텍처 카타를 살펴보는 예제가 있음.
    • DDD와 [[경계 콘텍스트(Bounded Context)]]
반응형