마이크로 서비스란?

Lucas.Choi·2024년 10월 9일

마이크로서비스

목록 보기
1/4
  1. 모노리스(monolith) 구조란?
    마이크로 서비스 이전의 전통적인 시스템 구조인 모노리스 구조에 대해 알아보자.
    모노리스 구조는 시스템의 모든 기능이 하나의 애플리케이션에 통합된 형태이다.

    • 장점
      • 간단한 개발 및 배포: 모든 코드가 한 덩어리에 구현되어 있으므로 개발하고 배포하기가 쉽다.
      • 통합적인 테스트: 모든 기능이 하나의 프로그램 내에 존재하므로 테스트를 하거나 서비스 간의 통신 문제나 데이터 일관성 문제 같은 것에 신경 쓸 일이 적다.
      • 성능 최적화: 서비스 간의 통신이 네트워크를 통해 이뤄지는 것이 아니라 프로그램 내부적으로 처리된다. 이 덕분에 속도도 더 빠르고 성능 최적화가 쉽다. 또한, 모든 기능이 한 프로그램 내에서 긴밀하게 연결되어 있기 때문에 성능 문제가 덜 발생한다.
    • 단점
      • 확장성의 한계: 프로그램이 한 덩어리로 이루어져 있어서, 특정 기능만 별도로 확장하기가 어렵다.
      • 유지 보수의 어려움: 프로그램이 커질수록 코드도 복잡해지고, 새로운 기능을 추가하거나 수정하기 어렵다. 특히, 팀 규모가 커지게 되면 여러 사람이 동시에 같은 코드를 건드리면서 충돌이 발생할 가능성이 증가한다.
      • 안정성 문제: 하나의 기능에 문제가 생기면 이로 인해 전체 애플리케이션이 영향을 받을 수 있다.

모노리스 구조가 사용되는 경우는 보통 작은 규모의 프로젝트나 초기 단계에서 유리하다. 이 경우, 시스템이 복잡하지도 않고 기능이 많지 않기 때문에 관리도 편하고, 배포하기도 쉽다. 또한, 기능이 고정되어 있거나, 확장이 필요 없는 단순한 시스템의 경우에는 오히려 모노리스가 효율적이다. 이 외에도 클라우드 사용이 어렵거나 금융 등 보안과 안정성이 최고로 중요한 경우 모노리스를 사용하는 것이 더 좋을 수 있다.

  1. 마이크로 서비스(micro service)란?
    마이크로서비스는 큰 시스템을 작은 서비스들로 나눠 각각 독립적으로 운영하는 방식이다.
    ex) 쇼핑몰 시스템에서 사용자 관리, 상품 관리, 결제 등과 같은 기능이 있다고 하면, 마이크로서비스에서는 이걸 각각의 서비스로 운영한다.
    각 마이크로서비스는 독립적이고 다른 서비스의 영향을 받지 않으며, 서로 자율적으로 움직일 수 있는 구조이다. 이런 이유로, 마이크로 서비스는 대규모 시스템에 적합하다. 기능이 많고, 시스템이 커질수록 서비스들을 분리해서 관리하는 게 더 유리하기 때문이다.

  2. 마이크로 서비스의 특징

    • 독립적인 배포: 각 서비스가 독립적이라, 어떤 서비스에 수정이 필요하면 해당 서비스만 배포하면 된다.
    • 분산된 데이터 관리: 각 서비스는 자신의 데이터만 관리한다. 따라서 다른 서비스가 관리하는 데이터에 직접 접근할 수 없고, 필요한 경우에는 요청을 보내 데이터를 직접 받아와야 한다. 이 덕분에 보안적으로도 안전하고, 각 서비스가 자율적으로 데이터를 관리할 수 있다.
    • 유연한 기술 사용: 각 서비스가 독립적이기 때문에 서비스마다 각기 다른 프로그래밍 언어나 기술을 사용해도 된다.
    • 비즈니스 로직의 재사용 지양: 서비스 간 결합도를 낮추는 것을 목표로 한다. 이를 통해 애자일한 대응이 가능하다.(유동적인 개발)
  3. 마이크로 서비스의 장점

    • 확장성: 특정 서비스에만 수요가 많아지면, 모든 서비스들을 확장할 필요 없이 해당 서비스만 확장할 수 있다.
    • 빠른 개발 및 배포: 마이크로 서비스는 작은 단위로 이루어져 있어서, 새로운 기능을 추가하거나, 기존 기능을 업데이트할 때 각 서비스 단위로 빠르게 작업할 수 있다. 한 팀이 전체 시스템을 관리하는 대신, 여러 팀이 각자 담당하는 서비스를 관리한다.
    • 안정성: 특정 서비스에 문제가 생기더라도 다른 서비스에는 영향을 미치지 않는다. 이 덕분에 안정적인 서비스 운영이 가능하다.
  4. 마이크로 서비스의 단점

    • 복잡한 구조: 각 서비스가 독립적이라, 서비스 간 통신이나 데이터 일관성 문제를 신경 써야 한다. 이 때문에, 서로 다른 서비스를 연결하고 관리하는 작업에서 더 많은 시간이 소요된다.
    • 통신 비용 증가: 각 서비스 간의 데이터 송수신 과정에서 네트워크를 통해 통신하기 때문에 성능 저하가 발생할 수 있다. 특히, 서비스가 많아지면 이런 통신 비용이 상당히 커질 수 있다.
    • 데이터 일관성 문제: 서비스들이 각자 데이터베이스를 가지고 있으므로, 데이터를 일관되게 관리하는 것이 어렵다.

0개의 댓글