1. 코드 작성과 시스템 설계 시작 전 아이디어를 브레임스톰 해보고 간단하게 적어본다
2. 구축하려는 시스템 관련 전문 지식이 많은 사람과 화이트보드 세션을 진행하고 충분한 검토 과정을 거친다
: 잘못되거나 미완성된 설계를 바탕으로 시스템을 구현하면 나중에 문제가 생길 수 있다
3. 여러가지 설계 옵션을 파악하고, 각 옵션의 절충점을 이야기 해본다
: 한 문제에 직면했을때 가능한 여러가지 옵션을 간단히 적어보고 절충점을 따져보자
4. 가상 사용 케이스를 예상해본다
5. 시스템의 인터페이스를 잘 생각해보고 좋은 인터페이스를 디자인 한다.
6. 최상의 솔루션을 채택하고 시스템 성능을 추정해야 한다
7. 시스템을 설계하기 전 성능을 미리 예측해야한다
: RPS아 Storage Utilization 계산법을 미리 알아두면 좋다
8. 진화할 수 있는 시스템에 미리 대응해본다
: 시스템이 10배 확장되어도 잘 작동되어야 한다
9. 기본 개발 구성 요소에 대해 잘 알고 있어야 한다
: 코어 라이브러리, 기본 자료구조 등. 어떻게 구현되는지 자세하게 알아야 한다
10. 모든 요구사항을 충족하는 시스템을 설계하려고 하지 말자
11. 캐싱, 병렬실행을 통해 low latency 요구 사항 충족 시키기
12. Eventual Consistency와 Strong Consistency 모델 이해하기
※ Eventual Consistency
: 다른 클라이언트들이 변경된 데이터를 요청했을 때 어떤 클라이언트는 최신의 데이터를, 어떤 클라이언트는 오래된 데이터를 받는 경우
: 언젠가 동기화가 되면 모든 클라이언트가 동일한 데이터를 받아 볼 수 있게됨
※ Strong Consistency
: 관계형 데이터베이스와 같이 클라이언트간 일관된 데이터를 보장 받는 것
13. 데이터 액세스 타임 이해하기
14. 장애에 튼튼한 앱 구현하기
: Canary, 레플리케이션, 로드 밸런싱
※ Canary
: 구버전과 신버전을 구성하여 일부 트래픽을 신버전으로 분산시켜 테스트를 진행한뒤 서서히 옮기는 방식
: 위험감지를 위한 배포 전략으로 성능 모니터링에 유리
15. 장애 발생 시 전체 운영 중단보다 부분 기능이 작동하는 것이 더 낫다
16. 충분한 모니터링, 로깅, 디버깅 훅 추가하기
Reference
'Devops > DevOps' 카테고리의 다른 글
상위 1% 엔지니어(or 개발자)가 되기 위한 7가지 습관 (1) | 2023.12.28 |
---|---|
형상 관리 모범 사례 (1) | 2023.12.28 |
깃허브 액션 VS 젠킨스 비교하기 (확장성 / 기능성 / 프로젝트 규모 및 구조) (0) | 2023.08.26 |
PM, PL, PA, PO의 역할과 차이 (+프로젝트와 프로덕트의 차이) (0) | 2023.08.13 |
개발에서의 DevOps의 역할 (0) | 2023.08.13 |