항해 플러스 추천인 코드
지원페이지에서 추천 코드에 3ZTeU1
를 입력하시면 20만원
할인 혜택을 받을 수 있습니다.
항해 플러스 과정에 관심 있는 분들은 아래 링크를 통해 신청해보세요! 궁금한 점이나 커피챗을 원하시면 LinkedIn이나 kboxstar@gmail.com
으로 연락주세요.
개요
이번 주차에는 인덱싱을 사용한 쿼리의 성능 개선을 진행하고 서비스가 커짐에따라 발생하는 문제에 대한 고민과 MSA 관점에서 트랜잭션 관리 방법에 대해 고민하는 시간을 가졌습니다.
1. 문제
인덱스를 효율적으로 사용하는 방법에 대해 고민이 있었습니다. 특히, 데이터 중에서 어떤 컬럼이 카디널리티가 높아질 가능성이 있는지 판단하고, 이를 기반으로 적절한 인덱싱 전략을 세우는 것이 과제였습니다. 또한, 모놀리식에서 MSA로 전환하는 과정에서 데이터 결과의 일관성을 어떻게 보장할지, 트랜잭션의 범위를 어디까지로 설정할지에 대한 고민도 있었습니다.
2. 시도
데이터의 중복도는 서비스 환경과 데이터의 특성에 따라 달라질 수 있지만, id
와 같은 특정 컬럼은 일반적으로 카디널리티가 높게 나타날 가능성이 큽니다. 이러한 데이터의 분포를 직접 확인하기 위해 더미 데이터를 생성해 시뮬레이션을 진행하였습니다.
더미 데이터를 생성하는 데 단순 SQL을 사용할 수도 있었지만, 테스트의 유연성을 확보하기 위해 네이버에서 개발한 fixture-monkey
라이브러리를 활용했습니다. 이 라이브러리는 Jakarta Validation을 기반으로 랜덤 데이터를 생성할 수 있어 다양한 분포의 데이터를 쉽게 만들어 낼 수 있다는 장점이 있었습니다.
그러나 fixture-monkey
를 사용하면서 객체 생성 비용이 예상보다 높아 데이터 생성 시간이 오래 걸린다는 단점이 있었습니다. 이를 통해 10만 개 또는 30만 개의 데이터를 생성하여, 컬럼별로 발생 가능한 카디널리티를 확인하고 인덱싱에 활용할 데이터를 선정하는 데 참고하였습니다. 인덱싱을 통한 성능 개선
모놀리식 트랜잭션 방식의 한계와 MSA의 트랜잭션 처리 방식에 대해 알아보았으며 그중 Saga 패턴을 활용한 트랜잭션 처리 방식에 대해 공부하였습니다. MSA 관점에서 트랜잭션 관리
3. 해결
인덱스 설정 후 EXPALIN 또는 EXPALIN ANALYZE를 통해 쿼리의 성능 및 카디널리티를 확인하였습니다.
ApplicationEventPublisher
와 TransactionalEventListener
를 활용하여 기존 도메인의 영향없이 부가기능을 추가할 수 있었습니다.
Step 16: MSA 관점에서 트랜잭션 관리 보고서 작성 및 예약 완료 Event 구현 #36
4. 알게 된 점
- 인덱스를 효율적으로 사용하기 위해 데이터의 카디널리티를 고려하는 것이 중요하다.
- 데이터 분포에 따라 인덱스가 효율적으로 사용되지 않을 수 있다. (일반적인 조회비용보다 인덱스 조회비용이 비싸다)
- MSA에서 트랜잭션을 관리하는 방법 중 Saga 패턴을 활용할 수 있다.
ApplicationEventPublisher
와TransactionalEventListener
를 활용하면 도메인의 영향 없이 부가기능을 추가할 수 있다.
'항해 > WIL' 카테고리의 다른 글
항해 플러스 백엔드 코스 6기 수료 회고 (1) | 2024.12.08 |
---|---|
항해 플러스 백엔드 코스 6기 9주차 회고 WIL (1) | 2024.11.25 |
항해 플러스 백엔드 코스 6기 7주차 회고 WIL (1) | 2024.11.10 |
항해 플러스 백엔드 코스 6기 6주차 회고 WIL (1) | 2024.11.03 |
항해 플러스 백엔드 코스 6기 5주차 및 챕터 회고 WIL (6) | 2024.10.27 |