진화적 아키텍트#
아키텍트는 개발자도 거주할 수 있는 시스템을 만들 의무가 있다 - 프랑크부쉬만
구조화#
시스템 설계상의 결정을 할때 동시에 달성할 수 없어 한 목표를 택하면 다른것을 포기해야 하는 상충 관계에 있는 상황이 생긴다. (트레이드오프, trade-off)
당신의 선택은?
- 데이터저장소를 선택할때 더 나은 확장 능력을 제공하지만, 경험이 풍부하지 않다 VS 확장능력이 뛰어나지 않지만 경험이 풍부하다
- 두개의 서로 다른 기술 선택 VS 하나의 기술 선택 VS 세 개의 기술 스택
프레이밍, framing
사진을 찍을 때 피사체를 파인더의 테두리 안에 적절히 배치하여 화면을 구성하는 것, 문제의 표현 방식에 따라 동일한 사건이나 상황임에도 개인의 판단이나 선택이 달라질수 있다
목표#
Tip
성취해야 할 목표를 두고 목표에 대한 원칙과 실천 사항을 정의하자
원칙#
원칙
- 더 큰 목표를 위해 해야 할일 을 정렬하는 규칙, 때로는 변경 가능
- 제품의 출시 시간을 줄인다는 목표가 있다면, 제품 출시팀이 소프트웨어의 수명주기에 대한 통제권을 가지고, 다른팀과 독립적으로 출시하도록 원칙을 정할 수 있다
- 다만 원칙의 수는 10개 미만이 좋다
- Heroku : 12가지 요소 (www.12factor.net)
The Twelve Factors
- Codebase
One codebase tracked in revision control, many deploys - Dependencies
Explicitly declare and isolate dependencies - Config
Store config in the environment - Backing services
Treat backing services as attached resources - Build, release, run
Strictly separate build and run stages - Processes
Execute the app as one or more stateless processes - Port binding
Export services via port binding - Concurrency
Scale out via the process model - Disposability
Maximize robustness with fast startup and graceful shutdown - Dev/prod parity
Keep development, staging, and production as similar as possible - Logs
Treat logs as event streams - Admin processes
Run admin/management tasks as one-off processes
실천사항#
원칙을 실행하는 방법. 업무 수행을 위한 자세하고도 실질적인 지침
필수기준#
자율적인 수명주기를 가지면서도 함께 협업하는 수많은 작은 부품으로 구성된 응집력 있는 시스템이 되어야 한다 - 넷플릭스, 벤 크리스텐센 Ben Christensen
모니터링#
인터페이스#
아키텍처 안정성#
코드를 통한 통제#
본보기#
맞춤형 서비스 템플릿#
사이드카 서비스, sidecar service
오토바이 옆에 부착되는 것처럼 부모 서비스에 부착되어 별도 프로세스로 동작한다. 서비스 검색, 동적 구성, 회복력 있는 서비스 간 통신과 같은 플랫폼 인프라스트럭처 기능을 동일한 인터페이스(주로 REST/HTTP)를 통해 JVM 기반이 아닌 서비스에도 제공 할 수 있다
기술부채#
예외처리#
거버넌스, governace#
거버넌스, governace
거버넌스는 기업의 목적이 이해관계자의 요구, 조건, 선택을 평가함으로써 달성될 수 있음을 보장한다. 우선순위 및 의사 결정을 통해 방향을 설정하고, 합의된 방향과 목표에 대한 성과, 준수, 과정을 모니터링한다.
코빗, COBIT, Control Objectives for Information and Related Technology
IT관리와 거버넌스를 위해 ISACA에서 개발한 프레임위크, 관리인이 통제 요건, 기술 이슈, 비지니스 위험 간의 간극을 줄이는 도구 모음을 제공한다
진화적 아키텍트의 핵심#
진화적 아키텍트의 핵심책무
- 비전
- 명료하게 소통되고, 시스템이 고객과 조직의 요구 사항을 충족하도록 돕는 기술 비전이 있는지 확인하라
- 공감
- 고객과 동료에 대한 여러분 결정의 파급력을 이해하라
- 협업
- 비전을 정의하고, 다듬고, 실행하기 위해 가능한 한 많은 동료와 협업하라
- 적응성
- 기술 비전이 고객과 조직이 요구하는 것을 반영하는지 확인하라
- 자율성
- 여러분 팀의 표준화와 자율성 사이에서 올바른 균형을 찾아라
- 거버넌스
- 시스템이 기술 비전에 맞게 구현되고 있는지 확인하라
Reference : Build Microservice By Sam Newman, Publisher: O’Reilly