이번 글은 예전에 Coursera에 있는 Reliable Google Cloud Infrastructure design process 강의를 보고 일부를 정리한 글이에요. 더 자세한 정보는 해당 강의를 수강해 보는 걸 추천해 드릴게요. 무료예요!
Requirements, Analysis, and Design#
Who: 시스템 사용자뿐만 아니라 개발자와 이해관계자들까지 결정하는 사람이에요.
What: 단순하면서 어려운 것. 우리에게 필요한 주요 기능 요건을 확립해야 하면서 분명하고 모호하지 않은 방식으로 설정해야 해요.
Why: 시스템이 필요한 이유는 정말 중요한 질문이에요. 설계될 시스템이 해결해야 하는 가장 큰 문제는 무엇인가? 명확한 요구에 대한 이해가 없다면 추가 요구사항이 더해질 거예요. why는 잠재적으로 KPI's, SLO's, SLA's를 정의하는 데 도움을 줄 거예요.
When: 범위를 산정하는 것과 현실적인 수행 기간을 결정하는 데 도움을 줘요
How: 수많은 비기능적 요구사항을 결정하는 데 도움을 줘요.
SLOs, SLIs, and SLAs#
KPI: Key Perfomance Indicator, 핵심 성과 지표. 미션, 비전, 핵심 가치에 도달하기 위한 작은 목표들의 구성
SLI: Service Level Indicator, 서비스 수준 척도. 서비스의 수준을 정량적으로 측정할 수 있게 설정하고 추적할 수 있도록 만든 지표
SLO: Service Level Objectives, 서비스 수준 목표. SLI에 의해 측정된 값이 목표값이나 일정 범위 안에 들어왔는지 확인하는 지표
SLA: Service Level Agreement, 서비스 수준 협약. 조직이나 팀별로 추구하는 목표를 달성하기 위해 서비스에 더한 작업물을 문서화해 측정된 기대치를 지닌 문서로 만드는 것.
The 12-Factor App#
더 자세한 정보는 The Twelve-Factor App 사이트를 참고하세요.
- 코드베이스
버전 관리되는 하나의 코드베이스와 다양한 배포 - 종속성
명시적으로 선언되고 분리된 종속성 - 설정
환경(environment)에 저장된 설정 - 백엔드 서비스
백엔드 서비스를 연결된 리소스로 취급 - 빌드, 릴리즈, 실행
철저하게 분리된 빌드와 실행 단계 - 프로세스
애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행 - 포트 바인딩
포트 바인딩을 사용해서 서비스를 공개함 - 동시성(Concurrency)
프로세스 모델을 사용한 확장 - 폐기 가능(Disposability)
빠른 시작과 그레이스풀 셧다운(graceful shutdown)을 통한 안정성 극대화 - 개발/프로덕션 환경 일치
개발, 스테이징, 프로덕션 환경을 최대한 비슷하게 유지 - 로그
로그를 이벤트 스트림으로 취급 - Admin 프로세스
admin/maintenance 작업을 일회성 프로세스로 실행
You cannot have a positive life and a negative mind.
— Joyce Meyer