해결된 질문
작성
·
19
답변 2
0
bson700님, 안녕하세요!
대규모 시스템 강의지만 이에 대한 정의도 모호할 수 있다보니, 정확한 판단 기준을 말씀드리긴 애매한 부분이네요.
애초에 시스템이 크지 않다면, 굳이 복잡한 기술 스택을 취할 필요는 없습니다.
처음부터 복잡한 시스템을 구축하면, 구축 비용과 개발 난이도도 올라가고 실제로 서버 운영하는 비용도 큰 부담이 될 수 있습니다.
초기에는 소규모로 간단하게 운영하다가 추후 데이터와 트래픽이 많아진다면, 그 때 대규모 시스템을 위한 기술들을 적용해도 됩니다.
다만, 보통 시스템을 운영하다보면 예상되는 또는 기대하는 데이터 수와 크기가 있다보니, 이런 경우에는 처음부터 미리 고려해서 해당 기술들을 적용할 수도 있습니다.
각 항목에 대해 조금씩 풀어서 말씀 드려보면..
데이터가 그렇게 많지 않다면 단일 DB로도 충분한 상황이 많습니다.
단일 DB가 모든 부하(읽기/쓰기 트래픽, 데이터 수와 크기)를 감당할 수 없을 때 분산 DB를 고려할 수 있는 것이고요.
그런데 꼭 분산 DB가 마냥 해결책은 아닙니다.
아무래도 메인 DB는 디스크 기반으로 운영할 때가 많다보니 I/O 작업도 느리고, 모든 트래픽을 메인 DB가 받아줄 필요가 없을 수도 있습니다.
이 경우 메인 DB의 데이터 분산 관점 보단, 성능 개선 또는 부하를 줄여줄 방법으로 고민해볼 수 있습니다.
강의에서는 Redis(메모리 기반 데이터베이스)를 활용한 것이 그 예시고요.
Redis는 캐시 용도로 자주 사용하지만, 성능적인 이점 외에도 메인 DB의 부하를 줄여준다는 이점도 있습니다.
읽기 트래픽이 많아서 문제 됐던 상황이라면, 앞단에 캐시를 적용함으로써 메인 DB의 부하를 줄여줄 수 있는 것입니다.
또, 마이크로서비스가 많아지고 시스템이 복잡해지면, 각 마이크로서비스 간에 통신이 복잡해질 수 있습니다.
이 경우 이벤트를 활용할 수 있는 것이고, 결국 이벤트를 서로 주고받을 방법이 필요하게 됩니다.
발행한 이벤트는 불특정 다수에게 그저 알려질 뿐이라, 발행자는 유지하고 구독자만 추가할 수 있어서 기능 확장 측면에서도 유리한 상황이 많습니다.
동기적으로 즉시 처리해야 하는게 아니라면, 이벤트만 발행해두고 나중에 후처리를 할 수도 있어서 사용자 경험이나 응답 속도 개선에도 이점이 있고요.
그리고 이벤트를 주고 받기 위한 도구로서의 Kafka는,
안정성, 고성능, 고가용성 등의 대규모 시스템에서 유리한 특성 때문에 이벤트 브로커로 주로 채택되는 것입니다.
클라이언트 요구사항이 복잡하다면, 분산 환경에서 여러 개의 데이터를 조인해서 응답해줘야할 수도 있습니다.
이 경우에 분산된 데이터를 하나씩 찾아서 응답을 만들어내면 서버 내부적인 부하도 커지고, 응답 시간에도 큰 지연이 생길 수 있습니다.
읽기 트래픽과 쓰기 트래픽의 비율이 크게 다르다면, 서로 서버 확장을 다르게 운영하고 싶을 수도 있고요.
이러한 필요성이 보일 때 CQRS를 적용하면 되는겁니다.
구체적인 판단 기준이 있기 보단, 시스템 운영하면서 병목되는 지점 또는 개선이 필요해보이는 지점이 보이면 그때 하나씩 적용해 나가는 것 같네요.
물론, 경험적인 측면에서 미리 적용이 필요하다고 판단하는 부분은 있겠지만, 이것도 시스템 특성이나 팀의 상황, 학습 수준 등에 따라서 달리하게 될 것 같네요.
처음부터 모든 기술을 다 적용할 필요는 없고, 자신이 속한 환경에서 실무 경험 쌓으며 기준을 만들어 가시면 충분하다고 봅니다!
0
안녕하세요, 인프런 AI 인턴입니다. bson700님.
현재 듣고 계신 강의에서 다양한 기술들, 예를 들어 분산 DB, Redis, Kafka, CQRS 등의 시스템을 설계할 때 어떤 기준으로 기술을 선택하는지가 궁금하신 것 같습니다. 이러한 기술들은 각자의 강점과 약점이 있으며, 모두 적용하기 보다는 프로젝트의 특성과 요구사항에 맞춰 선택하는 것이 중요합니다.
시스템의 규모 및 트래픽: 대규모 데이터를 처리해야 하거나 높은 트래픽을 감당해야 한다면, 스케일링 가능한 기술(Kafka, Redis)을 사용하는 것이 좋겠습니다.
데이터 일관성과 신뢰성: 분산 DB와 CQRS는 데이터의 일관성과 신뢰성을 유지하고 싶을 때 적합합니다. 또한, CQRS는 읽기/쓰기 분리를 통해 확장성과 성능을 향상시킬 수 있습니다.
응답 시간과 성능: 시스템의 응답 시간이 중요한 경우에는 Redis와 같은 인메모리 데이터 저장소를 검토하는 것이 좋습니다.
운영 및 유지보수 비용: 각 기술의 운영 복잡도 및 유지보수에 필요한 리소스도 고려해야 합니다. Kafka와 같은 기술은 높은 학습 곡선과 복잡한 설정이 요구될 수 있습니다.
비즈니스 요구사항: 도입하려는 기술이 실제로 해결해야 하는 문제와 맞아떨어지는지 확인해야 합니다. 예를 들어, 이벤트 중심 아키텍처가 필요한 경우 Kafka가 적합합니다.
관련하여 자세한 설명은 아래 질문의 기존 답변을 통해 확인하실 수 있습니다:
- 기술 스택 선택의 기준은 무엇인가요? (게시글 제목)
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.