[Docker&K8S] 1. 컨테이너 인프라 환경

컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경이다.

컨테이너 : 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태

우선 개발자의 인프라를 통한 서비스 설계를 보자.


모놀리식 아키텍처(monolithic architecture)

하나의 서비스 or 어플리케이션에 여러 기능이 통합되어 있는 구조이다. 구조는 아래와 같다.

장점

  • 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계 용이, 개발 단순, 코드 관리 간편
  • 보안이나 데이터베이스 접속과 같은 공통 설정들 사용으로 개발 속도 증가

단점

  • 서비스를 운영하는 과정에서 수정사항이 많을 경우, 다른 서비스에 영향을 미칠 가능성이 커짐
  • 서비스 규모 증가에 따른 서비스간 설계 복잡도 증가
  • 특정 서비스 사용량 증가로 인프라 증설 시 다른 서비스가 포함된 애플리케이션까지 확장하는 것은 비효율적

위 문제를 해결하는 방안으로 마이크로서비스 아키텍처가 등장하였다.


마이크로서비스 아키텍처(MSA, microservices architecture)

각각의 서비스가 독립된 서비스로 독립적으로 동작할 수 있는 완결된 구조이다. 구조는 아래와 같다.

하나의 어플리케이션 안에 있던 서비스가 각 서비스 관련 기능과 저장소를 독립적으로 가지는 구조로 바뀌었다. 각 서비스는 API 게이트웨이와 Rest API를 이용하여 통신한다.

서비스 개수는 고정된 것이 아니기 때문에 어떤 서비스가 등록되어 있는지 파악하기 위해 서비스 디스커버리를 사용한다.

또한 수많은 서비스의 내부 통신의 효율적 관리를 위하여 이벤트 버스를 서비스로 별도 구성한다.

장점

  • 개발된 서비스 재사용 용이
  • 서비스 변경되었을 때 다른 서비스에 영향 미칠 가능성 줄어듬
  • 사용량의 변화에 따라 특정 서비스만 확장 가능(사용자의 요구사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS환경에 적합)
  • 각 서비스는 필요한 기능이 특화된 저장소를 선택하여 개별 서비스에 할당 가능하다.
  • 새로운 서비스를 추가할 때에도 기존에 있는 이벤트 버스에 바로 연결하면 되므로 대응이 유연

단점

  • 모놀리식 아키텍처보다 복잡도가 높음
  • 각 서비스가 서로 유기적으로 통신하는 구조 설계 때문에 네트워크를 통한 호출 횟수 증가로 성능에 영향을 줄 수 있다.

Leave a comment