[소프트웨어 아키텍처 101] 7. 아키텍처 특성 범위
반응형
인상깊은 부분
[[커네이선스]] 생각보다 자주 언급되는 개념이다.
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)]]
- 정의 : 높은 기능 응집도(high functional cohesion)와 동기적 커네이선스(synchronous connascence)를 가진, 독립적으로 배포 가능한(independently deployable) 아티팩트
반응형
'엔지니어링 > 설계' 카테고리의 다른 글
[소프트웨어 아키텍처 101] 9. 아키텍처 스타일 기초 (0) | 2024.08.10 |
---|---|
[소프트웨어 아키텍처 101] 8. 컴포넌트 기반 사고 (0) | 2024.07.11 |
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스 (0) | 2024.06.25 |
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별 (0) | 2024.06.18 |
[소프트웨어 아키텍처 101] 4. 아키텍처 특성 정의 (0) | 2024.06.03 |
댓글
이 글 공유하기
다른 글
-
[소프트웨어 아키텍처 101] 9. 아키텍처 스타일 기초
[소프트웨어 아키텍처 101] 9. 아키텍처 스타일 기초
2024.08.10 -
[소프트웨어 아키텍처 101] 8. 컴포넌트 기반 사고
[소프트웨어 아키텍처 101] 8. 컴포넌트 기반 사고
2024.07.11 -
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스
[소프트웨어 아키텍처 101] 6. 아키텍처 특성의 측정 및 거버넌스
2024.06.25 -
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
[소프트웨어 아키텍처 101] 5. 아키텍처 특성 식별
2024.06.18