Antifragile
1. Auto scaling - 비수기, 수기 시즌에 맞춰 유동적
2. Microservices
3. Chaos engineering - 급격한 상황 변화에 대한 안정적인 서비스
4. contrinuous deployments - 서비스 작업 -> 배포 (자동화) 이를 pipeline으로 연결 (CI/CD)
Cloud Native Architecture
1. 확장 가능한 아키텍처 (컨테이너, 서버 가상화)
Microservices -> CI/CD -> DevOps(기능 추가 -> 테스트 -> 배포의 무한반복을 의미) -> Container
CI/CD
카나리 배포, 블루그린 배포
95% -> 이전 버전
5% -> 신규 버전
DevOps (Development + Operations + QA)
개발조직,운영조직과 퀄리티 보장 통합을 의미
끊임없이 계속 개발, 운영, 테스트
Container 가상화
12가지 항목
1. Base Code - 형상관리를 위한 코드 관리(Git과 같은 한곳에서 통일적 관리)
2. Dependency isolation - 전체 시스템의 영향을 주지 않고 변경되고 수정되어야 함
3. Configurations - 시스템 설정 외의 구성설정을 통한 MSA의 설정
4. Linkable backing Servcie - 응용프로그램 서비스를 제공 (상호작용)
5. Stages of Creation - 빌드 , 릴리즈의 상황을 분리 (CI/CD와 같이 롤백등 항상 이전/신규 상황유지)
6. Stateless processes - 독립적으로 작용하여 컨테이너당 다른 기능 수행
7. Port Binding
8. Concurrency - 많은 수의 서비스를 복사해서 이루어지므로 부하 분산이 가능하며 동시성 보장
9. Disposabilty
10. Development & production parity - 개발과 운영의 분리
11. Logs - 어플리케이션이 실행되지 않더라도 로그는 정상적으로 출력되어야함
12. Admin Processes for eventual processes - 적절한 관리 도구 필요 (레포트및 데이터 정제, 정리)
3가지 항목
1. API first
2. Telemetry - 모든 지표는 수치화하여야함
3. Authentication and authorization - API 사용시 인증 단계, 인가 허락이 필요
Monolith
한 소프트웨어 안에 모든걸 포함(DB, Front, back 등)
어플리케이션에서 사용하는 데이터가 한곳에 모여 참조되어 서비스되는 형태
일부분 수정 시 전체 프로젝트의 패키징과 배포가 필요함
MicroServices
각각의 기능을 분리하여 개발 (분리된 서비스가 다른 서비스에 영향을 최소화)
장치의 전체 멈춤이 발생할 상황이 없음
함께작동되는 작은 기능들
비지니스 로직이 분리되어야 하며, CI/CD가 무조건적으로 필수다.
굳이 통일된 언어를 사용할 필요가 없이 API 형태로 제공하면 각자 필요한 언어로 설정할 수 있다.
SOA
MSA
RESTful Web Service
level 0. http://server/getPosts
http://server/deletePosts
level 1. http://server/accounts
http://server/accounts/10
level 2. level1 + http methods
level 3. level2 + HATEOAS(사용자의 목록이던 그 목록으로 무엇을하던 이런것들의 총합)
고려해야할 사항
1. Consumer first
2. Make best use of HTTP
3. Level2를 살려 개발 필요 (Get, Post, Put, Delete)
4. Response Status 를 사용하여 적절한 대응 필요 (200[정상], 404[클라이언트 오류], 400, 201, 401, 50*[서버오류])
5. Use plurals(복수형 사용)
6. Use nouns for resources (리소스는 명사를 통해 제공)
7. For excpeitons - define a consistent approach(목적지는 동일하도록)