마이크로서비스: 두 판 사이의 차이

기술노트
(IT 용어 정리 - 마이크로서비스 추가)
 
편집 요약 없음
 
1번째 줄: 1번째 줄:
== 개요 ==
== 개요 ==
마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. 마이크로서비스 아키텍처에서 서비스들은 섬세(fine-grained)하고 프로토콜은 가벼운 편이다. 애플리케이션을 더 조그마한 여러 서비스로 분해할 때의 장점은 모듈성을 개선하고 애플리케이션의 이해, 개발, 테스트를 더 쉽게 해주고 애플리케이션 침식에 더 탄력적으로 만들어 준다.[1] 규모가 작은 자율적인 팀들이 팀별 서비스를 독립적으로 개발, 전개, 규모 확장을 할 수 있게 함으로써 병렬로 개발할 수 있게 한다.[2] 또, 지속적인 리팩터링을 통해 개개의 서비스 아키텍처가 하나로 병합될 있게 허용한다.[3] 마이크로서비스 기반 아키텍처는 지속적 배포와 전개(디플로이)를 가능케 한다.[1][4]
'''마이크로서비스'''(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 파이프라인, 모니터링 시스템 등 추가적인 인프라 구축 필요.


[[분류:IT 용어]]
* '''초기 설계 비용'''
** 마이크로서비스를 무리하게 도입할 경우, 초기 개발과 학습 비용이 오히려 증가할 수 있다.

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 파이프라인, 모니터링 시스템 등 추가적인 인프라 구축 필요.
  • 초기 설계 비용
    • 마이크로서비스를 무리하게 도입할 경우, 초기 개발과 학습 비용이 오히려 증가할 수 있다.
  1. [1]
  2. [2]
  3. [3]
  4. [4]