23-05-03 Presentation
카테고리: Presentation
[Q1.] 마이크로서비스와 서버리스는 어떤 관계가 있나요?
마이크로서비스와 서버리스는 최근에 많은 기업들이 채택하고 있는 분산 컴퓨팅 아키텍처입니다.
마이크로서비스는 기존의 모놀리식 아키텍처와 달리 애플리케이션을 작은 단위로 분리하여 개발하고 배포하는 아키텍처를 의미합니다. 이렇게 분리된 마이크로서비스들은 각각 독립적으로 배포 및 확장이 가능하며, 전체 시스템의 확장성 및 유연성을 높여줍니다. 또한, 마이크로서비스는 비즈니스 로직만을 포함하고 있어, 서비스 간의 결합도를 낮추고 유지보수를 용이하게 만들어줍니다.
서버리스는 기존의 서버 기반 아키텍처와 달리 서버를 사용하지 않고 클라우드 서비스 제공 업체가 관리하는 함수를 실행하는 아키텍처를 의미합니다. 이러한 방식은 개발자가 인프라 관리에 대한 부담을 줄여주고, 높은 확장성과 견고성을 제공합니다. 또한, 서버리스는 무상태성(Stateless)을 특징으로 하여 함수 호출 시 필요한 리소스만 로드하고 호출이 완료된 후에는 모든 리소스를 삭제함으로써 각 호출이 독립적이고 다른 동시 호출에 영향을 주지 않도록 보장합니다.
따라서, 마이크로서비스와 서버리스는 분산 컴퓨팅 아키텍처를 기반으로 하며, 함께 사용될 수 있습니다. 서버리스 아키텍처를 사용하여 마이크로서비스를 구현할 수 있으며, 마이크로서비스 아키텍처를 구축할 때는 데이터베이스를 분리하는 것이 권장되는 모범 사례 중 하나입니다. 그러나 시스템을 설계할 때 각 접근 방식의 트레이드오프와 이점을 신중하게 고려해야 합니다.
-
트레이드오프:
트레이드오프는 기술적인 결정을 내릴 때 굉장히 중요한 개념입니다. 어떤 결정을 내리더라도 언제나 이점과 단점이 함께 따릅니다. 그러므로 결정을 내릴 때는 이점과 함께 단점도 고려하여 전반적인 시스템의 효율성을 증진시키는 것이 필요합니다.
예를 들어, 마이크로서비스 아키텍처를 설계할 때 데이터베이스를 분리하는 것은 서로 다른 마이크로서비스가 서로 독립적으로 동작할 수 있도록 하기 위한 중요한 트레이드오프입니다. 데이터베이스를 분리하면 중복 데이터가 발생할 수 있으며, 이는 일관성 유지 및 데이터 조작의 복잡성을 낮추는 데 도움이 될 수 있습니다. 따라서, 시스템을 설계할 때 각 접근 방식의 트레이드오프와 이점을 신중하게 고려하여 최선의 선택을 할 수 있도록 해야 합니다.
또한, 서버리스 아키텍처를 사용하는 경우 무상태성은 중요한 트레이드오프입니다. 서버리스 아키텍처에서는 함수 호출 시 필요한 리소스만 로드하고 호출이 완료된 후에는 모든 리소스를 삭제함으로써 각 호출이 독립적이고 다른 동시 호출에 영향을 주지 않도록 보장합니다. 이는 확장성과 견고성을 모두 제공할 수 있는 중요한 특징 중 하나입니다. 트레이드오프는 시스템 설계 및 개발에서 항상 고려되어야 하며, 이를 통해 시스템의 효율성과 안정성을 증진시킬 수 있습니다.
[Q2.] 서버리스의 특징 중 하나인 무상태성(Stateless)은 무엇을 의미하나요?
서버리스의 무상태성(Stateless)은 클라우드 서비스 제공 업체가 관리하는 함수를 실행하는 아키텍처로, **서버가 필요하지 않습니다**. 함수가 호출될 때, 함수에서 필요한 리소스만 로드하고 사용한 후에는 리소스를 모두 삭제하는 것을 의미합니다. 이러한 방식으로 함수의 상태를 유지하지 않기 때문에, 여러 클라이언트가 동시에 함수를 호출하더라도 각각의 호출은 서로 영향을 주지 않습니다. 이는 서버리스 시스템에서 확장성과 견고성을 보장하는 중요한 특징 중 하나입니다.
서버리스 아키텍처는 클라우드 서비스 제공 업체가 이용 가능한 인프라 및 서비스를 제공하므로 개발자가 애플리케이션을 실행하고 관리하는 데 필요한 인프라를 구축하거나 관리할 필요가 없습니다. 이는 개발자가 *인프라 관리의 부담을 줄여주고, 애플리케이션의 개발 및 배포 시간을 단축시켜줍니다.*
서버리스 아키텍처는 전체 애플리케이션을 함수로 분할하여 각 함수를 독립적으로 실행하는 방식으로 작동합니다. 함수는 클라우드 서비스 제공 업체에서 실행되며, 함수를 호출하는 클라이언트는 함수를 호출하기 위해 필요한 매개변수만 전달합니다. 함수 실행이 완료되면, 함수는 호출에 사용된 리소스를 삭제합니다. 이러한 방식으로 함수는 상태를 유지하지 않으며, 다른 함수 호출과 독립적으로 실행됩니다.
서버리스 아키텍처의 무상태성은 서버 기반 아키텍처와 비교하여 여러 가지 이점을 제공합니다. 서버 기반 아키텍처에서는 서버에 상태 정보를 저장하므로, 동시에 많은 사용자가 서버에 접근하면 상태 정보가 충돌하여 문제가 발생할 수 있습니다. 반면에 서버리스 아키텍처에서는 함수가 상태를 유지하지 않으므로, 동시에 많은 사용자가 함수를 호출해도 상태 정보 충돌 문제가 발생하지 않습니다. 이는 서버리스 시스템에서 확장성과 견고성을 보장하는 중요한 특징 중 하나이며, 서버리스 아키텍처가 대규모 애플리케이션의 개발 및 배포에 적합한 이유 중 하나입니다.
이러한 스테이트리스 트랜잭션의 가장 일반적인 예시는 검색창에 질문을 입력하고 엔터키를 누르는 형식으로 진행되는 온라인 검색입니다. 트랜잭션이 우발적으로 중단되거나 종료되면 새롭게 시작하면 됩니다. 스테이트리스 트랜잭션은 단일 요청에 대해 하나의 응답이 나오므로, 자동판매기와 비슷합니다.
[Q3.] 마이크로서비스를 구성할 때, 데이터베이스를 꼭 분리해야 하나요? 데이터가 한 곳에 모여있지 않고 중복되어도 괜찮은가요? 모범 사례를 알아보고, 이유를 함께 적어주세요.
마이크로서비스 아키텍처를 구성하는 주요 목표 중 하나는 각각의 마이크로서비스가 서로 완전히 독립적으로 운영될 수 있는 것입니다. 이를 위해서는 데이터베이스를 분리하는 것이 중요합니다. 각 마이크로서비스는 자체 데이터베이스를 갖고 있으며, 데이터베이스 스키마와 데이터는 해당 마이크로서비스에만 존재합니다. 이렇게 구성하면, 각 마이크로서비스가 서로 독립적으로 동작하고, 다른 마이크로서비스에 영향을 주지 않고 자체 데이터를 관리할 수 있습니다.
데이터베이스를 분리하면 중복 데이터가 발생할 수 있습니다. 그러나 중복 데이터는 일관성 유지 및 데이터 조작의 복잡성을 낮추는 데 도움이 될 수 있습니다. 예를 들어, 사용자 정보와 주문 정보가 각각 다른 마이크로서비스에 저장되어 있을 경우, 사용자 정보가 변경되어도 주문 정보에 영향을 미치지 않습니다. 이는 마이크로서비스가 서로 독립적으로 동작할 수 있도록 보장하는 중요한 요소 중 하나입니다. 또한, 데이터베이스를 분리함으로써 각 마이크로서비스의 스케일링이 용이해집니다. 각 마이크로서비스는 자체 데이터베이스를 가지기 때문에, 요구 사항에 따라 각각의 마이크로서비스의 데이터베이스를 스케일링할 수 있습니다. 이는 전체 애플리케이션의 성능을 높이는 데에 큰 도움이 됩니다.
그러나, 데이터베이스를 분리함으로써 발생하는 중복 데이터와 관련된 문제는 신중하게 고려해야 합니다. 데이터베이스를 분리하면 중복 데이터가 발생할 수 있기 때문입니다. 이를 해결하기 위해서는 각 마이크로서비스의 데이터베이스 스키마 및 데이터 모델을 신중하게 설계하고, 중복 데이터를 최소화할 수 있는 방법을 고려해야 합니다.
요약 하자면 마이크로서비스를 구성할 때, 데이터베이스를 분리하는 것이 일반적인 모범 사례이고 이를 통해 각 마이크로서비스가 서로 독립적으로 운영될 수 있으며, 전체 애플리케이션의 확장성과 유지 보수성을 높일 수 있습니다. 그러나, 중복 데이터와 관련된 문제는 신중하게 고려해야 하며, 각 마이크로서비스의 데이터베이스 스키마와 데이터 모델을 최적화하는 것이 중요합니다.
댓글남기기