마이크로서비스: 두 판 사이의 차이
기술노트
(IT 용어 정리 - 마이크로서비스 추가) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
== 개요 == | == 개요 == | ||
마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 | '''마이크로서비스'''(microservice)는 애플리케이션을 느슨하게 결합된 독립적인 서비스들의 집합으로 구성하는 '''서비스 지향 아키텍처'''(SOA) 스타일의 소프트웨어 개발 기법이다. | ||
마이크로서비스 아키텍처에서 각 서비스는: | |||
* '''섬세(fine-grained)'''한 단위로 기능을 나눈다. | |||
* '''가벼운 경량 프로토콜'''(예: HTTP REST, gRPC 등)을 통해 통신한다. | |||
이러한 구조는 다음과 같은 장점을 제공한다: | |||
* 애플리케이션 모듈화(Modularity) 향상 | |||
* 이해, 개발, 테스트, 유지보수 용이 | |||
* 대규모 시스템에서도 부분 수정이 가능 | |||
* 장애 격리 (특정 서비스에 문제가 생겨도 전체 장애로 이어지지 않음) | |||
또한, 소규모 '''자율 팀'''이 각각의 서비스를 독립적으로 개발, 배포(Deploy), 확장(Scale)할 수 있어 병렬 개발이 가능하다.<ref>[1]</ref><ref>[2]</ref> | |||
지속적인 리팩터링을 통해 서비스 간 통합이나 재구성이 유연하게 이루어질 수 있다.<ref>[3]</ref> | |||
마이크로서비스 기반 시스템은 '''지속적 통합/지속적 배포(CI/CD)'''를 자연스럽게 지원하여 빠른 업데이트와 롤백을 가능하게 한다.<ref>[4]</ref> | |||
== 역사 == | == 역사 == | ||
* 2000년대 초: '''서비스 지향 아키텍처(SOA)''' 개념이 확립되며 초기 아이디어 등장 | |||
* 2011년경: Netflix, Amazon, Twitter 등 대규모 서비스를 운영하는 기업들이 내부적으로 모놀리식 아키텍처(Monolithic Architecture) 문제를 해결하기 위해 마이크로서비스 개념을 적극 도입 | |||
* 2014년: "Microservices"라는 용어가 공식화되고 산업계 전반에 널리 확산 | |||
* 이후 Docker, Kubernetes와 같은 컨테이너 및 오케스트레이션 기술이 발전하면서 MSA 도입이 급속히 증가 | |||
== 철학 == | == 철학 == | ||
마이크로서비스 아키텍처는 다음 철학을 따른다: | |||
* 서비스는 '''하나의 비즈니스 기능''' 또는 '''도메인'''에 집중해야 한다 (Single Responsibility Principle) | |||
* 각 서비스는 '''독립적으로 배포'''될 수 있어야 한다 | |||
* 서비스는 '''작게 유지'''하고, 필요할 때 분할 또는 통합할 수 있어야 한다 | |||
* 서비스 간 통신은 '''명확하고 가벼운 API'''를 통해 이루어져야 한다 | |||
* 데이터베이스도 '''서비스별 분리'''를 지향 (Database per Service) | |||
== 기술 == | == 기술 == | ||
마이크로서비스를 구현하는 데 필요한 주요 기술 요소: | |||
* '''API 게이트웨이 (API Gateway)''' | |||
** 클라이언트 요청을 적절한 서비스로 라우팅 | |||
** 인증/인가, 로깅, 트래픽 관리 기능 포함 | |||
** 예: AWS API Gateway, Kong, Apigee | |||
* '''서비스 디스커버리 (Service Discovery)''' | |||
** 동적으로 변화하는 서비스 위치(IP, 포트)를 관리 | |||
** 예: Consul, Eureka, Kubernetes DNS | |||
* '''분산 트랜잭션/사가 패턴''' | |||
** 서비스 간 데이터 일관성 보장을 위한 패턴 | |||
** 예: Saga Pattern, Event Sourcing | |||
* '''컨테이너화(Containerization)''' | |||
** 각 서비스를 독립된 단위로 패키징 | |||
** 예: Docker | |||
* '''오케스트레이션(Orchestration)''' | |||
** 서비스 배포, 확장, 복구를 자동화 | |||
** 예: Kubernetes, Docker Swarm | |||
* '''모니터링 및 로깅''' | |||
** 분산 환경에서 문제를 빠르게 파악하고 해결 | |||
** 예: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana) | |||
== 비평 == | == 비평 == | ||
마이크로서비스 아키텍처는 많은 장점이 있지만, 다음과 같은 단점과 도전 과제도 존재한다: | |||
* '''복잡성 증가''' | |||
** 서비스 수가 많아지면 운영 및 관리 복잡도가 급격히 증가한다. | |||
** 분산 시스템 특유의 장애 발생 가능성 (네트워크 지연, 부분 실패 등) | |||
* '''데이터 일관성 문제''' | |||
** 각 서비스가 독립된 데이터베이스를 가질 경우, 분산 트랜잭션 관리가 필요하다. | |||
* '''운영 비용 증가''' | |||
** DevOps, CI/CD 파이프라인, 모니터링 시스템 등 추가적인 인프라 구축 필요. | |||
* '''초기 설계 비용''' | |||
** 마이크로서비스를 무리하게 도입할 경우, 초기 개발과 학습 비용이 오히려 증가할 수 있다. |
2025년 4월 28일 (월) 13:44 기준 최신판
개요
마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 독립적인 서비스들의 집합으로 구성하는 서비스 지향 아키텍처(SOA) 스타일의 소프트웨어 개발 기법이다.
마이크로서비스 아키텍처에서 각 서비스는:
- 섬세(fine-grained)한 단위로 기능을 나눈다.
- 가벼운 경량 프로토콜(예: HTTP REST, gRPC 등)을 통해 통신한다.
이러한 구조는 다음과 같은 장점을 제공한다:
- 애플리케이션 모듈화(Modularity) 향상
- 이해, 개발, 테스트, 유지보수 용이
- 대규모 시스템에서도 부분 수정이 가능
- 장애 격리 (특정 서비스에 문제가 생겨도 전체 장애로 이어지지 않음)
또한, 소규모 자율 팀이 각각의 서비스를 독립적으로 개발, 배포(Deploy), 확장(Scale)할 수 있어 병렬 개발이 가능하다.[1][2] 지속적인 리팩터링을 통해 서비스 간 통합이나 재구성이 유연하게 이루어질 수 있다.[3] 마이크로서비스 기반 시스템은 지속적 통합/지속적 배포(CI/CD)를 자연스럽게 지원하여 빠른 업데이트와 롤백을 가능하게 한다.[4]
역사
- 2000년대 초: 서비스 지향 아키텍처(SOA) 개념이 확립되며 초기 아이디어 등장
- 2011년경: Netflix, Amazon, Twitter 등 대규모 서비스를 운영하는 기업들이 내부적으로 모놀리식 아키텍처(Monolithic Architecture) 문제를 해결하기 위해 마이크로서비스 개념을 적극 도입
- 2014년: "Microservices"라는 용어가 공식화되고 산업계 전반에 널리 확산
- 이후 Docker, Kubernetes와 같은 컨테이너 및 오케스트레이션 기술이 발전하면서 MSA 도입이 급속히 증가
철학
마이크로서비스 아키텍처는 다음 철학을 따른다:
- 서비스는 하나의 비즈니스 기능 또는 도메인에 집중해야 한다 (Single Responsibility Principle)
- 각 서비스는 독립적으로 배포될 수 있어야 한다
- 서비스는 작게 유지하고, 필요할 때 분할 또는 통합할 수 있어야 한다
- 서비스 간 통신은 명확하고 가벼운 API를 통해 이루어져야 한다
- 데이터베이스도 서비스별 분리를 지향 (Database per Service)
기술
마이크로서비스를 구현하는 데 필요한 주요 기술 요소:
- API 게이트웨이 (API Gateway)
- 클라이언트 요청을 적절한 서비스로 라우팅
- 인증/인가, 로깅, 트래픽 관리 기능 포함
- 예: AWS API Gateway, Kong, Apigee
- 서비스 디스커버리 (Service Discovery)
- 동적으로 변화하는 서비스 위치(IP, 포트)를 관리
- 예: Consul, Eureka, Kubernetes DNS
- 분산 트랜잭션/사가 패턴
- 서비스 간 데이터 일관성 보장을 위한 패턴
- 예: Saga Pattern, Event Sourcing
- 컨테이너화(Containerization)
- 각 서비스를 독립된 단위로 패키징
- 예: Docker
- 오케스트레이션(Orchestration)
- 서비스 배포, 확장, 복구를 자동화
- 예: Kubernetes, Docker Swarm
- 모니터링 및 로깅
- 분산 환경에서 문제를 빠르게 파악하고 해결
- 예: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana)
비평
마이크로서비스 아키텍처는 많은 장점이 있지만, 다음과 같은 단점과 도전 과제도 존재한다:
- 복잡성 증가
- 서비스 수가 많아지면 운영 및 관리 복잡도가 급격히 증가한다.
- 분산 시스템 특유의 장애 발생 가능성 (네트워크 지연, 부분 실패 등)
- 데이터 일관성 문제
- 각 서비스가 독립된 데이터베이스를 가질 경우, 분산 트랜잭션 관리가 필요하다.
- 운영 비용 증가
- DevOps, CI/CD 파이프라인, 모니터링 시스템 등 추가적인 인프라 구축 필요.
- 초기 설계 비용
- 마이크로서비스를 무리하게 도입할 경우, 초기 개발과 학습 비용이 오히려 증가할 수 있다.