서론


나는 3년된 모바일 게임의 클라이언트, 서버 개발과 유지보수를 담당하고 있다.

서버는 직접 최초 개발한 게 아니다 보니, 미스테리한 사건들이 꽤 많이 일어난다.

오늘은 가장 오래 끌었던 ( 약 6개월 ) 이슈를 기록해두고자 한다.

본론


사용하고 있는 aws인스턴스에서, Node.js 기반의 메인 서버가 작동한다.

이 서버는, 게임에서 사용하는 DB와 연결되어 있으며, 클라이언트로부터 웹 API 요청을 받아 처리한다.

우리 게임의 랭킹이 매번 요청을 받을 때 마다, 150만명의 유저정보를 무의미하게 긁을 수는 없으니,

10분마다 쿼리를 보내어, 상위권 랭킹을 디비에 캐싱해둔다.

이번에 새로운 랭킹이 추가되면서, 새로운 랭킹만 갱신에 장애를 겪었다.

메인서버는 잘 갱신되었고, 최초에 테스트 로컬 서버에서는 랭킹 캐싱도 잘 진행되었다.

문제해결의 자취

1번째 조치

첫번째 조치는, 로컬 서버를 다시 띄워서 새 랭킹의 캐싱이 잘 되는 확인하는 것이었다.

만약, 여기서 돌지 않는다면 새 랭킹 캐싱 기능에 문제가 있는 것이니 그걸 손보면 된다.

문제없이 잘 진행되었다.

2번째 조치

이 부분에서 조금 고민이 되었다. 현재 발생하고 보고받은 이슈는 다음과 같았다.

” 새 랭킹 갱신이 작동하지 않는다. “

하지만, 여기에 더해 기존 이슈인 다음 이슈도 이번에 해결하고 싶었다.

” 랭킹 갱신의 주기적 처리가 어디서 일어나는지 파악되지 않았다 “

그럼에도, 현재 라이브 게임 서비스 운영에 문제가 되고 있는 부분은 새 랭킹 작동이므로 이 부분부터 고치기로 했다.

현재 랭킹 갱신이 어디에서 되고 있던간에, 기존 랭킹 갱신은 정상적으로 진행되고 있었고, 새 랭킹 갱신을 기존 메인서버의 AWS 인스턴스 Linux에서 중복해서 처리해주면 해결 될 일이었다.

그래서, 메인서버 인스턴스에 다음을 입력해서, cron을 등록했다.

crontab -e // cron을 edit 
//-----------vi 켜짐 
node */10 * * * * ~.ranking-cron.js

작업하고, 운영 측에서 문제없이 기능을 확인했다는 내용을 전해들었다.

이제 여기서 바쁘면 여기서 끝내도 됐지만, 여전히 6개월 묵은 크론 파악 불가 이슈를 해결하고 싶었다.

3번째 조치

메인서버 2개의 인스턴스를 모두 뒤져보았지만, cron을 활용하거나 node-cron을 활용한 부분은 찾을 수 없었다.

묘한 자신감에 차서, 이건 다른 인스턴스에서 처리해주고 있다고 생각했다.

대표님께 메일을 보내서, 예전에 사용하던 heroku사의 계정 권한을 요청했다.

그리고.. 빙고!

heroku 에서 제공하는 scheduled job 이라는 기능안에 들어있었다. 친히 삭제해주었다.

이제 6개월 묵은 이슈에 이 내용을 상세히 적고 이슈를 닫았다.

간만에 정말 신나는 작업이었다 !

결론

라이브 서비스는 매번 마음에 들만큼 멋지게 코드 품질을 유지하기 힘들 때가 있다. 하지만 어쩌겠는가? 그래서 우리(프로그래머,소프트웨어엔지니어)가 페이를 받는 것이다.

이번처럼 야금야금 고쳐나가는 재미가 또 있다.

회사에 임원으로 개발전반을 대표한 지 2개월 밖에 되지 않았지만, 이제야 슬슬 자신감이 붙는 것 같다.

이 케이스도 만약에, 3번째 조치에서 자신감을 잃었다면 이렇게 확실하게 해결하기는 어려웠을 것이다.

불확실성에 대처하는 것이 엔지니어에 본연의 임무라고 그래디 부치 아저씨가 그랬다.

불확실한 것은, 늘 두려움과 당혹감을 불러 일으키며, 자신감을 잃기 쉽다.

그래서, 다들 사수나 동료 , 조직의 문화에 큰 방점을 찍는 것이라고 본다. 함께하면 좀 낫기 때문이다.

독학으로 커리어를 시작해, 여기 까지 성큼성큼 걸어왔다. 늘 두려움과 불신으로 두리번 거리고,

운좋게 친절하고 실력있는 사람들을 만나 큰 도움들을 받아왔다. 이제는 앎과 경험의 늪을지나 묘한 자기확신이 자리잡고 있다.

앞으로도 재미있고 가슴뛰는 일들을 해보자.