🧠 이번 주에 새로 배운 것
- 캐시 버저닝 전략에 대해 배웠습니다. 필드가 변경되면 버전을 변경하고 버전 업그레이드 이후 기존 버전을 SCAN + Unlink로 직접 해제하는 방법을 배웠습니다.
- facade, infra 레이어 중 어느 레이어의 반환값을 캐싱 하는지 궁금한 점이 해소되었습니다. 상황에 따라 다르며 facade는 연산이 끝난 결과, infra는 db에서 조회한 결과 혹은 API 호출 결과를 캐싱합니다.
- 드라이빙, 드리븐 테이블의 개념과 인덱스를 어떤 필드에 걸었는지에 따라 옵티마이저가 알맞은 실행 계획을 판단하는것을 배웠습니다.
💭 이런 고민이 있었어요
- 좋아요 수를 보관하는 테이블을 별도 분리한 것이 Materialized View 개념을 적용한 건지 아리송 했습니다.
- 쿼리 힌트를 사용함에 따라 성능 <-> DB 의존성의 트레이드 오프를 고민하였습니다. 쿼리 힌트를 사용하는것이 좋은 판단일까 생각해 보았습니다.
- 캐시 전략이 여러 경우가 있는데 어떤 경우에 어떤 전략이 어울릴까 고민하였습니다. 이번 과제에선 cash aside 패턴을 선택하였습니다.
💡 앞으로 실무에 써먹을 수 있을 것 같은 포인트
- explain 명령어와 친숙해졌습니다. type, key 속성을 주의깊게 봐서 의도한 인덱스가 적용되었는지 보는 시야기 생겼습니다.
- 인덱스와 캐시를 언제 적용해야 하는지 알게 되었습니다. 둘다 비용이 들기 때문에 적재적소에 사용해야 합니다.
🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것
- 인덱스와 캐싱에 따른 k6 성능 테스트를 진행하지 못했습니다.
- 캐싱 구현시 추상화를 적용하지 못했습니다. 현재 코드는 재활용성이 없어 추후 리팩터링 예정입니다.