서비스가 죽어도 스스로 살아나게 하는 법 - 바이브코딩으로 서비스를 만들면 끝이 아니다 4편
내가 손쓸 수 없는 시간에 서비스가 죽었다면?
예를들면 세벽 3시에 알림이 울렸는데 못듣고 계속 잤다거나,
운전중인데 알림이 왔다던가,
엄마한테 혼나고 있는데(?) 알림이 왔다던가

살다보면 이런 식으로 내가 손쓸 수 없는 상황에 문제가 터질 때가 있습니다.
어쩔 수 없으니 여러분의 서비스를 그 시간동안 그냥 방치해야 하는걸까요?
이럴때도 다 방법이 있습니다.
서버가 죽었을 때 자동으로 대처할 수 있는 방법들
- 서버가 죽으면 자동으로 다시 켜기
- 현재 버전이 잘못되었다면 이전 버전으로 롤백하기
대표적으로는 이렇게 두 가지가 있습니다.
위의 두가지는 대체로 다른 양상에 의해 나타납니다.
서버가 죽으면 자동으로 다시 켜기
서버가 죽는 원인은 꽤 다양한데
그 중에 자동으로 대처가 가능한 상황을 꼽자면
“특정 동작에서 코드 에러로 인해 서비스가 죽는 경우”
정도가 있겠네요.
근본적인 해결은 그 부분을 고치는거지만,
당장 손을 쓸 수 없는 상황이라면 일단 서비스가 다시 잘 살아나기만 해도 괜찮을겁니다.
이런걸 자동으로 해주는 플랫폼이라면
- Vercel, Netflify 같은 서버리스
- Railway, Render, Fly.io 같은 PaaS
이렇게 볼 수 있겠습니다.
서버리스 방식과 PaaS 방식이 어떻게 다른지 말씀드리자면
서버리스 방식
서버리스 방식은 일정 시간 사용자의 요청이 없다면 서버가 꺼져있다가
사용자가 들어오면 그 때 켜져서 동작합니다.

사용자가 많지 않은 초창기일 땐 꺼져있는 시간만큼 비용을 아낄 수 있으니 좋죠.
다만 사용자가 늘어 항상 실행되어야 되는 수준이 된다면 계속 유지할지 고민해보셔야 할겁니다.
그래도 서비스가 죽으면 어차피 사용자가 없어도 꺼졌다 켜지니
똑같은 방식으로 다시 켜지기에 이 부분에 대해 큰 고민이 필요하진 않죠.
하지만 소켓 통신 같은걸 사용한다면 서버리스의 이점을 누릴 수 없으므로 PaaS를 사용하셔야 합니다.
PaaS 방식
내가 직접 PC나 VM을 다루지 않아도
나의 코드를 대신 실행시켜주고 관리해주는 플랫폼입니다.
서버리스와는 다르게 이쪽은 서버가 24시간 실행되고 있는 상태를 유지합니다.
PaaS 방식의 플랫폼에 배포했다면, 앱이 죽을 경우 ‘재시도 횟수’ 를 설정해서
만약 서버를 켜자마자 죽는 상황이라면 재시도 횟수만큼 시도한 뒤
이전 버전으로 롤백해주거나 하는 설정도 가능하기에
내가 손쓸 수 없는 상황일 때 자동으로 다시 켜지기도 합니다.
그리고 배포 한 코드에 문제가 있어서
실행에 문제가 생긴다면 새 버전의 배포를 막고 기존 버전으로 계속 유지해주기도 합니다.
자동으로 조치할 수 없는 경우
사실 위에 언급한 ‘서버가 꺼졌다. 혹은 멈췄다.’, ‘배포가 망가졌다’
이런거 말고는 거의 모든 경우 자동으로 조치하기 어렵습니다.
개발자들이 겪는 전통적인(?) 문제들을 예로 들어보자면

- DB가 임계점(?)을 돌파해서 느려질 때
- 사용자가 갑자기 늘었는데 현재의 구성으로는 늘어난 사용자를 감당할 수 없을 때
- 외부 서비스 장애로 인해 중요 기능을 사용할 수 없을 때
이런 경우는 자동으로 조치할 수가 없습니다.
원인을 찾고 해결해야 할 수 밖에 없죠.
다음 글에서는 그렇게 자동으로 조치할 수 없는 문제까지도
자동으로 조치하기 위한 시도는 뭐가 있을지 알아보겠습니다.

지상 최강의 개발자 쥬니니