
※ 위 책을 읽고 개념 위주로 정리한 내용임을 알립니다.
container : 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태
- 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작
monolithic architecture
- 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합되어 있는 구조
- 소프트웨어가 하나의 결합된 코드로 구성되어 있기에 초기 단계에서 설계하기에 용이
- 개발이 좀 더 단순하고 코드 관리가 간편
- 그러나 서비스 운영 중 수정 작업이 많아지거나, 기능이 추가될수록 서비스 간의 관계가 매우 복잡해짐
- 서비스를 수정하는 과정에서 에러가 발생하면 전체 서비스를 이용할 수 없게 될 가능성도 있음
- 개발 속도는 매우 빠름
- IaaS 덕분에 인프라 증설은 어렵지 않겠지만 하나의 서비스 이용량 때문에 전체 인프라를 증설해야 됨

MSA (Microservices Architecture)
- 개별 기능을 하는 작은 서비스들을 각각 개발하여, 각각의 독립적인 서비스로 구성하는 방식
- 개발된 서비스를 재사용하기 쉬움
- 향후 서비스가 변경되었을 때 다른 서비스에 영향을 미칠 가능성이 줄어듦
- 사용량의 변화에 따라 특정 서비스만 확장할 수 있음
- 따라서 사용자의 요구 사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS 환경에 적합
- 하지만 monolithic architecture에 비해 복잡도가 높음
- 각 서비스 간의 유기적인 통신 때문에 네트워크를 통한 호출 횟수가 증가해서 성능에 영향을 줄 수 있음

컨테이너 인프라 환경의 구성 요소
- 컨테이너
- 컨테이너 관리
- 개발 환경 구성 및 배포 자동화
- 모니터링
Docker

- 컨테이너 환경에서 독립적으로 애플리케이션을 실행하도록 컨테이너 생성 및 관리를 도와주는 컨테이너 도구
- 애플리케이션 실행 시 운영 체제 환경에 관계없이 독립적인 환경에서 일관된 결과 보장
Kubernetes

- 다수의 컨테이너를 관리하는 데 사용
- 컨테이너의 자동 배포와 배포된 컨테이너에 대한 동작 보증, 부하에 따른 동적 확장 등의 기능 제공
- 컨테이너 인프라에 필요한 기능을 통합하고 관리하는 솔루션
- 컨테이너 인프라를 기반으로 API 게이트웨이, 서비스 디스커버리, 이벤트 버스, 인증 및 결제 등
다양한 서비스를 효율적으로 관리할 수 있는 환경을 제공하고 이를 내외부와 유연하게 연결해줌
Jenkins

- 지속적 통합(CI, Continuous Integration)과 지속적 배포(CD, Continuous Deployment) 지원
- CI와 CD는 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화하여 개발 단계를 표준화함
- 개발된 코드의 빠른 적용과 효과적인 관리를 통해 개발 생산성을 높이는 데 초점을 둠
- 컨테이너 인프라 환경처럼 단일 기능을 빠르게 개발해서 적용해야 하는 환경에 매우 적합한 도구
Prometheus / Grafana

- 모니터링 도구
- 프로메테우스는 상태 데이터 수집 / 그라파나는 수집한 데이터를 보기 좋게 시각화
- 컨테이너 인프라 환경에서는 많은 종류의 소규모 기능이 각각 나뉘어서 개발되기에 중앙 모니터링이 필요함
- 이 둘은 컨테이너로 패키징되어 동작하며 최소한의 자원으로 쿠버네티스 클러스터의 상태를 시각적으로 표현함
※ 이 책에서 구현한 실습용 컨테이너 인프라 환경

'Infrastructure' 카테고리의 다른 글
Kubernetes와 친해지기 (0) | 2022.04.28 |
---|---|
Prometheus & Grafana (0) | 2022.04.28 |
Jenkins (0) | 2022.04.27 |
Docker (0) | 2022.04.26 |
Kubernetes (0) | 2022.04.25 |