Serverless 적용기/적응기

혹은 Docker 운영 실패기

JC
Museion
5 min readSep 25, 2019

--

1년 넘게 운영하는 토이 프로젝트가 있다. 처음 시작할 때는 아무것도 모르고 기존에 만들던 대로 개발을 진행했다. 웹 개발자기 때문에 인프라에 대한 관심이 없었지만 당시 다니던 회사에서 업무로 AWS를 사용하고 있었기에 AWS를 이용해 구축하기로 결정했었고, AWS re:Invent 2018 행사를 다녀온 이후에 docker를 이용해 다시 만들었다.

다시 만들고 시간이 한참 지났다. 그동안 나는 docker 몇 번 만져본 경험으로 사내 세미나를 하기도 했고, 이직을 해서 aws, docker와 거리가 먼 회사에서 일을 하고 있다.

서비스가 작동하지 않아요

운영하던 토이 프로젝트가 작동하지 않는다는 리포트가 들어왔다. 얼마 전에 메모리 과부하로 문제가 발생한 적이 있기에 같은 문제일 줄 알고 인스턴스에 접속했는데 접속도 거의 없고(작동하지 않으니 대부분 접속을 할 수가 없다), 시스템에 다른 문제도 없는 것이었다.

어떤 문제가 있을까 여러 가지를 확인하다가 습관처럼 df -h명령으로 전체 용량을 확인하고 원인을 알게 됐다. 여유 용량이 없어 서비스가 작동하지 않는 상태인 것이다. 시간이 지난 로그 파일을 삭제하고 접근 로그, 에러로 그 등을 모두 삭제했다. 약간의 여유가 생기자 사람들이 다시 접속하기 시작했다.

개별 서버에서 돌아가는 서비스라면 문제를 파악하기 쉬울 텐데, 서버 한 대에서 인스턴스 4개를 실행하다 보니 어떻게 원인을 파악해야 하는지도 모르겠고, 여유 공간이 사라지면 또 내가 관리를 해야 하는가에 대한 고민이 시작됐다.

Server 관리가 귀찮고 어렵다

토이 프로젝트를 처음부터 다시 생각해봤다. 내가 특별히 에너지를 쏟지 않고 사람들에게 도움을 주기 위해 만들었는데, 어느샌가 내가 관리에 많은 시간을 쏟아야 하는 문제가 발생하고 있다. 토이 프로젝트를 없애거나 관리를 줄이는 방법을 고민해야겠다.

토이 프로젝트를 없애는 것을 생각했더니 아직도 하루에 4000pv 이상 발생하고 있어서 없애는 것도 쉽지 않겠다. 가끔 커뮤니티에 들어가면 감사 표시를 하는 사람들이 있고, 게임 데이터를 위한 정보 캡쳐도 이 사이트를 하는 사람들을 많이 보게 된다. 너무 고마워서 없애는 것은 나중으로 미뤘다.

그렇다면 내가 관리에 들이는 시간을 줄여야 하는데, 어떤 방법이 있을까 고민을 했다. 가장 쉬운 것은 인스턴스를 큰 크기로 변경해서 문제를 신경 쓰지 않는 것인데, 이건 그냥 돈으로 해결하는 것이지 기술로 해결하는 게 아니다. 지금 생각하면 ‘돈으로 해결하면 왜 안 될까’ 싶기도 하지만 당시에는 기술로 해결을 해야겠다는 생각을 했다. 그리고 서버 관리를 하지 않을 방법, serverless 기술에 대해 공부하기로 했다.

다시 AWS를 활용해 서비스를 운영한다

현재 서비스는 toast cloud에서 작동하고 있다. AWS보다 저렴한 비용과 넉넉한 용량 때문에 선택을 했는데, toast cloud에는 serverless 기술이 없어서 AWS를 공부하기 시작했다. API Gateway를 이용해 API 서비스를 대체하고, S3에 저장한 데이터를 lambda로 읽어 데이터를 가공하고 API Gateway와 연동했더니 내가 원하는 대로 잘 작동한다. API 서비스를 대체할 수 있게 됐다. 이 과정에서 기존 데이터를 복사하기 위해 Code pipeline을 이용해 github에 있는 데이터를 S3로 옮기는 작업을 자동화할 수 있었다. Github에 변경이 생기면 code pipeline이 자동으로 데이터를 S3로 옮겨준다.

Docker 실패 돌아보기

웹 개발자라서 Docker가 더 잘 맞는다는 생각을 했다. 업무에 필요한 경우도 많았고, 쉽게 웹서버를 만들어 테스트할 수 있는 장점이 있다고 생각했는데, 웹 개발자라고 Serverless가 필요 없는 것은 아니었다. 코드에만 신경 쓰고 인프라에 신경을 덜 쓰게 되기에 더 유용하다는 생각도 든다. Serverless 설정이 처음에는 어려운데 이건 Docker에서도 마찬가지다.

그동안 인프라를 관리하지 않았기에 Docker는 오히려 맞지 않았다. 인프라를 계속 신경 쓰고 관리하고 개선할 수 있는 사람에게는 Docker나 인스턴스가 더 좋다. 나는 인프라를 신경 쓰지 않기 위해 Docker에서 Serverless로 옮기게 됐다.

API 서비스 운영과 관련해 조금 더 자세한 이야기를 적었다. 2019.10.01

--

--

JC
Museion
Editor for

책 읽는 개발자. 아빠. 생산성, 책, 개발에 관한 글을 남깁니다.