마이크로서비스

CHLEE·2023년 5월 8일
0

DevOps

목록 보기
15/24
  • 마이크로서비스와 서버리스는 어떤 관계가 있나요?
    마이크로서비스와 서버리스는 모두 현대적인 소프트웨어 아키텍처 패턴이지만, 두 기술은 서로 다른 개념이며 서로 다른 목적을 가지고 있습니다. 마이크로서비스 아키텍처는 대규모 애플리케이션을 여러 개의 작은 서비스로 분할하는 것을 중심으로 합니다. 이러한 작은 서비스는 모놀리식 아키텍처보다 더 유연하고 확장성이 높으며 개별적으로 배포하고 관리할 수 있습니다. 서버리스 아키텍처는 서버를 직접 구축하거나 관리하지 않고, 클라우드 공급자가 관리하는 서버리스 플랫폼을 사용하여 서비스를 구현하는 것을 중심으로 합니다. 서버리스 아키텍처는 애플리케이션을 함수 단위로 분해하고 필요할 때마다 이러한 함수를 실행하는 이벤트 기반 아키텍처입니다. 마이크로서비스와 서버리스는 개념적으로 서로 다르지만, 두 기술은 함께 사용될 수 있습니다. 예를 들어, 마이크로서비스 아키텍처를 사용하여 애플리케이션을 분할하고, 서버리스 플랫폼을 사용하여 각 서비스를 실행하는 함수를 호스팅할 수 있습니다. 이러한 접근 방식은 애플리케이션의 확장성과 유연성을 향상시키며 개발자가 애플리케이션을 더 빠르고 효율적으로 개발할 수 있게 해줍니다.
  • 서버리스의 특징 중 하나인 무상태성(Stateless)은 무엇을 의미하나요?
    서버리스의 무상태성(Statelessness)은 서버리스 함수(Function)가 상태(State)를 저장하지 않는 것을 의미합니다. 이는 함수가 각각 독립적으로 실행되며 서버에서 실행되는 모든 함수는 서로에게 영향을 미치지 않는다는 것을 의미합니다. 일반적으로, 서버리스 함수는 매번 새로운 인스턴스에서 실행되며, 이전 실행과는 전혀 다른 실행 환경을 갖게 됩니다. 함수가 실행되는 동안 생성되는 모든 정보는 함수 내부에서 처리되며, 함수 실행이 완료되면 이전 상태는 모두 소멸됩니다. 이러한 방식으로 함수는 상태 정보를 보존하지 않고, 단일 실행의 결과에만 응답합니다. 무상태성은 서버리스 애플리케이션의 확장성과 유연성을 높이는 데 도움이 됩니다. 함수가 독립적으로 실행되기 때문에 애플리케이션의 부분적인 확장이 가능하며, 다양한 클라우드 서비스에서 실행될 수 있습니다. 또한, 무상태성은 애플리케이션의 오류 및 장애 처리를 간소화하는 데도 도움이 됩니다. 각 함수가 독립적으로 실행되기 때문에, 하나의 함수의 오류나 장애는 다른 함수에 영향을 미치지 않습니다.
  • 마이크로서비스를 구성할 때, 데이터베이스를 꼭 분리해야 하나요? 데이터가 한 곳에 모여있지 않고 중복되어도 괜찮은가요? 모범 사례를 알아보고, 이유를 함께 적어주세요.


    마이크로서비스 아키텍처에서 데이터베이스 분리는 일반적으로 권장되는 모범 사례 중 하나입니다. 각 마이크로서비스는 자체 데이터베이스를 갖게 되며, 서비스 간 데이터 공유는 API 호출 등의 메커니즘을 통해 이루어집니다. 데이터베이스를 분리하는 이유는 다음과 같습니다.

    1. 느슨한 결합성 (Loose Coupling): 데이터베이스 분리는 각 마이크로서비스가 독립적으로 변경 및 배포될 수 있도록 해줍니다. 만약 데이터베이스가 모두 하나의 공유 데이터베이스에 모여있는 경우, 서비스 간의 의존성이 높아지며 변경 사항이 하나의 서비스에서 다른 서비스로 파급효과를 미칠 가능성이 높아집니다. 분리된 데이터베이스는 각 서비스가 자체 데이터베이스 스키마를 유지하고 개발할 수 있도록 해줍니다.

    2. 서비스 확장성 (Service Scalability): 분리된 데이터베이스는 각 마이크로서비스의 확장성을 높여줍니다. 마이크로서비스는 필요한 만큼의 인스턴스를 실행하고 각각의 인스턴스는 자체 데이터베이스 인스턴스를 갖게 되며, 서비스 간의 데이터 공유는 API 호출 등의 메커니즘을 통해 이루어지기 때문에 서비스 확장에 제약이 없습니다.

    3. 안정성 (Reliability): 분리된 데이터베이스는 서비스 간에 데이터 충돌을 방지할 수 있으며, 데이터베이스 장애가 하나의 서비스에만 영향을 미치도록 격리시킵니다.

      데이터 중복성은 분리된 데이터베이스에서 자주 발생합니다. 서비스 간 데이터 공유를 최소화하면서도 중복을 완전히 제거하는 것은 매우 어려울 수 있습니다. 그러나 중복 데이터가 서비스 간 결합을 줄이고 각 마이크로서비스가 독립적으로 변경될 수 있도록 해주는 등 여러 가지 이점을 제공할 수 있습니다. 따라서 중복성을 최소화하면서도 데이터베이스 분리와 같은 다른 모범 사례를 따르는 것이 좋습니다.


      마이크로서비스 아키텍처에서는 일반적으로 데이터베이스를 각각의 서비스마다 분리하는 것이 권장됩니다. 이렇게 함으로써 각 서비스는 자체 데이터 저장소를 갖게 되며, 각 서비스가 독립적으로 확장될 수 있게 됩니다. 이를 통해 전체 시스템의 확장성과 유연성이 향상됩니다.

      데이터베이스를 분리하면 데이터가 중복될 수 있지만, 이는 마이크로서비스 아키텍처에서는 일반적으로 감수할 만한 대가입니다. 이는 각 서비스가 자체적으로 데이터를 저장하게 되므로, 서비스 간의 결합도를 낮출 수 있고, 독립적인 배포와 확장이 가능해집니다. 또한, 분리된 데이터베이스는 각 서비스마다 적절한 데이터 저장소를 선택할 수 있게 하여, 서비스별 데이터 저장소의 특성에 맞게 최적화된 솔루션을 사용할 수 있습니다.

      하지만, 데이터 중복성은 관리할 데이터 양이 많아질수록 관리가 복잡해지고 데이터 일관성과 정합성 문제를 야기할 수 있습니다. 이를 해결하기 위해 일반적으로 서비스 간에 데이터 동기화를 위한 메커니즘을 구성해야 합니다. 예를 들어, 이벤트 기반 아키텍처를 사용하여 데이터 변경 이벤트를 다른 서비스에 전파하고, 필요에 따라 데이터를 업데이트할 수 있습니다.

      따라서, 데이터베이스를 분리하는 것은 마이크로서비스 아키텍처에서 좋은 모범 사례 중 하나입니다. 데이터 중복성은 발생할 수 있지만, 각 서비스의 독립성과 확장성을 보장하며, 서비스 간의 결합도를 낮출 수 있어 전체 시스템의 유연성과 확장성을 향상시킵니다.

profile
🤗

0개의 댓글