DBMS 및 SQL 활용(1) - MSA 환경에서의 주의사항
DBMS 수업 중 MSA환경에서 사용 시 주의해야 할 기술들에 관해 학습했습니다.
제 개인 실습 프로젝트와도 연관성이 있는 것 같아 정리해보기로 했습니다!
DB 연동 시 주의사항
Kafka
[ 사용 목적 ]
- 비동기 메시징, 이벤트 기반 아키텍처, 서비스간 decoupling 목적으로 사용
- DB 변경 사항(Event Sourcing)을 다른 마이크로서비스에 전달
[ 주의 사항 ]
- Exactly once 처리 :
- Kafka는 기본적으로 at least once, DB에 저장한 후 메시지를 커밋하거나, 트랜잭션 처리(use idempotent keys or Kafka transactions) 필요
- 오프셋 관리:
- Consumer가 중복 처리/누락 없이 메시지를 처리하려면 적절한 오프셋(commit & rollback)
- Schema 관리:
- JSON, Avro, Protobuf 사용 시 Schema Registry 사용 권장 (버전 관리, 역호환성 고려)
- Back-pressure 처리:
- Consumer가 느릴 경우 Kafka에 메시지 적체. 배치 처리나 쓰로틀링 전략 필요
- DB 연계 시 순서 보장:
- Partition을 키 기반으로 고정해서 메시지 순서 보장 필요 (예: user_id 기준 파티셔닝)
- 장애 복구 전략:
- 메시지 중복/유실 발생 시를 대비한 재처리, DLQ(Dead Letter Queue) 도입 필요
요약하자면, MSA 기술을 도입하면 DB가 분산되어 있으니, 분산되어 있는 데이터들 간 불일치 문제 및 타아밍 문제를 고려해야한다는 얘기라고 이해했습니다!
Elasticsearch
[ 사용 목적 ]
- 빠른 검색, 필터링, 로그 분석, 시각화
- 비정형 데이터 또는 대용량 텍스트 인덱싱
[ 주의 사항 ]
- 데이터 동기화 전략:
- DB에 저장된 데이터를 Elasticsearch와 동기화하는 방식 필요 (Kafka, Logstash, Change Data Capture 기반 등)
- Index 설계:
- 검색 성능에 영향. Shard 개수, Mapping Type, Analyzer 등을 설계 단계에서 조정
- 실시간성 이슈:
- DB와 ES 간 싱크 지연 가능. 완벽한 consistency 보장 안 됨 -> eventual consistency 허용해야 함
- Bulk 처리:
- 대량 데이터 입력 시 bulk API 사용. document 단위로 indexing 시 성능 저하 발생
- 데이터 중복 방지
- 문서 ID 설정 안하면 중복 인덱싱 됨 -> ID 직접 지정 권장
- 검색 성능 최적화
- ngram, edge ngram, 검색 weight 설정 필요. 과도한 wildcard 검색 지양
즉, 분산 환경에서 Elasticsearch를 활용해서 검색 기능을 구현할 때, 데이터 동기화, 일관성, 중복 방지, 검색 최적화 전략을 반드시 고려해야 한다는 것입니다.
Redis
[ 사용 목적 ]
- 캐시, 세션 저장, pub/sub, 간단한 key-value 저장소
- DB 부하 감소, 응답 속도 개선
[ 주의 사항 ]
- 캐시 무효화 전략:
- DB 데이터가 바뀌었을 때 Redis 캐시를 어떻게 갱신할지 결정 필요
- TTL 설정:
- 캐시 만료를 통해 데이터 일관성 유지. TTL 설정 안 하면 stale 데이터 오래 유지됨
- Key 설계:
- 명확한 네이밍과 적절한 TTL 필수
- 데이터 동기화:
- Redis만 쓰고 DB 반영 안 되는 경우 데이터 유실 가능 -> Redis는 반드시 보조 저장소로 간주
- Memory 제한:
- Redis는 메모리 기반. eviction 정책과 maxmemory 설정 필수
- 복제 및 장애 대응:
- Sentinel, Cluster 설정을 통한 고가용성 필요
즉, Redis를 분산 환경에서 사용할 때, 캐시 무효화, TTL, 키 설계, 데이터 무결성, 고가용성을 고려해야 한다는 것입니다.
마치며
MSA 환경이 꼭 모든 환경에 최적의 기술이라고 볼 수 없습니다.
분산 환경이 잘 맞고, 여러 개의 무거운 서비스가 있는 경우 MSA를
적절하게 활용하면 될 것 같습니다.
그래도! 대규모 플랫폼에서는 대부분 MSA를 사용하고 있기 때문에 계속해서 MSA 공부를 해볼 예정입니다 ㅎ.ㅎ
참고자료
스칼라 교육자료
This post is licensed under CC BY 4.0 by the author.