🎉 "스프링 마이크로서비스 코딩 공작소"라는 책을 읽은 바탕으로 정리해보겠다.
마이크로서비스 개념은 대규모 모놀리스 애클리케이션을 기술적 또는 조직적으로 확장하는데 직면한 많은 난제에 직접적인 대응으로 작고 느슨하게 결합된 분산 서비스이다. 대규모 애플리케이션 운영시 책임이 명확하고 관리하기 쉬운 구성 요소로 분해할 수 있다.
애플리케이션을 더 작은 서비스로 분리하고 단일 모놀리식 산출물에서
서비스 산출물을 추출하면 뭐가 좋을까?
유연성 : 분리된 서비스는 새로운 기능을 신속히제공, 다른 것과 함께 작동하는 코드가 적을수록 코드 변경에 따른 복장성이 낮음
회복성 : 분산된 서비스란 애플리케이션이 더 이상 한부분의 저하로 전체가 고장 나는 애플리케이션이 아님을 의미한다.
확장성 : 분리된 서비스는 여러 서버에 쉽게 수평 분산이 가능하므로 기능과 서비스를 적절히 확장가능하다.
마이크로서비스를 작성할 때 서비스를 어떤 형태로 배포해야될까?
물리서버 : 물리서버의 용량을 신속하게 늘릴 수 없으며 여러 물리서버에 걸쳐 수평적으로 확장하는데 막대한 비용이 소요될수 있다.
가상 머신 이미지 : 확장성과 서비스 실패 이벤트에 대한 응답으로 인스턴스를 빠르게 시작하고 종료할 수 있다.
가상 컨테이너 : VM 이미지에 마이크로서비스를 배포하는데 자연스러운 확장이다. 도커 컨테이너로 클라우드에 배포한다. VM 내 실행되고 가상 컨테이너를 사용하여 하나의 VM을 동일 이미지를 공유하는 일련의 독립형 프로세스로 분리할 수 있다. 마이크로서비스는 패키징되어 서비스의 다수 인스턴스를 사설 및 공용 클라우드에 신속히 배포하고 시작할 수 있다.
클라우드 기반 마이크로서비스의 장점은 탄력성에 기반을 둔다. 그리고 그 탄력성은 애플리케이션이 더 회복적일 수 있음을 의미한다.
적정규모 : 서비스가 적절한 크기의 서비스를 이용하여 애플리케이션을 신속히 변경하고 전체 애플리케이션에 대한 위험을 줄인다.
위치 투명성 : 서비스 호출에 대한 물리적 상세정보를 관리하는 방법이다. 애플리케이션에서 다수의 서비스가 빠르게 시작하고 종료될수 있다.
회복성 : 실패한 서비스를 우회하고 "빠른실패"를 적용하여 마이크로소비자와 애플리케이션 전반적인 무결성을 보호한다.
반복성 : 서비스의 모든 새 인스턴스가 시작할 때 운영 환경의 다른 서비스와 동일한 구성과 코드베이스를 보장한다.
확장성 : 서비스 간 직접적인 종속 관계를 최소화하고 마이크로서비스를 적절히 확장할 수 있도록 통신 방식을 구축한다.
핵심 개발 패턴 : 마이크로서비스를 설계할 때는 서비스가 어떻게 소비되고 통신할지 생각해야한다.
라우팅 패턴 : 서비스 디스커버리와 서비스 라우팅은 모든 대규모 마이크로 서비스 애플리케이션에서 핵심 부분이다
회복성 : 마이크로서비스를 사용하면 제대로 동작하지 않는 서비스로부터 서비스 호출자를 보호할 수 있고, 느리거나 다운된 서비스는 인접 서비스뿐 아니라 시스템을 붕괴시킬 수 있다.
보안 패턴 : 토큰 기반의 보안체계를 사용하면 클라이언트 자격증명을 전달하지 않고 서비스 인증과 인가를 구현할 수 있다.
로깅과 추적패턴 : 로깅 및 추적 전략을 잘 세우면 여러 서비스 간 트랜잭션 디버깅을 관리하기 용이하다.
지표 패턴 : 지표는 마이크로 서비스에서 풀 또는 푸시되어 지표 서비스로 수집되고 저장되며, 지표 서비스는 이 지표를 시각화 제품군과 경보 관리 도구로 보여준다.
-빌드 배포 패턴: 마이크로서비스의 실행 중인 서버의 배포가 환경 전체에 배포될 수 있는 하나의 원자적 산출물이 되길 원한다.
이렇게 마이크로서비스를 정리를 마치고, 애플리케이션 구축을 해보고자한다.
정리하자면 대략 이렇다
🧨 다음 챕터에 본격적으로 스프링 프로젝트를 만들어서 시작해보겠다