이 글은 인프런 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)"를 정리한 글입니다. 문제/오류가 있을 시 댓글로 알려주시면 감사드리겠습니다
Microservice와 Spring Cloud 소개
- 1960 ~ 1980 : 하드웨어 중심, fragile
- 1990 ~ 2000 : 분산 중심
- 2010 ~ : anti-fragile, cloud native/ 탄력적
-> devops라는 문화 발생, 변화에 적응이 빠르고 비용절감
Cloud Native Architecture
Cloud Native Application
- Microservice
- CI/CD
- DevOps
- Containers
12 Factors + 3
- 클라우드 서비스의 가이드라인
+ API first
+ Telemetry
+ Authentication and authorization
Monolithic vs Microservice
Microservice
아마존에서의 리소스 사용 방식
1. 모든 데이터는 서비스 인터페이스를 통해 공개되어야한다
2. 팀은 서비스 인터페이스를 통해서만 통신을 해야한다 (계정을 이용한 직접 DB 읽기, 백도어, 공유 데이터 절대 안됨)
3. 다른 방식은 허용되지 않는다
4. 언어, DB, 프로토콜은 중요치 않다
5. 서비스 인터페이스는 처음부터 외부에 공개될 수 있는 것처럼 설계되어야한다.
6. 이것을 지키지 않으면 해고~
7. 좋은 하루 보내세요~
1. Challenge - 이전과 패러다임을 바꿔야한다
2. Small Well Chosen Deployable Units
3. Bounded Context
4. RESTful- restapi로 통신을 하는 것을 권장한다
5. Configuration Management - 환경설정은 코드로 가지고 있지 않고, 외부에서 전달해줄 것이다
6. Cloud Enabled
7. Dynamic Scale Up And Scale Down - 서비스마다 다른 instance의 갯수를 가질 수 있다
8. CI/CD
9. Visibility - 시각화 관리 도구가 필요
1. 기존대비 얼마만큼의 시간이 들 것인가
2. 독립 라이프 사이클?
3. 독립적인 확장 가능?
4. 오류사항이 독립적인가?
5. 외부 종속성과의 상호작용을 최소화할 수 있도록 서비스가 구분되어있는가
6. polyglot 기술을 지원하는가?
MSA VS SOA(Service Oriented Architecture)
둘다 서비스를 지향한다는 점에 대해서는 같다
| SOA
| MSA
get : 데이터 읽기
post : 새로운 데이터 추가
put : 기존의 데이터 변경
delete : 기존의 데이터 삭제
HATEOS : Hypermedia AS The Engine Of Application State
자원에 호출 가능한 API 정보를 자우너의 상태를 반영하여 표현하는 것
Request methods : get, post, put, delete
Response Status : 200, 404, 400, 201, 401
uri에는 예민한 정보 x
uri에 대해서는 복수의 형태를 권고 : users/1
resource는 명사형태로 표현한다
일괄적인 endpoint를 사용하는 것이 좋다(apigateway를 이용해서 처리)
MSA 표준 구성요소
환경 설정 정보는 config Store과 같은 외부에 저장,
마이크로서비스는 컨테이너 기반 가상화 방식으로 개발되어있을 것
CNCF(Cloud native Computing Foundation)라는 가이드를 사용할 수 있다
Spring Cloud
환경 설정 -> Spring Cloud Config Server
서비스 등록, 위치정보 확인 -> Naming Server(Eureka)
로드밸런싱 -> Ribbon(Client side), Spring Cloud Gateway
데이터 통신 -> FeignClient
시각화, 모니터링 -> Zipkin Distributed Tracing, Netflix API gateway
장애 복구 회복성 패턴 -> Hystrix