MSA 마무리
무조건 MSA!?
- MSA를 도입하기 위해서는 수업의 내용처럼 많은 것들이 사용되며, 정책 설정을 해야 할 것이 많습니다. 빠르게 프로젝트의 프로토 타입을 만들어야 한다면 모놀리틱 아키텍쳐를 사용하고, 후에 부분, 부분 전환하는 것도 방법일 것입니다.
- 우리는 이 수업을 통해 MSA를 구성하기 위해서는 어떤 기능들이 필요한지 배웠습니다. 만약 스프링 클라우드가 아닌 다른 프레임워크로 MSA를 개발 한다고 해도 우리는 지금까지 공부했던 기능들이 있어야 함을 알 수 있습니다.
- 개발에 정답은 없습니다. 개발팀이 추구하는 방향에 따라 개발의 크기, 기능의 구성 등 정말 다양한 사항들이 결정될 것입니다. 개발된 레거시의 구조, 신규 프로젝트에서의 합의된 구조를 잘 파악하고 따라 가는것도 중요합니다. 그래야 개발이 완료되었을 때 유지보수도 수월 할 것이며, 추가 투입 인원이 있다면 보다 수월하게 프로젝트에 진입할 수 있을 것입니다.
쿠버네티스
- 쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 오픈소스 플랫폼입니다.
- Google에서 개발하고 현재는 CNCF(Cloud Native Computing Foundation)에서 관리합니다.
- 컨테이너 오케스트레이션 도구로, 다수의 컨테이너를 효율적으로 관리할 수 있습니다.
주요 개념
- 컨테이너: 애플리케이션과 그 종속성을 함께 패키징한 가상화된 환경입니다.
- Pod: 쿠버네티스에서 실행되는 최소 단위의 배포 객체로, 하나 이상의 컨테이너를 포함합니다.
- 노드(Node): 쿠버네티스 클러스터에서 Pod가 실행되는 물리적 또는 가상 머신입니다.
- 클러스터: 여러 노드로 구성된 쿠버네티스의 집합입니다.
- 네임스페이스(Namespace): 클러스터 내에서 리소스를 논리적으로 구분하는 단위입니다.
쿠버네티스와 Spring Cloud 비교
- 공통점
- 확장성: 둘 다 마이크로서비스 아키텍처의 확장성을 지원합니다.
- 관리성: 서비스의 배포, 관리, 확장 등을 쉽게 할 수 있도록 도와줍니다.
- 고가용성: 서비스의 가용성을 높이고, 장애 발생 시 자동 복구를 지원합니다.
- 차이점
- 초점:
- Spring Cloud: 마이크로서비스 간의 통신, 서비스 디스커버리, 구성 관리 등 애플리케이션 레벨의 문제 해결에 초점
- 쿠버네티스: 컨테이너 관리, 배포, 스케일링 등 인프라 레벨의 문제 해결에 초점
- 구성 요소:
- Spring Cloud: Eureka, Ribbon, Zuul, Config Server, Hystrix 등 다양한 마이크로서비스 패턴을 지원하는 구성 요소
- 쿠버네티스: Pod, Deployment, Service, Ingress, ConfigMap, Secret 등 컨테이너 오케스트레이션에 필요한 구성 요소
- 배포 방식:
- Spring Cloud: 애플리케이션 코드와 함께 다양한 클라우드 서비스에 직접 배포
- 쿠버네티스: 컨테이너 이미지를 기반으로 클러스터 내에서 배포 및 관리
Spring Cloud와의 통합도 가능
- Spring Cloud Kubernetes
- Spring Cloud Kubernetes는 Spring Cloud와 Kubernetes의 통합을 지원합니다.
- 서비스 디스커버리, ConfigMap, Secrets 등을 Spring Cloud 애플리케이션에서 사용할 수 있도록 지원합니다.
- 주요 기능
- 서비스 디스커버리: Kubernetes API를 통해 서비스 인스턴스를 동적으로 검색하고 로드 밸런싱을 수행합니다.
- 구성 관리: Kubernetes ConfigMap과 Secrets을 사용하여 애플리케이션 설정을 중앙에서 관리합니다.
- 자동화된 배포: CI/CD 파이프라인과 통합하여 애플리케이션의 자동 배포와 관리를 지원합니다.
쿠버네티스의 장점과 단점
- 장점
- 확장성: 수평 확장을 통해 대규모 트래픽을 처리할 수 있습니다.
- 자동화: 배포, 스케일링, 복구 등의 작업을 자동화하여 운영 부담을 줄입니다.
- 유연성: 다양한 인프라 환경에서 일관된 운영이 가능합니다.
- 단점
- 복잡성: 초기 설정과 운영에 대한 학습 곡선이 높습니다.
- 운영 비용: 클러스터 운영과 모니터링에 추가적인 리소스가 필요합니다.
- 디버깅 어려움: 분산 환경에서 문제를 추적하고 해결하는 것이 복잡할 수 있습니다.
실습
📌 지금까지의 강의 내용을 바탕으로 간단한 상품 주문을 만들어 보겠습니다.
실제 구현에는 이보다 많은 보안, 예외처리 등의 기능이 필요합니다.
강의를 통해 설명드린대로 도메인별 묶음으로 개발하고, 처음부터 완벽하게 완성하기보다는 하나씩 기능을 추가해 가며 진행하신다면, 보다 쉽게 접근 할 수 있을것입니다.
반드시 해당 프로젝트 결과물을 보지 않고 여러분의 작은 프로젝트를 만들어 보시기 바랍니다.

안타깝지만 코드 리뷰 수준으로 그쳐야 할 것 같다.
입문 프로젝트 진행 2일차
ERD 제출본
