마이크로서비스(MSA) 궁금증

문한성·2023년 5월 3일
0

부트캠프

목록 보기
76/123
post-thumbnail

마이크로서비스와 서버리스는 어떤 관계가 있나요?

마이크로서비스와 서버리스는 현대적이고 확장 가능하며 효율적인 애플리케이션을 구축하는 데 사용할 수 있는 아키텍처 패턴입니다. 상호 배타적이지는 않지만 소프트웨어 설계 및 배포에 대한 접근 방식이 다릅니다.

마이크로서비스는 대규모 애플리케이션을 독립적으로 개발, 배포 및 확장할 수 있는 더 작고 독립적인 서비스로 나누는 방법입니다. 각 서비스에는 일반적으로 자체 데이터베이스가 있으며 API를 통해 다른 서비스와 통신합니다. 반대로 서버리스는 애플리케이션 로직이 이벤트에 의해 트리거되는 작은 상태 비저장 기능으로 배포되는 이벤트 기반 아키텍처입니다.

서버리스의 특징 중 하나인 무상태성(Stateless)은 무엇을 의미하나요?

서버리스의 특징 중 하나는 상태 비저장입니다. 즉, 함수가 호출 사이에 어떤 상태도 유지하지 않는다는 의미입니다.

멱등성을 갖도록 설계되었으며 결과를 변경하지 않고 여러 번 실행할 수 있습니다. 이렇게 하면 서버 상태에 대한 걱정 없이 사용 가능한 모든 서버에서 실행할 수 있기 때문에 기능을 쉽게 확장하고 배포할 수 있습니다.

마이크로서비스를 구성할 때, 데이터베이스를 꼭 분리해야 하나요? 데이터가 한 곳에 모여있지 않고 중복되어도 괜찮은가요?

마이크로 서비스를 구성할 때 일반적으로 서비스별로 데이터베이스를 분리하는 것이 좋습니다. 이 접근 방식을 "Database per Service" 패턴이라고 합니다.

그 이유는 각 서비스가 자체 데이터베이스 스키마와 데이터 모델을 가질 수 있도록 하여 다른 서비스와 독립적으로 서비스를 더 쉽게 수정, 확장 및 배포할 수 있기 때문입니다.

여러 데이터베이스에 데이터를 복제하는 것이 처음에는 좋지 않은 생각처럼 보일 수 있지만 실제로는 몇 가지 이점이 있습니다.

  • 첫째, 여러 테이블에서 복잡한 조인이 필요하지 않으므로 시스템의 복잡성이 줄어듭니다.

  • 둘째, 데이터 액세스에 필요한 네트워크 호출 수를 줄여 성능을 향상시킵니다.

  • 마지막으로 한 데이터베이스가 다운되더라도 다른 데이터베이스가 계속해서 독립적으로 작동할 수 있기 때문에 가용성과 복원력이 향상됩니다.

그러나 데이터를 복제할 때 따라야 할 몇 가지 모범 사례가 있습니다. 하나는 데이터가 모든 데이터베이스에서 일관성이 있는지 확인하는 것입니다.

이는 분산 트랜잭션 또는 결과적 일관성 패턴을 사용하여 달성할 수 있습니다. 또 다른 모범 사례는 업데이트 및 삭제의 필요성을 최소화하는 방식으로 데이터베이스 스키마 및 데이터 모델을 설계하는 것입니다. 이는 불변 데이터 구조 또는 이벤트 소싱을 사용하여 달성할 수 있습니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글