어플리케이션

마이크로서비스 아키텍처(Microservices Architecture)에 대해 알아보겠습니다.

forward error correction Circle 2025. 10. 15. 08:28
반응형

Ⅰ. 마이크로서비스 아키텍처(Microservices Architecture) 란?

 하나의 큰 애플리케이션을 작고 독립적인 서비스들의 집합으로 구축하는 소프트웨어 개발 방식입니다. 각각의 마이크로서비스는 특정한 비즈니스 기능을 수행하며, 다른 서비스들과 독립적으로 개발, 배포, 확장이 가능합니다. 요약하면, 여러 명의 전문가가 각자의 전문 분야에서 작업하며 공통된 목표를 향해 협력하는 것과 같습니다. 이는 모든 기능이 하나의 큰 덩어리로 묶여있는 전통적인 모놀리식(Monolithic) 구조와는 완전히 다른 접근 방식입니다.

Ⅱ. 마이크로서비스 아키텍처(Microservices Architecture) 동작원리 및 구성요소

 ⅰ. 서비스 구성 방식
   1) 독립적인 서비스: 각 마이크로서비스는 자체적인 비즈니스 로직과 데이터베이스를 보유합니다. 하나의 서비스를 수정해도 다른 서비스에 영향을 주지 않습니다.
   2) API를 통한 통신: 서비스들은 HTTP REST, gRPC와 같은 경량 프로토콜이나 메시징 프로토콜(JMS, AMQP)을 사용하여 서로 통신합니다.
   3) 기술 스택 자유도: 각 서비스마다 최적화된 다른 프로그래밍 언어와 기술을 선택할 수 있습니다.
 ⅱ. 구성 요소
   1) API 게이트웨이: 클라이언트 요청의 단일 진입점 역할을 하며, 인증, 로드 밸런싱, 로깅 등의 기능을 담당합니다.
   2) 서비스 메시: 마이크로서비스 간의 내부 통신을 관리하는 인프라 계층으로, 보안, 모니터링, 트래픽 제어를 담당합니다.
   3) 메시지 브로커: Kafka, RabbitMQ 같은 도구를 통해 서비스 간 비동기 통신을 가능하게 합니다.
   4) 관리 및 오케스트레이션: Kubernetes와 같은 플랫폼이 서비스의 배포, 스케일링, 장애 복구를 자동화합니다.

Ⅲ. 마이크로서비스 아키텍처 vs 모놀리식 아키텍처 비교

특징 마이크로서비스 아키텍처 모놀리식 아키텍처
구조 독립적인 작은 서비스들의 분산된 집합 모든 기능이 하나의 통합된 코드베이스
배포 각 서비스를 독립적으로 배포 전체 애플리케이션을 하나의 단위로 배포
확장성 필요한 서비스만 개별적으로 확장 전체 애플리케이션을 함께 확장
장애 격리 서비스 장애가 격리되어 제한적 영향 한 구성요소 장애가 전체에 영향
기술 스택 스택 서비스별로 다른 기술 사용 가능 애플리케이션 전체에 단일 기술 
개발 복잡도 초기 복잡하지만 관리가 용이해짐 초기에는 단순하지만 점점 복잡해짐

Ⅳ. 마이크로서비스 아키텍처(Microservices Architecture) 특징 및 장단점

 ⅰ. 주요 장점
   1) 향상된 민첩성: 독립적인 개발과 배포로 빠른 개발 사이클과 변화 대응이 가능합니다.
   2) 비용 효율성: 필요한 서비스만 확장하여 전체적인 개발 및 유지보수 비용을 최적화합니다.
   3) 팀 생산성 향상: 작고 집중된 팀이 특정 서비스의 개발, 배포, 유지보수에 전념할 수 있어 전문성과 소유의식을 강화합니다.
   4) 빠른 배포: 각 서비스가 독립적으로 진화하고 배포되어 전체 시스템 중단 없이 업데이트 가능합니다.
 ⅱ. 주요 도전과제
   1) 증가된 복잡성: 분산 시스템 관리는 중앙집중식 시스템보다 복잡한 접근 방식이 필요합니다.
   2) 데이터 관리의 어려움: 서비스 전반에 걸쳐 데이터 일관성을 유지하는 것이 어려워집니다.
   3) 네트워크 통신 오버헤드: 서비스 간 네트워크 통신으로 인한 지연과 잠재적 장애 영역이 발생합니다.
   4) 테스트 복잡성: 모든 서비스의 호환성과 전체 시스템의 안정성을 보장하기 위한 포괄적인 테스트가 필요합니다.
   5) 보안 관리: 여러 서비스에서 민감한 데이터를 보호하려면 철저한 계획과 실행이 필요합니다.

Ⅴ. 마이크로서비스 아키텍처(Microservices Architecture)  통신 패턴

구분 동기식 통신
(Synchronous Communication) 
비동기식 통신
(Asynchronous Communication) 
이벤트 기반 통신
(Event-Driven Communication)
요청 방식  요청-응답 패턴: 서비스가 요청 후 응답을 기다림 메시지 큐에 보내고, 수신자가 필요시 처리 이벤트를 발행하면 관심있는 서비스들이 구독하여 반응
사용 사례 실시간 상호작용, 즉시 결과 필요 시스템 확장, 복원력 강화, 느슨한 결합 실시간 알림, 비동기 이벤트 처리, 높은 유연성
프로토콜/도구 HTTP REST, gRPC Kafka, RabbitMQ, AWS SQS 이벤트 발행-구독 시스템, Kafka 등
장점  구현이 간단, 즉시 결과 확인 가능 느슨한 결합, 높은 확장성 유연성 높음, 느슨한 결합, 확장성 뛰어남
단점 지연시간 발생, 서비스 간 강한 결합 가능성 복잡성 증가, 메시지 순서·일관성 문제 발생 이벤트 순서·일관성 관리 복잡, 설계 어려움


ⅰ. 마이크로서비스가 적합한 경우
 1) 높은 확장성 요구: 애플리케이션이 높은 수준의 확장성을 요구할 때 마이크로서비스가 더 유연하고 비용 효율적입니다.
 2) 다수의 독립적인 팀: 회사에 독립적으로 운영되는 여러 비즈니스 단위가 있는 경우 적합합니다.
 3) 강력한 인프라와 DevOps 역량: 마이크로서비스는 복잡한 배포를 처리할 수 있는 강력한 인프라와 DevOps 기술이 필요합니다.
ⅱ. 모놀리식이 더 적합한 경우
 1) 소규모 팀과 단순한 애플리케이션: 작은 팀이 단순한 앱을 개발할 때는 모놀리식이 빠른 개발을 가능하게 합니다.
 2) 초기 단계의 스타트업: 요구사항이 자주 변경되고 빠른 시장 출시가 중요한 경우.
 3) 제한된 인프라 역량: DevOps와 인프라 관리 기술이 부족한 팀의 경우

반응형