본문 바로가기

프로젝트

재화(크레딧, 투표권 등) 로그 데이터 정리 작업

배경

회사에서 재화를 소모할 때 로그 데이터를 사용을 하고 있다. 그러다 보니 사용자의 데이터가 많아질수록 처리 속도가 느려지는 문제가 발생했다. 심한 경우 SQL Timeout 문제로 인해 처리가 안 되는 경우도 있다. 시상식 투표 기간이 다가오다 보니 광고를 보는 유저는 많아졌고 CS가 자주 들어오는 문제가 있어 로그 데이터를 정리해 주는 작업을 해주기로 했다.

진행

전체 로그를 합산하는 작업을 진행해야 하니 유효기간이 남은 재화만 합쳐서 정리해주는 작업이 오래 걸렸다. 특히 조회해 오는 부분에서 그랬다. 그래서 데이터가 3만 건 이상인 유저를 별도로 분리했고, 3만 건 이하의 유저만 먼저 처리하도록 했다. 그리고 3만 건 이하의 유저도 일정 숫자로 분리를 하여 한 번에 여러 유저들을 가져오도록 했다. 이렇게 처리하니 약 3시간 이상 걸렸으며, 검증하는 작업까지 합치면 만 하루가 걸렸다.

이슈

회사에서는 점검을 하루 동안 거는 것은 어렵다고 해서 대안책을 내놓기를 원했다. 그래서 개발팀에서 논의가 이루어졌고, 점검 하루 전날 데이터를 기준으로 먼저 데이터 정리를 하기로 했다. 그리고 정리한 데이터를 기준으로 이후에 들어온 로그 데이터를 이전해주기로 했다. 이 시나리오대로 테스트를 해보니 실제 점검 시간은 2~3시간 내에 끝났다.

작업 준비하면서 변화

이전에도 이렇게 데이터 정리를 했었는데, 마무리 이후에 SQL Timeout 및 7초 이상 걸리던 유저에 대해서 200ms안에 처리가 되는 것을 확인했었다. 이번에도 동일한 효과를 발휘할 거라고 기대한다. 이것은 근본적인 문제를 해결하는 것은 아니라고 생각한다. 이전부터 계속 고민을 했고 이 점에 대해 개발팀에 이야기를 했었다. 다른 작업으로 인해 계속 밀어졌었다. 하지만 이런 문제를 계속 겪고 나니 개발팀에서도 경각심을 느꼈는지 재화 획득 및 소모 구조를 변경하기로 했다. 

그래도 빠르게 소비자가 문제없이 사용할 수 있도록 해줘야 하기에 진행을 한 것이다.