도커 없이 클라우드 환경 이주 한다면..
지금 우리는 도커가 없는 세상에서 살고 있다고 생각해보자. 우리 회사의 애플리케이션의 클라우드 환경을 구글로 이전하려고 준비중에 있다. 클라우드 서비스는 IaaS, PaaS[1] 이 두가지 중에서 고민하고있다.
PaaS를 사용한다면 우리는 애플리케이션의 각 컴포넌트들을 하나씩 하나씩 클라우드의 매니지드 서비스로 옮기는 굉장히 까다로운 작업을 진행해야한다. 이는 또한 특정 클라우드에 종속되는 결과를 낳지만 비용적으로는 운영비를 줄일 수 있다.
IaaS를 사용한다면? 이주작업이 굉장히 간단해진다. 각 애플리케이션의 컴포넌트들을 가상머신에서 동작시키면 된다. 특정 클라우드에 종속될 걱정도 없다. 하지만 운영비가 비싸지게 된다.
도커와 함께 클라우드 환경을 이주한다면?
도커를 사용한다면 굉장히 간단해진다. 이를 사용한다면 위에서 보여주었던 단점들이 없는 새로운 선택지가 추가된다. 애플리케이션의 각 컴포넌트들을 컨테이너로 이주한 뒤 애저 쿠버네티스 서비스 혹은 직접 구축한 도커 클러스터에서 전체 애플리케이션을 실행할 수 있게 된다. 이 컴포넌트들은 가상머신처럼 독립적이지만 경량이라 PaaS의 매니지드 서비스와 같이 효율적이다. 그리고 이식성도 굉장히 뛰어나게 된다. 어디든지 별도의 수정이 없이 이주가 가능하다.
레거시 프로젝트의 현대화
하나의 애플리케이션이 가지고 있는 여러가지 기능의 코드들이 한곳에 모여있다면 어떻게 될까? 정말 골치아프게 된다.. 나는 분명 C라는 기능을 추가했는데 기존에 잘 되고 있던 A와 B가 먹통이 될 수 도있고.. 그러다보니 한번 기능을 추가할 때 마다 무수히 많은 테스트를 거쳐야 할 것이다. 즉 확장성이 떨어진다. 그래서 대부분 들어봤을 법한 MSA구조[2]로 개발이 되고 있는 것이다. 아무튼 우리는 이러한 한곳에 모여있는 monolithic한 구조의 옛날 프로젝트를 현대화하려고 한다. 바로 도커를 사용해서 말이다.
방법은 간단하다. 우리는 우선 기존 애플리케이션을 단일 컨테이너로 옮겨준다. 끝났다.(엥 그럼 그대로 아닌가?)
컨테이너는 가상 네트워크를 통해 외부에 노출없이 서로 통신이 가능하다. 즉 이를 분할해서 기능별로 별도의 컨테이너에 배치해 주어도 된다는 것이다. 따라서 우리는 기존 레거시 애플리케이션을 하나의 컨테이너로 두고 앞으로 추가되는 기능들은 따로 컨테이너를 제작하여 붙여주기만 하면 된다. 그러면 추후 외부에서 들어오는 요청은 라우팅 컴포넌트가 확인하여 알아서 적절한 컨테이너로 전달해준다.
프로젝트의 도구를 통일
개발팀은 모든 프로젝트에서 같은 도구를 사용하기를 원한다. 도커 클러스터를 구축하면 빌드, 배포, 그리고 운영에서의 개발환경을 모두 같은 도구로 사용할 수 있다.
요약
- 클라우드 이주가 간단해진다.
- Monolithic 구조의 애플리케이션을 MSA구조로의 전환이 가능하다.
- 프로젝트에서 사용하는 도구를 통일할 수 있다.
Reference
[1] https://www.whatap.io/ko/blog/9/
[2] https://wooaoe.tistory.com/57