DevOps
란 개발(Development)과 운영(Operations)가 합쳐진 단어로 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화, 철학, 방식 및 도구의 조합이다. DevOps를 사용한다면 기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있다.
이러한 DevOps
에는 CI/CD(지속적인 통합, 지속적인 전달), MSA, IaC (Infrastructrue as Code) 등 여러 가지가 존재하는데, 오늘은 DevOps에 속하는 MSA(Micro Service Architecture)
와 이와 비교되는 Monolithic
을 비교하려고 한다.
MSA
는 Micro Service Architecture의 줄임말이다. MSA는 API를 통해서만 상호작용을 할 수 있다. 즉, 서비스의 end-point를 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화
한다.
내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다. 따라서 SOA(Service Oriented Architecture)
의 특징을 다수 공통으로 가진다.
❓ SOA(Service Oriented Architecture)
대규모 컴퓨터 시스템을 구축할 때, 업무상 일처리에 해당하는소프트웨어 기능
을서비스
로 판단하고 그 서비스를 네트워크 상에 연동하여 시스템 전체를 구축해나가는 방법론이다.
플랫폼에 종속되지 않는 표준 인터페이스를 통해 기업의 업무를 표현한느슨하게 연결된(Loosly coupled)
상호 조합 가능한 소프트웨어이다.
SOA 에서는 각각의 서비스가 데이터 계층, 비즈니스 로직, 뷰에 대한 모듈을 모두 가지고 있고, 각 서비스 간의 의존성이 최소화된다.
각각의 서비스는 모듈화
가 되어있으므로 이러한 모듈끼리 RPC(remote procedure call) 또는 message-driven API 등을 이용하여 통신한다.
각각 개별의 서비스 개발을 빠르게하며, 유지보수도 쉽게할 수 있도록 한다.
팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다.
서비스 별로 독립적인 배포가 가능
하다. 따라서 지속적인 배포 CD도 모놀리식에 비해서 가볍게 할 수 있다.
가각ㄱ 서비스의 부하에 따라 개별적
으로 scale-out
이 가능하다. 메모리, CPU 적으로도 상당부분 이득이 된다.
모놀리식에 비해 상대적으로 복잡하다. 서비스가 모두 분산되어 있으므로 개발자는 내부 시스템의 통신을 어떻게 가져가야할 지 정해야 한다.
통합 테스트가 어렵다. 개발 환경과 실제 운영 환경을 동일하게 만드는 것이 쉬빚 않다.
실제 운영환경에 대해서 배포
하는 것이 쉽지 않다. SMA의 경우 서비스 1개를 재배포하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는 지 확인
을 꼭 해야한다.
모놀리식에서는 단일 트랜잭션
을 유지하면 되었지만, MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고 서비스 연결을 위해서는 통신이 포함되므로 트랜잭션 유지
가 어렵다.
Monolithic Architecture는 소프트웨어의 모든 구성요소
가 한 프로젝트
에 통합되어 있는 형태이다. 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발하고, 개발이 완료된 웹 애플리케이션을 하나의 결과물로 패키징
하여 배포되는 형태를 말한다.
이런 애플리케이션을 모놀리식 아키텍쳐라고 하며, 주로 소규모 프로젝트에서 적용된다.
통합 시나리오 테스트가 수월하다.
배포가 간단해진다.
서비스가 커짐에 따라 빌드 및 테스트의 시간이 오래 걸린다.
개발 언어가 종속된다.
선택적으로 확장이 불가능하다. 서비스마다 관여하는 비중이 크게 달라도 하나의 프로젝트로 합쳐져 있으므로
전체가 확장되어야 한다.
하나의 서비스가 다른 모든 서비스에 영향을 준다.