Cloud Computing/컨테이너 인프라 환경 구축을 위한 쿠버네티스 도커

1.1 컨테이너 인프라 환경이란

마크투비 2022. 8. 5. 13:52

컨테이너 인프라 환경이란


1. IT 인프라

먼저 인프라에 대해 알아보자.

 

인프라는 경제 용어로 경제 활동의 기반을 형성하는 기초적인 시설과 시스템(위키백과)을 말한다. IT에서 얘기하는 인프라도 비슷하다.

 

IT 인프라는 서비스 및 플랫폼을 개발 및 가동시키기 위해 필요한 모든 자원을 관리하는 시스템의 기반이다. IT 서비스를 운영하기 위한 리소스(서버, DB, 네트워크, 스토리지 등)를 구축하고 운영하기 위한 모든 것을 포함하는 개념이다.

 

시스템의 요구사항에는 해당 시스템이 어떤 기능을 하는지, 무엇을 할 수 있는지를 포함하는 기능적인 요구사항(functional requirement)과 시스템의 성능, 안정성, 확장성, 보안 등의 비기능적인 요구사항(non-functional requirement)이 있다. 따라서 인프라는 시스템의 비기능적인 요구사항과 관련이 있는 개념이다.

 

IT 인프라 유형은 크게 온프레미스 환경(On-premises)서비스로서의 인프라 환경(IaaS, Infrastructure as a Service) 두 가지로 나뉜다. 온프레미스 환경은 고전적인 인프라 환경으로 IaaS, 서비스로서의 인프라 환경으로 많이 변화하고 있다. 이렇게 인프라 환경이 변화하게 된 배경에 대해 알아보자.

2. 새로운 인프라 환경

새로운 인프라 환경이 등장하게 된 것은 개발 방법론이 변화했기 때문이다.

1) 개발 방법론의 변화 waterfallagile

기존의 개발 방법론인 waterfall에서 agile방법으로 변화했다.

 

waterfall은 계획 단계에서 설계와 환경을 완전히 구비한 후 목표를 달성해 나가는 방법으로, 기획 → 디자인 → 개발 → 테스트(검증) → 배포 순으로 진행하는 순차적인 개발 방법이다.

 

agile은 워터폴의 비효율적인 부분을 개선하기 위해 등장한 개발 방법론이다. 워터폴처럼 순차적인 과정을 거치지만, 그 개발 주기가 짧다. 과정을 빠르게 거치면서 프로토타입부터 살붙이기 형태로 개발해나가는 방식이다. 일정 주기를 정한 다음에 해당 주기에 맞춰 요구 사항을 만족하는 프로토타입을 만들고 이를 개선해 나가며 최종 목표에 점진적으로 접근한다.

2) 애자일 방법론에 맞춰 인프라 역시 변화 온프레미스클라우드 인프라

사용자가 요구하는 인프라를 즉각 제공하는 주요 기능은 유지하면서, 사용자마다 독립적인 환경에서 개발해도 모두 동일한 결과를 얻을 수 있고, 개발된 소프트웨어의 성능을 보장하면서 인프라의 가용 리소스를 최대한 확보할 수 있는 인프라 환경으로 변화하고 있다.

 

고전적인 인프라 환경 온프레미스 환경(On-premise)에서는 인프라 엔지니어가 개발 환경을 만들어 제공하면 개발자는 그에 맞는 도구를 모두 설치해야 한다. 데이터센터나 서버실에 서버를 두고 직접 관리하던 방식으로 서버, 네트워크 장비, OS, 스토리지, 각종 솔루션 등을 직접 사서 설치하고 관리해야 한다.

 

클라우드 인프라는 데이터센터나 전산실을 두지 않고, 외부 업체(AWS, MS Azure, GCP)의 자원을 빌려 가상의 서버를 여러 대 띄워 쓰는 구조이다. 인터넷을 통해 불특정 다수에게 인프라가 서비스 형태로 제공된다. 클라우드 프로바이더가 데이터 센터와 인프라 보유하고 있고, 일반 사용자는 가상화를 통해 온프레미스 설치 없이도 컴퓨팅 리소스를 이용할 수 있다.

3. 컨테이너 인프라 환경

1) 컨테이너 인프라 환경

컨테이너를 중심으로 구성된 인프라 환경으로 마이크로서비스 아키텍처로 구현하기에 적합하다. 컨테이너를 서비스 단위로 쪼개 배포하고 확장한다.

 

컨테이너는 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미한다. 컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없다. 따라서 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작한다.

애플리케이션 배포 환경의 변화 (출처 : https://post.naver.com/viewer/postView.naver?volumeNo=34056187&memberNo=36733075&vType=VERTICAL)

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

모놀리식 아키텍처는 하나의 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미한다. 모놀리식 아키텍처에서는 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편하다는 장점이 있다. 그러나 서비스를 운영하는 과정에서 수정이 많을 경우 이를 관리하기가 매우 비효율적이다.

3) 마이크로서비스 아키텍처 (MSA, Microservices Architecture)

모놀리식 아키텍처의 비효율적인 문제를 해결하는 방안으로 마이크로서비스 아키텍처가 등장했다. 마이크로서비스 아키텍처는 개별 기능을 하는 작은 서비스를 각각 개발해서 연결하는 방식으로, 개발된 서비스를 재사용하기 쉽고, 확장성도 좋다. 사용자의 요구 사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS 환경에 적합하다. 각각의 서비스와 관련된 기능과 데이터베이스를 독립적으로 가지는 구조이다.

 

각 서비스는 API 게이트웨이와 REST API를 이용한 통신 방식으로 사용자(외부)의 요청을 전달한다. 서비스 개수가 고정된 것이 아니므로 어떤 서비스가 등록되어 있는지 파악하기 위해 서비스 디스커버리를 사용한다. 여러 서비스의 내부 통신을 이벤트로 일원화하고 이를 효과적으로 관리하기 위해 별도로 이벤트 버스를 서비스로 구성한다.

모놀리식 아키텍처와 마이크로서비스 아키텍처 (출처 : https://thebook.io/080241/ch01/01/01/)

참고