본문 바로가기

Ruby

[Ruby] at_exit

루비 Sinatra 의 간단한 예제 코드는 아래와 같습니다.

위의 코드를 실행하면 바로 웹 서버가 실행되는데, 이 동작은 약간 이상합니다.


분명히 라우팅만 지정했을 뿐이고, 서버를 실행하는 코드는 아무데도 없습니다. 파일의 끝이 나와서 프로그램이 꺼져야 하는데, 꺼지지 않고 계속 서버가 실행됩니다.


이는 at_exit를 이용한 트릭이며, 사용자가 직접 서버를 켜는 코드를 작성하지 않아도 되도록 도와줍니다. 

at_exit는 앱이 종료될 때 실행되는 콜백을 지정하는 함수입니다. 단순히 블록 하나만 넘겨주면 되며, 사용법은 아래와 같습니다.


at_exit를 여러번 실행하면, 콜백이 교체되는것이 아니라 '추가'됩니다. 아래의 코드는 RunServer를 3번 실행시킵니다.


위에서 말했듯이 Sinatra는 이 방법을 이용한 트릭을 사용합니다. 'get' 등을 호출하면 어딘가에 정보를 저장하고 있다가, at_exit에서 서버를 실행하는 것 입니다.