hanker

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

DEVELOPER INFO

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

hanker 2024. 12. 30. 00:00
반응형
마이크로서비스란 무엇인가?

 

마이크로서비스 아키텍처(Microservices Architecture)

애플리케이션을 작은 독립된 서비스들로 나누어 설계하는 소프트웨어 개발 방식이다.

 

이 서비스들은 각각 고유한 기능을 수행하며, 독립적으로 배포되고 확장 가능하다.

 

특징

1. 모듈화: 애플리케이션을 작은 서비스로 분리.

2. 독립 배포: 각 서비스는 별도로 배포 및 관리 가능.

3. 다양한 기술 스택: 각 서비스는 서로 다른 기술 스택을 사용할 수 있음.

4. 경량 프로토콜: 서비스 간 통신은 주로 REST API 또는 메시지 큐를 사용.

 

예시

전자상거래 애플리케이션에서 마이크로서비스의 역할

- 사용자 관리 서비스

- 상품 카탈로그 서비스

- 결제 서비스

- 배송 서비스

 


1. 왜 마이크로서비스라고 불릴까?

 

1) 유연성과 확장성

- 특정 서비스만 독립적으로 확장 가능

- 예: 블랙 프라이데이 기간에 결제 서비스만 확장

 

2) 독립적인 배포

- 애플리케이션 전체를 중단하지 않고 개별 서비스만 업데이트 가능

 

3) 장애 격리

- 한 서비스에서 오류가 발생해도 다른 서비스에는 영향을 주지 않음

 

4) 팀 단위 개발 효율성

- 각 서비스는 독립된 팀이 개발, 배포, 운영할 수 있어 개발 속도가 향상

 


2. 마이크로서비스의 주요 구성 요소

 

1) API 게이트웨이

역할: 외부 요청을 각 마이크로서비스로 라우팅

예시 도구: Naver Cloud API Gateway, AWS API Gateway, Tmax Tibero API Gateway

 

2) 서비스 디스커버리

역할: 각 서비스의 위치(IP, 포트)를 동적으로 관리.

예시 도구: Netflix Eureka, ProSync, NHN Cloud Service Discovery

 

3) 데이터베이스 분리

각 서비스는 독립된 데이터베이스를 보유하여 서비스 간 결합도를 낮춤

 

4) 메시지 브로커

비동기 통신을 위해 메시지 큐를 사용.

예시 도구: RabbitMQ, Apache Kafka, Naver Cloud MQ


3. 마이크로서비스의 장점

 

1) 애플리케이션 확장성

필요에 따라 특정 서비스만 확장 가능

 

2) 빠른 배포 사이클

서비스 단위로 배포하므로 개발 및 배포 속도가 빨라짐

 

3) 다양한 기술 사용 가능

각 서비스는 독립적이므로 Java, Python, Go 등 적합한 기술 스택을 선택 가능

 

4) 장애 격리

특정 서비스에 문제가 생겨도 전체 애플리케이션에는 영향 없음

 


4. 마이크로서비스의 도전 과제

 

1) 복잡한 관리

- 서비스 수가 많아지면 모니터링, 로깅, 디버깅이 어려워짐

해결책: 중앙 집중식 모니터링 도구 사용 (예: Prometheus, Grafana)

 

2) 네트워크 지연 및 통신 오버헤드

- 서비스 간 통신이 잦아지면서 성능 저하 발생 가능

해결책: 경량화된 통신 프로토콜 사용 (예: gRPC)

 

3) 데이터 관리 복잡성

- 서비스별 데이터베이스를 사용하면 트랜잭션 관리가 어려워질 수 있음

해결책: 분산 트랜잭션 및 이벤트 소싱 적용

 

4) 분산 시스템의 복잡성

- 분산 시스템 특성상 장애 복구 및 테스트가 어려움

해결책: Chaos Engineering으로 복구 능력을 테스트


5. 도구 및 프레임워크

 

 

1) 컨테이너화 및 오케스트레이션

도구: Docker, Kubernetes

역할: 각 마이크로서비스를 컨테이너로 배포하고 관리

 

 

2) 모니터링 및 로깅

모니터링 도구: Prometheus, Grafana

로깅 도구: ELK Stack (Elasticsearch, Logstash, Kibana)

 

 

3) 마이크로서비스 프레임워크

Spring Boot (Java)

Express.js (Node.js)

Flask (Python)

 

 

4) 분산 추적

도구: Zipkin, Jaeger

역할: 요청이 각 서비스에서 어떻게 처리되는지 추적.


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

 

특성 모놀리식 아키텍처 마이크로서비스 아키텍처
구조 모든 기능이 하나의 코드베이스로 통합 각 기능이 독립된 서비스로 분리
배포 전체 애플리케이션을 한 번에 배포 서비스 단위로 개별 배포 가능
확장성 전체 애플리케이션을 수평적으로 확장 특정 서비스만 선택적으로 확장
복잡성 관리 단순 서비스가 많아질수록 복잡성 증가
장애 영향 장애가 전체 시스템에 영향을 미침 장애가 특정 서비스에 국한

 


7. 성공적인 마이크로서비스 전환 전략

 

1) 도입 목표 설정

마이크로서비스로 전환이 필요한 이유를 명확히 정의

예: 확장성 문제 해결, 배포 속도 향상

 

 

2) 점진적 전환

기존 애플리케이션의 일부 기능부터 마이크로서비스로 전환

 

 

3) 적절한 도구 선택

도구와 프레임워크를 조직의 기술 스택과 요구에 맞게 선택

 

 

4) 팀 구조 조정

서비스별 팀을 구성하여 독립적으로 작업 가능하도록 설정


 

마이크로서비스 아키텍처는 복잡한 현대 애플리케이션의 요구를 충족시키는 데 적합한 설계 방식이다.

하지만 도입 초기에는 관리 복잡성과 기술적 도전 과제가 따른다.

이를 극복하려면 체계적인 전략과 적절한 도구 활용이 필수적인것 같다.

 

반응형