개발 환경
온프레미스(on-premises)
: 엔지니어가 개발 환경을 만들어 제공하면 사용자(개발자)는 그에 맞는 도구를 모두 설치해야 함
서비스로서의 인프라 환경(IaaS, Infrastructure as a Service)
: 이미 구성된 환경을 사용자가 필요에 ㄸ라ㅏ 선택하고 조합해서 사용할 수 있게 제공됨
개발 방법론
폭포수(waterfall) 방법론
: 계획 단계에서 설계와 환경을 완전히 구비한 후 예정된 목표를 달성해 나감
애자일(agile)
: 일정 주기를 정한 다음에 해당 주기에 맞춰 요구 사항을 만족하는 프로토타입을 만들고 이를 개선해 나가며 최종 목표에 점진적으로 접근
컨테이너 인프라 환경
- 사용자가 요구하는 인프라를 즉각 제공
- 사용자마다 독립적인 환경에서 개발해도 모두 동일한 결과를 얻을 수 있음
- 개발된 소프트웨어의 성능을 보장하며 인프라의 가용 리소스를 최대한
확보할 수 있음
컨테이너 (container)
- 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태
- 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작
서비스 설계
모놀리식 아키텍처(monolithic architecture)
하나의 큰 목적 이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조
장점
- 소프트웨어가 하나의 결합된 코드로 구성
- 초기 단계에서 설계하기 용이함
- 개발이 좀 더 단순하고 코드 관리가 간편
단점
- 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진
수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커짐
- 서비스가 점점 성장해 기능이추가될수록 처음에는 단순했던 서비스 간의 관계가 매우 복잡해질 수 있음
보안이나 데이터베이스 접속과 같은 설정을 공통으로 사용하면서 서비스를 구현한다면 개발 속도는 매우 빠름
웹툰 서비스의 사용량이 폭발적으로 증가해 서버를 증설해야 할 경우
- IaaS 덕분에 사용량 증가에 따라 인프라를 증설하는 것은 어렵지 않음
- 웹툰 서비스의 사용량이 늘었다고 해서 뉴스, 블로그 등의 타른 서비스가 포함된 애플리케이션까지 확장하는 것은 상당히 비효율적
- 특정 서비스를 수정하는 과정에서 예기치 못한 에러가 발생한다면 해당 서비스 외에 전체 서비스를 이용할 수 없는 상황이 생길 수도 있음
-> 해결 방안으로 마이크로서비스 아키텍처 등장
마이크로서비스 아키텍처(MSA)
시스템 전체가 하나의 목적을 지향하는 바는 모늘리식 아키텍처와 동일
개별 기능을 하는 작은 서비스를 각각 개발해 연곁
보안, 인증 등과 관련된 기능이 독립된 서비스를 구성하고 있으며 다른 서비스들도 독립적으로 동작할 수 있는 완결된 구조
장점
- 개발된 서비스를 재사용하기 쉬움
- 향후 서비스가 변경됐을 때 다른 서비스에 영향을 미칠 가능성이 줄어듦
- 사용량의 변화에 따라 특정 서비스만 확장할 수 있음
- 사용자의 요구 사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS 환경에 적합
단점
- 모늘리식 아키텍 처보다 복잡도가 높음
- 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크를 통한 호출 횟수가 증가해 성능에 영향을 줄 수 있음
- 각 서비스는 API 게이트웨이와 REST(REpresentational State Transfer) API를 이용한 통신 방식으로 사용자(외부)의 요청을 전달
- 서비스 개수는 고정된 것이 아니기 때문에 어떤 서비스가 등록돼 있는지 파악하기 위해 서비스 디스커버리를 사용
- 수많은 서비스의 내부 통신을 이벤트로 일원화하고 이를 효과적으로 관리하기 위해 별도로 이벤트 버스를 서비스로 구성
-> 각 서비스는 필요한 기능이 특화된 데이터베이스를 선택해 개별 서비스에 할당할 수 있음
-> 분석 서비스를 새로 추가해야 할 때도 기존에 있는 이벤트 버스에 바로 연결하면 됨 (매우 유연하게 대응 가능)
-> 각 서비스는 독립적으로 동작할 수 있는 완결된 구조라서 이미 개발된 기능이 다른 서비스에 필요하다면 바로 재사용할 수 있음
컨테이너 인프라 환경에 적합한 아키텍처
모놀리식 아키텍처로 구현을 시작했지만, 시스템이 성장하고 기능이 늘어나면 마이크로서비스 아키텍처로 전환
중소기업 소규모 프로젝트 : 모놀리식 아키텍처
마이크로서비스 아키텍처
- 기능에 집중한 안정적인 서비스를 구현할 수 있음
- 구현된 서비스를 재사용할 수 있음
- 해당 서비스를 다른 서비스와 연결해 구조화하기 때문에 장기적으로 볼 때 유지보수 측면에서 매우 유리함
컨테이너 인프라 환경
- 컨테이너를 서비스 단위로 포장해 손쉽게 배포하고 확장할 수 있음
- 컨테이너 인프라 환경에서 제공하는 컨테이너는 마이크로서비스 아키텍처의 서비스와 1:1로 완벽하게 대응
- 이후 소개할 도구들을 이용하면 도입, 설계, 운용 비용이 감소하고 생산성이 향상
출처 : 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커