Engineering/개발일지

[개발 일지] DB부하 줄이기(알람 서비스)

rudy K 2024. 1. 15. 00:09

기존 블로그에서 옮겨온 글입니다. (21/7/15 작성)

 

이번 글에서는 간단하게 TMM DB부하의 가장 큰 원인이었던 알람 서비스를 어떻게 개선했는지 적어보려고 합니다.
이번 업무에는 42서울의 이호준 멘토님께서 많은 도움 주셨습니다.

일반적인 실시간 알람 서비스 구현 방법

TMM의 알람 서비스가 어떻게 구현되어 있는지 멘토님께 말씀드리자 먼저 일반적으로 어떻게 실시간 알람 서비스가 구현되는지 알려주셨습니다.


일반적으로 실시간 알람 서비스는 노티 서버를 따로 두고 큐에 알람을 넣어놓고 전송하는 방식으로 동작한다고 말씀해주셨습니다.
하지만 이 방법의 경우 추가로 서버를 구축하는 등 작업이 많이 필요하기에 TMM에 적합하지 않다고 말씀해주셨고 DB를 이용하는 방법을 개선할 수 있는 팁을 주셨습니다.

부하를 줄이는 방법

TMM의 알람서비스는 어느정도 실시간성을 유지하기 위해 페이지를 전환할 때마다 알람 테이블에서 row count를 하는 방식으로 구현되어 있었습니다.
사실 알람 갯수를 read하는 것 자체가 그렇게 빅쿼리가 아닌데 부하가 간다는 것은 문제가 있다고 말씀해주셨고 세가지의 팁을 주셨습니다.

  1. 유저별로 인덱싱하여 조인 없이 단독으로 read할 것
  2. row count는 부하가 많이 가니 다른 방법을 사용할 것
  3. column 하나를 두고 +1, -1 하는 방식을 이용할 것

이 때 정합성이 깨지는 것은 batch로 맞추거나 전체 로우를 확인해야하는 알람 페이지에 들어갔을 때 row count하여 sync를 맞추는 방식을 이용하면 된다고 조언해주셨습니다.

기초지식의 중요성

사실 조언해주신 내용이 크게 어려운 내용은 아니었지만 이런 사소한 기초지식 하나하나가 큰 차이를 만든다는 것을 다시 한 번 느낄 수 있었습니다.

 

더불어 제가 아직 정말 많이 cs지식이 부족하다는 것을 느낄 수 있었고 개발자는 역시 계속해서 공부해나가야하는 일임을 뼈저리게 느꼈습니다.

 

오늘도 읽어주셔서 정말 감사합니다.