🖋️ 마이크로서비스 아키텍처(MSA) 이해
애플리케이션을 느슨하게 결합된 서비스 컬렉션
구성하는 소프트웨어 아키텍처 스타일
MSA의 각 서비스는 특정 비즈니스 기능을 나타내며 독립적으로 작동
-
형질
-
모듈성
- 특정 기능에 초점을 맞춘 작은 모듈식 소프트웨어
-
독립성
-
다양한 기술 스택
- 서로 다른 프로그래밍 언어, 데이터베이스 및 기타 도구를 사용 가능
-
사용 방법
-
비즈니스 기능 식별
- 애플리케이션을 고유한 비즈니스 기능으로 분류
- 각 기능은 별도의 마이크로 서비스일 가능성 존재
-
서비스 경계 정의
- 각 서비스의 책임을 명확하게 정의
- 각각에는 단일 책임과 통신을 위한 정의된 인터페이스 존재 필요
-
독립적으로 개발
- 각 서비스를 독립적으로 개발 및 배포
- 개발 주기를 단축
- 업데이트를 더 쉽게 수행 가능
-
통신
- 서비스는 잘 정의된 API(종종 RESTful API 또는 메시징 큐)를 사용하여 서로 통신
-
데이터 관리
- 자체 데이터베이스를 가질 수 있으므로 느슨한 결합
- 독립적인 확장성을 보장 가능
🖋️ 쿠버네티스 이해
호스트 클러스터 전반에서 애플리케이션 컨테이너의
배포, 확장 및 운영을 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼
주요 특징들
- 컨테이너 관리
- 서비스 검색 및 로드 밸런싱
- DNS 이름 또는 IP 주소를 사용하여 컨테이너를 노출 가능
- 컨테이너에 대한 트래픽이 높으면, 네트워크 트래픽을 로드 밸런싱하고 분산 가능
- 스토리지 오케스트레이션
- 로컬 스토리지, 퍼블릭 클라우드 제공업체 등과 같은
원하는 스토리지 시스템을 자동으로 마운트
- 자동화된 롤아웃 및 롤백
- 응용 프로그램의 배포 및 업데이트 프로세스를 관리합니다.
사용 방법
- 애플리케이션 컨테이너화
- Kubernetes를 사용하기 전에 일반적으로 Docker를 사용하여 애플리케이션을 컨테이너화 필요
- 쿠버네티스 클러스터 생성
- 컨테이너화된 애플리케이션을 실행하는 노드 집합인 쿠버네티스 클러스터를 설정
- 이 작업은 클라우드 플랫폼(예: AWS, GCP, Azure) 또는 온-프레미스에서 수행 가능
- 배포 및 서비스 정의
- 배포
- Kubernetes 배포 구성에서 애플리케이션의 원하는 상태를 정의
- 그러면 쿠버네티스는 애플리케이션 상태가 원하는 상태와 일치하는지 확인
- 서비스
- 응용 프로그램에 액세스하는 방법을 정의
(예: 부하 분산 장치를 통해, 클러스터 내에서 또는 외부 IP를 통해)
- 크기 조정
- 클러스터에서 실행하려는 응용 프로그램의 인스턴스 수를 지정
- 쿠버네티스는 스케일링을 자동으로 처리
- 모니터링 및 관리
- Kubectl, 대시보드 등과 같은 Kubernetes 도구를 사용하여
애플리케이션 및 클러스터의 상태와 성능을 모니터링
MSA와 쿠버네티스 통합
- 이상적인 페어링
- Kubernetes는 컨테이너화된 애플리케이션을 효율적으로 처리할 수 있는 기능
- 마이크로서비스를 관리하는 데 특히 적합
- 서비스 배포
- 각 마이크로 서비스를 Kubernetes에서 관리하는 컨테이너 집합으로 배포
- 확장 및 부하 분산
- Kubernetes는 수요에 따라 서비스를 동적으로 확장하고
서비스 인스턴스 간에 부하를 분산 가능
⭐ 결론
마이크로서비스 아키텍처와 쿠버네티스는 소프트웨어 개발 및 배포를 위한 강력하고 현대적인 툴
- MSA는 애플리케이션을 작고 독립적인 서비스 제품군으로 빌드하는 방법을 제공
- Kubernetes는 특히 컨테이너화된 경우 이러한 서비스를 관리할 수 있는 강력한 도구를 제공
이 조합을 통해 확장 가능하고 복원력이 뛰어나며 효율적인 애플리케이션을 구축 가능
이를 자세히 살펴보면 다양한 개념과 도구를 접하게 되며
각각은 클라우드 네이티브 개발의 더 큰 에코시스템에서 역할 함