ETC

[ETC] 마이크로서비스 : 아키텍처, 장점과 단점

WooGong Peter 2025. 4. 22. 21:11

소개

오늘날 빠르게 변화하는 디지털 환경에서 소프트웨어 아키텍처는 애플리케이션의 성공과 확장성을 결정하는 데 중요한 역할을 하죠. 다양한 아키텍처 패턴 중에서 Microservice 가 오래전부터 사용하고 있죠. 그래서 이번에는 Microservice의 개념과 Archtecture, 장단점을 살펴보고, 기존의 Monolithic 시스템 대신 언제 이 방법을 적용해야하는 지에 대해 알아보겠습니다.

Microservice 란 ?

Microservice는 애플리케이션 도메인 내에서 단일한 목적을 가진 독립적인 서비스입니다. 모든 기능을 하나의 codebase 에서 처리하는 거대한 monolithic application 과는 달리, Microservice는 특정 작업을 수행하도록 설계되었습니다.  예를 들어, e-commerce application 에서 하나의 microservice 는 사용자 인증을 처리하고, 다른 microservice 는 쇼핑 카트를 관리하며, 또 다른 microservice 는 결제를 처리하는 식입니다.  

Microservice 의 주요 특징은 다음과 같습니다:

  • 단일 책임 (Single Responsibility) : 각 microservice 는 하나의 특정 기능에 대한 책임만 가집니다.    
     
  • 작고 집중됨 (Small and Focused) : microservice 는 일반적으로 작으며, 특정 작업에 필요한 코드만 포함합니다.    
     
  • 독립성 (Independent) : microservice 는 종종 독립적으로 개발, 배포 및 확장됩니다.   
     

Microservice Archtecture

하나의 Microservice 도 가치가 있지만, 진정한 힘은 여러 Microservice 를 결합하여 완전한 application을 구축하는 데서 나옵니다. 이 구성을 Microservice Architecture 라고 합니다.    

이 Architecture 에서 microservice 는 Application의 전체 기능을 수행하기 위해 API(Application Programming Interface) 또는 Event를 통해 서로 통신합니다. 예를 들어, E-Commerce 시나리오에서 FrontEnd Application은 다양한 microservice 와 상호 작용하여 제품을 표시하고, 사용자 Session을 관리하며, 주문을 처리하는 등의 작업을 수행합니다.   

Microservice 를 "결합"하는 것이 codebase 를 병합하는 것을 의미하지 않는다는 점을 이해하는 것이 중요합니다. microservice 로 결합되지 않으면 monolithic system 을 구축하는 것과 같습니다.    

Microservice의 장점

Microservice 의 장점은 다음과 같습니다:    

  • 향상된 유지보수성 (Enhanced Maintainability) :
    • Microservice 는 작고 집중되어 있기 때문에 유지 관리가 더 쉽습니다.    
       
    • 하나의 Microservice 에 대한 변경이 다른 서비스에 영향을 미칠 가능성이 적습니다.
    • 각 서비스는 자체 codebase를 가지므로 개발 팀이 더 쉽게 이해하고, 업데이트하고, 유지 관리할 수 있습니다.
    • 단일 책임 원칙을 준수하므로 code refactoring을 요구하는 외부 요인의 영향을 덜 받습니다.
    • Microservice 는 자체 데이터 저장소를 소유하므로 다른 서비스가 데이터에 직접 액세스하는 것을 방지합니다.
  • 지속적인 배포 (Continuous Delivery) :
    • Microservice 는 더 빠르고 빈번한 배포를 가능하게 합니다.    
       
    • 독립적이므로 하나의 서비스 업데이트를 전체 application을 다시 배포하지 않고 배포할 수 있습니다.
    • 이는 agile 개발 및 빠른 반복에 매우 중요합니다.
    • Microservice 의 작은 크기와 집중된 특성 덕분에 자동화된 테스트를 구현하기가 더 쉽습니다.
  • 확장성 (Scalability) :
    • Microservice 는 독립적으로 확장할 수 있습니다.    
       
    • 하나의 서비스에 과부하가 걸리면 전체 application을 확장하지 않고 해당 서비스만 확장할 수 있습니다.
    • 이를 통해 resource를 보다 효율적으로 사용하고 비용을 절감할 수 있습니다.

Microservice 의 단점

 Microservice 는 다음과 같은 단점도 있습니다 :    

  • 복잡성 (Complexity) :
    • Microservice Architecture는 본질적으로 Monolithic Architecture보다 더 복잡합니다.    
       
    • 개발자는 여러 서비스, 데이터베이스 및 통신 채널이 있는 분산 시스템을 관리해야 합니다.
    • 디버깅 및 모니터링이 더 어려울 수 있습니다.
  • 지연 시간 (Latency) :
    • 네트워크를 통한 Microservice 간의 통신은 지연 시간을 발생시킵니다.    
       
    • 이는 application 성능에 영향을 줄 수 있습니다.
    • 비동기 통신 패턴은 이를 완화하는 데 자주 사용되지만 복잡성을 더합니다.
  • 리팩토링 (Refactoring) :
    • Microservice 전반의 refactoring은 어려울 수 있습니다.    
       
    • 여러 서비스에 걸친 변경 사항은 신중한 조정과 테스트가 필요합니다.
    • 기술 스택의 차이는 refactoring을 더욱 복잡하게 만들 수 있습니다.

Monolithic vs. Microservice : 올바른 선택

Monolithic Architecture 와 Microservice Architecture 간의 선택은 프로젝트의 특정 요구 사항에 따라 다릅니다.    

  • Monolithic :
    • Monolithic Architecture 는 초기 개발이 더 간단하며 복잡성이 적고 개발팀 규모가 작은 소규모 application 에 적합합니다.    
       
    • 빠른 초기 개발이 가능합니다.
  • Microservice :
    • Microservice 는 확장성, 유연성 및 독립적인 배포가 필요한 대규모의 복잡한 application 에 더 적합합니다.    
       
    • 여러 개발팀이 있는 조직에도 적합합니다.

결론

Microservice 는 확장 가능하고 유지 관리하기 쉬운 application을 구축하는 강력한 접근 방식을 제공합니다. 그러나 복잡성을 수반하며 Trade-off 를 신중하게 고려해야 합니다. 핵심은 프로젝트의 목표, 팀 규모 및 장기적인 요구 사항에 가장 적합한 architecture를 선택하는 것입니다.

반응형