컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 1장
1.1 컨테이너 인프라 환경이란
컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경
컨테이너란?
하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미
이렇게 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작함
컨테이너 인프라 환경의 장점을 이해하려면 서비스의 설계 부분을 살펴보자!
1.1.1 모놀리식 아키텍처
모놀리식 아키텍처는 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합되어 있는 구조를 의미
장점
- 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편
단점
- 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커짐
- 서비스가 점점 성장해 기능이 추가될수록, 단순했던 서비스 간의 관계가 매우 복잡해질 수 있음
그렇다면,
아키텍처 중 특정 서비스의 사용량이 폭발적으로 증가하여 서버를 증설해야 한다고 가정해보자.
- Iaas 덕분에 사용량 증가로 인프라를 증설하는 것은 어렵지 않다.
- 하지만 특정 서비스의 사용량이 늘었다고 해서 다른 서비스가 포함된 애플리케이션까지 확장하는 것은 상당히 비효율적
이러한 문제를 해결하는 방안으로 마이크로 아키텍처가 등장하였다.
1.1.2 마이크로서비스 아키텍처
마이크로서비스 아키텍처란?
시스템 전체가 하나의 목적을 지향하는 바는 모놀리식 아키텍처와 동일
하지만, 개별 기능을 하는 작은 서비스를 각각 개발해 연결하는데서 차이!
장점
- 개발된 서비스를 재사용하기 쉽고
- 향후 서비스가 변경되었을 때 다른 서비스에 영향을 미칠 가능성이 줄어들며
- 사용량의 변화에 따라 특정 서비스만 확장 가능
따라서 사용자의 요구사항에 따라 가용성을 즉각적으로 확보해야 하는 Iaas 환경에 적합
단점
- 모놀리식 아키텍처보다 복잡도가 높으며
- 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크를 통한 호출 횟수가 증가해 성능에 영향을 줄 가능성이 존재
특징
- 각 서비스는 API 게이트웨이와 REST API를 이용한 통신 방식으로 외부의 요청을 전달
- 서비스의 개수는 고정된 것이 아니기 때문에 어떤 어떤 서비스가 등록돼 있는지 파악하기 위해 서비스 디스커버리를 사용
- 또한 수많은 서비스의 내부 통신을 이벤트로 일원화하고 이를 효과적으로 관리하기 위해 별도로 이벤트 버스를 서비스로 구성
1.1.3 컨테이너 인프라 환경에 적합한 아키텍처
정답은 없다.
하지만, 소규모 프로젝트라도 마이크로 서비스 아키텍처로 설계하면 기능에 집중한 안정적인 서비스를 구현할 수 있고 구현된 서비스를 재사용할 수 있으며, 해당 서비스를 다른 서비스와 연결해 구조화하기 때문에 장기적으로 유지보수 측면에서 매우 유리하다.
1.2 컨테이너 인프라 환경을 지원하는 도구
컨테이너 인프라 환경은 컨테이너, 컨테이너 관리, 개발 환경 구성 및 배포 자동화, 모니터링으로 구성
도커
컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구
- 도커로 애플리케이션을 실행하면 운영체제 환경에 관계없이 독립적인 환경에서 일관된 결과를 보장
쿠버네티스
다수의 컨테이너(도커)를 관리하는데 사용
컨테이너의 자동 배포와 배포된 컨테이너에 대한 동작 보증, 부하에 따른 동적 확장 등의 기능을 제공
- 처음에는 다수의 컨테이너만 관리하는 도구에서
- 컨테이너 인프라에 필요한 기능을 통합하고 관리하는 솔루션으로 발전
젠킨스
지속적 통합, 지속적 배포를 지원
- 지속적 통합과 지속적 배포는 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화하여 개발 단계를 표준화
프로메테우스와 그라파냐
모니터링을 위한 도구
- 프로메테우스
- 상태 데이터를 수집
- 그라파냐
- 프로메테우스로 수집한 데이터를 관리자가 보기 좋게 시각화
컨테이너 인프라 환경에서는 많은 종류의 소규모 기능이 각각 나누어 개발 → 중앙 모니터링의 필요성!
'독서📚' 카테고리의 다른 글
자바 모듈 시스템(+ module-info.java & setting.gradle) (1) | 2024.02.07 |
---|---|
[아이템 44] 표준 함수형 인터페이스를 사용하라 (0) | 2023.09.15 |
[아이템 43] 람다보다는 메서드 참조를 사용하라 (0) | 2023.09.15 |
[아이템 42] 익명 클래스보다는 람다를 사용하라 (0) | 2023.09.15 |
[자바의 정석] 1. 자바를 시작하기 전에 (0) | 2023.06.27 |