클라우드 네이티브는 단순히 애플리케이션을 클라우드(AWS 등)에서 "실행"하는 것을 넘어, 클라우드 환경의 장점을 최대한 활용하도록 애플리케이션을 "설계하고, 만들고, 운영하는 방식(철학)"을 의미합니다.
핵심 목표: 변화에 빠르고 유연하게 대응하며, 안정적이고 확장성 높은 애플리케이션을 만드는 것.
주요 기술 요소: 클라우드 네이티브를 실현하기 위해 다음과 같은 기술들이 유기적으로 사용됩니다.
비유:
| 구분 | 모놀리식 아키텍처 (Monolithic) | 마이크로서비스 아키텍처 (MSA) |
|---|---|---|
| 구조 | 모든 기능(사용자, 상품, 주문 등)이 하나의 거대한 애플리케이션 안에 통합되어 있음. | 각 기능이 독립적인 작은 서비스로 분리되어 있고, 각 서비스는 API를 통해 서로 통신함. |
| 배포 | 작은 수정 사항 하나에도 전체 애플리케이션을 다시 빌드하고 배포해야 함. | 변경된 특정 서비스만 독립적으로 배포할 수 있음. |
| 확장 | 특정 기능(e.g., 상품 검색)에만 트래픽이 몰려도, 애플리케이션 전체를 확장해야 함. | 트래픽이 몰리는 특정 서비스만 독립적으로 확장할 수 있음. (비용 효율적) |
| 장애 | 하나의 기능에서 발생한 장애(e.g., 메모리 누수)가 전체 애플리케이션의 중단으로 이어질 수 있음. | 하나의 서비스 장애가 다른 서비스에 미치는 영향이 제한적임. (장애 격리) |
| 기술 스택 | 전체 애플리케이션이 하나의 기술 스택(e.g., Java/Spring)으로 통일됨. | 각 서비스의 특성에 맞게 다양한 기술 스택을 자유롭게 선택할 수 있음. (Polyglot) |
| 복잡성 | • 초기 개발이 단순하고 쉬움. • 서비스가 커질수록 코드의 의존성이 복잡해져 유지보수가 어려워짐. | • 초기 설계가 복잡하고, 서비스 간 통신, 데이터 관리 등 고려할 것이 많음. • 각 서비스는 작고 단순하여 개별적으로는 유지보수가 용이함. |
서비스 간 통신 (Inter-service Communication):
데이터 분리 (Data Decentralization):
서비스 탐색 (Service Discovery):
API 게이트웨이 (API Gateway):