TIL - 20251223

juni·2025년 12월 23일

TIL

목록 보기
216/314

1223 클라우드 네이티브와 마이크로서비스 아키텍처 (MSA) 입문


✅ 1. 클라우드 네이티브 (Cloud Native)란?

  • 클라우드 네이티브는 단순히 애플리케이션을 클라우드(AWS 등)에서 "실행"하는 것을 넘어, 클라우드 환경의 장점을 최대한 활용하도록 애플리케이션을 "설계하고, 만들고, 운영하는 방식(철학)"을 의미합니다.

  • 핵심 목표: 변화에 빠르고 유연하게 대응하며, 안정적이고 확장성 높은 애플리케이션을 만드는 것.

  • 주요 기술 요소: 클라우드 네이티브를 실현하기 위해 다음과 같은 기술들이 유기적으로 사용됩니다.

    1. 컨테이너 (Containers): 애플리케이션을 격리하고 이식성을 높입니다. (e.g., Docker)
    2. 마이크로서비스 (Microservices): 애플리케이션을 작고 독립적인 서비스들로 분해합니다.
    3. 서비스 메시 (Service Mesh): 마이크로서비스 간의 통신을 제어, 모니터링합니다.
    4. 선언형 API (Declarative APIs): 원하는 상태를 정의하면 시스템이 알아서 처리하도록 합니다. (e.g., Kubernetes)
    5. CI/CD (Continuous Integration/Delivery): 빌드, 테스트, 배포 과정을 자동화합니다.
  • 비유:

    • 전통 방식: 일반 주택을 짓고, 이사 갈 때 집을 통째로 옮기려는 것. (어렵고 비효율적)
    • 클라우드 네이티브: 규격화된 조립식 블록(컨테이너)으로 집을 짓는 것. 필요하면 블록을 더 추가(확장)하고, 일부 블록에 문제가 생겨도 다른 블록은 괜찮으며(장애 격리), 이사 갈 때도 블록 단위로 쉽게 옮길 수 있음(이식성).

✅ 2. 모놀리식(Monolithic) vs 마이크로서비스(Microservices) 아키텍처

  • 애플리케이션을 구성하는 방식은 크게 두 가지로 나뉩니다.
구분모놀리식 아키텍처 (Monolithic)마이크로서비스 아키텍처 (MSA)
구조모든 기능(사용자, 상품, 주문 등)이 하나의 거대한 애플리케이션 안에 통합되어 있음.각 기능이 독립적인 작은 서비스로 분리되어 있고, 각 서비스는 API를 통해 서로 통신함.
배포작은 수정 사항 하나에도 전체 애플리케이션을 다시 빌드하고 배포해야 함.변경된 특정 서비스만 독립적으로 배포할 수 있음.
확장특정 기능(e.g., 상품 검색)에만 트래픽이 몰려도, 애플리케이션 전체를 확장해야 함.트래픽이 몰리는 특정 서비스만 독립적으로 확장할 수 있음. (비용 효율적)
장애하나의 기능에서 발생한 장애(e.g., 메모리 누수)가 전체 애플리케이션의 중단으로 이어질 수 있음.하나의 서비스 장애가 다른 서비스에 미치는 영향이 제한적임. (장애 격리)
기술 스택전체 애플리케이션이 하나의 기술 스택(e.g., Java/Spring)으로 통일됨.각 서비스의 특성에 맞게 다양한 기술 스택을 자유롭게 선택할 수 있음. (Polyglot)
복잡성• 초기 개발이 단순하고 쉬움.
• 서비스가 커질수록 코드의 의존성이 복잡해져 유지보수가 어려워짐.
• 초기 설계가 복잡하고, 서비스 간 통신, 데이터 관리 등 고려할 것이 많음.
• 각 서비스는 작고 단순하여 개별적으로는 유지보수가 용이함.

✅ 3. 마이크로서비스 아키텍처(MSA)의 주요 과제

  • MSA는 많은 장점을 제공하지만, 분산 시스템의 복잡성으로 인해 새로운 과제들이 발생합니다.
  1. 서비스 간 통신 (Inter-service Communication):

    • 분리된 서비스들이 서로 어떻게 통신할 것인가? (e.g., 동기 방식의 REST API, 비동기 방식의 메시지 큐(RabbitMQ, Kafka))
  2. 데이터 분리 (Data Decentralization):

    • 각 마이크로서비스는 자신만의 독립적인 데이터베이스를 가져야 합니다.
    • 여러 서비스에 걸친 트랜잭션을 어떻게 처리할 것인가? (데이터 정합성 문제)
  3. 서비스 탐색 (Service Discovery):

    • A 서비스가 B 서비스를 호출해야 할 때, 수시로 IP가 변경될 수 있는 B 서비스의 네트워크 위치를 어떻게 찾을 것인가? (Service Registry 필요, e.g., Eureka)
  4. API 게이트웨이 (API Gateway):

    • 클라이언트(웹/앱)가 수십 개의 마이크로서비스 주소를 모두 알고 직접 통신하는 것은 비효율적이고 복잡합니다.
    • API 게이트웨이는 모든 클라이언트 요청의 단일 진입점 역할을 하며, 요청을 적절한 마이크로서비스로 라우팅하고, 인증/인가, 로깅 등 공통 기능을 처리합니다.

📌 요약

  • 클라우드 네이티브는 클라우드의 장점을 극대화하기 위한 애플리케이션 설계 철학이며, 컨테이너, MSA, CI/CD 등의 기술을 기반으로 합니다.
  • 모놀리식 아키텍처는 모든 기능이 하나로 묶인 단일 애플리케이션으로, 초기 개발은 쉽지만 유연성과 확장성이 떨어집니다.
  • 마이크로서비스 아키텍처(MSA)는 기능을 독립적인 서비스로 분리하여, 독립적인 배포, 확장, 장애 격리가 가능하다는 큰 장점을 가지지만, 분산 시스템의 복잡성이라는 단점도 명확합니다.
  • MSA를 성공적으로 도입하기 위해서는 서비스 간 통신, 데이터 관리, 서비스 탐색 등의 과제를 해결하기 위한 API 게이트웨이, 서비스 레지스트리와 같은 추가적인 패턴과 도구가 필요합니다.

0개의 댓글