운영 기록
1인 서비스 서버를 통째로 옮긴 기록
운세 놀이터 별짓의 서버와 데이터베이스를 새 환경으로 옮기면서 겪은 일을 정리했습니다. 비용, 옛 서버와 새 서버를 나란히 비교한 방법, 거리 때문에 느려진 응답, 통계를 부풀린 봇, 그리고 이사 뒤에 놓친 감시 설정까지.
루비온은 혼자 운영하는 작은 회사입니다. 그래서 서비스 하나를 굴리는 데 드는 고정비가 그대로 부담이 됩니다. 운세 놀이터 별짓도 처음에는 일반적인 방식, 즉 늘 켜져 있는 서버 한 대와 데이터베이스 한 대로 시작했습니다. 방문자가 많지 않은 시기에도 서버는 하루 종일 켜져 있어야 했고, 비용도 매달 같은 만큼 나갔습니다. 이번 가을, 요청이 올 때만 돌아가는 함수 방식과 관리형 데이터베이스로 서버를 통째로 옮겼습니다. 그 과정에서 배운 것을 기록해 둡니다.
1. 주소는 그대로, 뒤쪽만 바꾸기
가장 먼저 정한 원칙은 "이용자 쪽에서는 아무것도 바뀌지 않게"였습니다. 별짓 화면은 정해진 API 주소로 데이터를 받아 옵니다. 이 주소를 바꾸면 화면도 함께 고쳐서 배포해야 하고, 이미 퍼진 공유 링크나 캐시가 꼬일 수 있습니다. 그래서 기존 주소 앞에 작은 중계 서버를 두고, 중계 서버가 요청을 새 함수로 넘기도록 했습니다. 친구들과 실시간으로 하는 게임방처럼 연결을 오래 유지해야 하는 기능은 따로 떼어 실시간 처리에 맞는 서버로 보냈습니다. 덕분에 옮기는 날에도 화면 쪽 코드는 손대지 않아도 됐습니다.
2. 옛 서버와 새 서버를 나란히 비교하기
서버를 다시 쓰는 일에서 제일 무서운 것은 "거의 같은데 조금 다른" 동작입니다. 운세 점수가 한 칸 다르거나, 날짜가 하루 어긋나거나, 빈 목록 대신 오류가 나는 식이지요. 그래서 옛 서버와 새 서버에 똑같은 요청을 보내고 두 응답을 자동으로 비교하는 검사를 만들었습니다. 콘텐츠 목록, 운세 계산, 순위, 관리 화면까지 모두 1,867가지 경우를 비교했고, 전부 같은 결과가 나온 뒤에 실제 주소를 새 서버로 돌렸습니다.
이 검사는 예상하지 못한 차이도 찾아 주었습니다. 예를 들어 데이터를 옮길 때 각 표의 다음 번호를 옛 데이터베이스와 똑같이 이어 붙이지 않으면, 새로 생기는 기록의 번호가 달라져 통계가 어긋났습니다. 눈으로 화면만 봤다면 한참 뒤에야 알았을 문제입니다.
3. 거리는 생각보다 비싸다
처음 새 서버를 연결했을 때 응답이 옛 서버보다 느렸습니다. 원인은 거리였습니다. 데이터베이스는 도쿄에 있는데, 함수는 이용자와 가까운 서울에서 실행되고 있었습니다. 요청 하나를 처리하는 동안 데이터베이스에 여러 번 물어보는데, 그때마다 서울과 도쿄를 오가니 시간이 쌓였습니다. 함수를 데이터베이스와 같은 지역에서 실행하도록 지정하자, 서버 안에서 걸리는 시간이 약 0.5초에서 0.2초 안팎으로 줄었습니다. "이용자 가까이"보다 "데이터 가까이"가 더 중요할 때가 있다는 것을 배웠습니다.
4. 방문자 숫자를 의심하기
이사를 마친 어느 날, 방문자가 평소의 여러 배로 늘어 있었습니다. 기쁜 마음으로 기록을 열어 보니 이상한 점이 보였습니다. 10분도 안 되는 사이에 수십 개의 새 기기가 나타나 각각 페이지를 하나씩만 열고 사라졌습니다. 유입 경로도 없었습니다. 검색엔진이나 링크 미리보기 같은 자동 수집기의 방문이었습니다.
그래서 두 가지를 바꿨습니다. 앞으로는 자동으로 움직이는 브라우저는 통계에 넣지 않고, 화면을 누르거나 스크롤하거나 몇 초 이상 머문 방문만 셉니다. 지난 기록에서도 같은 기준으로 자동 수집기를 골라내자, 그날의 방문자는 73명에서 8명으로 줄었습니다. 숫자는 초라해졌지만, 이제는 그 숫자를 믿고 다음 결정을 내릴 수 있습니다.
5. 이사가 끝나도 감시 설정은 확인하기
마지막 교훈은 실수에서 나왔습니다. 별짓에는 몇 분마다 사이트와 서버가 살아 있는지 확인하고, 문제가 생기면 알림을 보내는 감시 장치가 있습니다. 옛 서버를 끈 뒤로 이 장치가 "서버 장애"라는 알림을 계속 보냈습니다. 확인해 보니 서비스는 멀쩡했고, 감시 장치만 옛 서버에만 있던 상태 확인 주소를 계속 부르고 있었습니다. 새 주소로 바꾸는 데는 몇 분이면 충분했지만, 알아차리기까지 11시간이 넘게 걸렸습니다.
이번에 고치면서 상태 확인이 데이터베이스까지 실제로 연결되는지도 보도록 바꿨습니다. 예전에는 서버가 켜져 있기만 하면 "정상"이라고 답했습니다. 이사 체크리스트에는 이제 "감시 장치가 새 주소를 보고 있는지, 그리고 일부러 실패시켰을 때 알림이 오는지 확인"이라는 줄이 하나 늘었습니다.
정리하며
작은 서비스일수록 서버를 옮기는 일은 미루기 쉽습니다. 기능을 하나 더 만드는 편이 눈에 보이는 성과이기 때문입니다. 하지만 이번 이사로 고정비가 줄었고, 무엇보다 통계와 감시처럼 "믿고 결정할 수 있는 바탕"을 다시 점검하게 됐습니다. 루비온은 앞으로도 서비스를 운영하며 배운 것을 이곳에 솔직하게 남기겠습니다.