유스케이스아키텍처에서의 유스케이스 의미유스케이스가 지원 되어야 하는 이유유스케이스의 목적유스케이스의 특징유스케이스 결합 분리운영시스템의 운영 지원 관점에서의 아키텍처허용가능 형태의 다양한 의미운영적 개선 및 전환운영 결합 분리개발개발환경에서의 아키텍처관심사가 다양한 조직에서의 시스템 개발개발 독립성배포배포에서의 아키텍처즉각적인 배보배포 독립성결합 분리 모드소스 수준 분리 모드배포 수준 분리 모드서비스(실행단위) 수준 분리 모드어떤 모드가 사용하기에 가장 좋은가??결론
좋은 아키택처의 주요 항목
- 시스템의 유스케이스
- 시스템의 운영
- 시스템의 개발
- 시스템의 배포
유스케이스
아키텍처에서의 유스케이스 의미
- 시스템의 아키텍처는 시스템의 의도를 지원해야 한다
- 예) 장바구니 → 관련 유스케이스
유스케이스가 지원 되어야 하는 이유
- 아키텍트와 아키텍처에서 유스케이스는 최우선이 된다.
유스케이스의 목적
- 좋은 아키텍처가 행위를 지원하기 위해 할 수 있는 일 중에서 가장 중요한 사항은 행위를 명확히 하고 외부로 드러내며, 이를 통해 시스템이 지닌 의도를 아키텍처 수준에서 알아볼 수 있게 만드는 것이다.
유스케이스의 특징
- 시스템 구조 자체를 한눈에 알아볼 수 있다.
- 행위 자체가 일급 요소 이며 시스템의 최상위 수준에서 알아 볼 수 있다.
- 아키텍처 내의 핵심적인 자리일 뿐만 아니라 자신의 기능을 분명하게 설명하는 이름을 가진다.
유스케이스 결합 분리
- 시스템을 분할하는 자연스러운 방법이다
- 시스템을 수평적 계층으로 분할하면서 동시에 해당 계층을 가로지르는, 수직적인 유스케이스로 시스템을 분할할 수 있다.
- 새로운 유스케이스를 추가하더라도 기존 유스케이스에 영향을 거의 미치지않는다.

운영
시스템의 운영 지원 관점에서의 아키텍처
- 아키텍처는 시스템 요구와 유스케이스를 참고하여 반드시 운영작업을 허용할 수 있는 형태로 구조화되어야 한다.
- 예) 초당 10만명 고객을 처리해야한다면 처리량과 응답속도를 보장해야한다.
허용가능 형태의 다양한 의미
- 시스템 처리 요소를 작은 서비스로 배열해서 서로 다른 서버들에서 병렬로 실행 할 수 있게 만든다.
- 수많은 스레드가 단일 프로세서에서 같은 주소 공간을 공유하도록 만든다.
- 독립된 주소 공간에서 실행되는 소수의 프로세스만으로 구성된 시스템
- 단일 프로세스에서 실행되는 단순한 모노리틱 프로그램
운영적 개선 및 전환
- 아키텍처에서 각 컴포넌트를 적절히 격리하여 유지해야한다.
- 컴포넌트 간 통신 방식을 특정 형테로 제한하지 않는다.
- 운영 요구사항 변경시 기술 스펙트럼 사이를 전환하는 것이 쉬워진다.
운영 결합 분리
- 운영 측면에서 결합을 분리할 때 적절한 모드를 선택해야한다.
- 예) 분리된 컴포넌트를 서로다른 서비스에서 실행 상황
- 반드시 독립적인 서비스가 되어야하고 네트워크를 통해 통신을 해야한다.
개발
개발환경에서의 아키텍처
- 콘웨이 법칙이 적용된다.
시스템을 설계하는 조직이라면 어디든지 그 조직의 의사소통 구조와 동일한 구조의 설계를 만들어 낼 것이다.
관심사가 다양한 조직에서의 시스템 개발
- 각 팀은 독립적으로 행동하기 편한 아키텍처를 확보하여 서로에게 방해되지 않도록 해야한다.
- 아키텍처를 만들기 위해 독립적으로 개발 가능한 컴포넌트 단위로 시스템을 분할 할 수 있어야한다.
- 독립적 컴포넌트를 개발할 팀에게 할당할 수 있다.
개발 독립성
- 컴포넌트가 완전히 분리되면 팀사이의 간섭은 줄어든다.
- 기능, 컴포넌트, 계층 또는 다른 형태의 팀이라도 결합이 분리된 아키텍처는 서로 팀에 대한 간섭이 줄어드는 구조를 뒷받침 해준다.
배포
배포에서의 아키텍처
- 배포 용이성을 결정하는 역할을 한다.
즉각적인 배보
- 좋은 아키텍처의 목표이다.
- 시스템이 빌드된 후 즉각 배포할 수 있도록 지원해야 한다.
배포 독립성
- 유스케이스와 계층의 결합이 분리되면 고도의 유연성이 생긴다.
- 운영중인 시스템에서 교체와 추가에 독립적으로 적용된다.
결합 분리 모드
소스 수준 분리 모드
- 소스 코드 모듈 사이의 의존성을 제어할 수 있다.
- 하나의 모듈이 변하더라도 다른 모듈을 변경, 재컴파일 하지 않도록 만들 수 있다.
- 모노리틱 구조라 부른다.
배포 수준 분리 모드
- jar 파일, DLL, 공유 라이브러리와 같은 배포 가능한 단위 사이의 의존성을 제어할 수 있다.
- 한 모듈의 소스코드가 변하더라도 다른 모듈을 재빌드하거나 재배포하지 않도록 만들 수 있다.
- 결합이 분리된 컴포넌트가 독립적으로 배포할 수 있는 단위로 분할되어 있다.
서비스(실행단위) 수준 분리 모드
- 데이터 구조 단위의 의존성을 제어할 수 있다.
- 네트워크 패킷을 통해서만 통신하도록 만들 수 있다.
어떤 모드가 사용하기에 가장 좋은가??
- 프로젝트의 초기단계 에서는 알기 어렵다.
- 프로젝트가 진행되면서 최적인 모드가 달라질 수 있다.
- 결합 분리 모드를 선택사항으로 남겨두고 배포 규모에 따라 가장 적합한 모드를 선택한다.
결론
- 시스템의 결합 분리 모드는 시간이 지나면서 바뀌기 쉽다.
- 이러한 변경을 예측하여 반영할 수 있도록 만들어야 한다.