"8100 에서 뭔가 듣고 있네. 근데 그게 Ember 야, 아니면 Ember 자리를 차지한 유령이야?"
초록불에 숨은 함정
순진하게 만든 health check 는 이래. 적힌 port 로 연결해보고, 뭐라도 답하면 'running' 이라 적어. 그럴싸한데 조용히 틀렸어. 뭔가 그 port 에 붙어 있다는 것만 알려줄 뿐, 그게 네가 기다린 제품이란 얘긴 아니거든. 지난주에 완전히 안 죽은 옛 서버일 수도 있고, port 를 먼저 잡은 딴 앱일 수도, 임시로 띄운 자리끼움이거나 proxy 이거나, 아무 상관 없는 프로세스일 수도 있어. 뭐가 됐든 순진한 체크는 사실상 없는 서비스에 당당하게 초록불을 켜줘.
누가 답하는지 확인하는 두 가지
Firelink 는 속지 않으려고 두 가지를 봐. 첫째, 그 port 를 누가 쥐고 있나. office 의 launchd 멤버라면, 적힌 localhost port 를 그 job 이 띄운 프로세스가 쥐고 있어야 해. 그냥 열려 있는 것만으론 부족하고. 둘째, health 경로가 자기 이름을 대나. health 경로가 적힌 멤버라면 거기서 기대한 이름이 나와야 해. 응답이 사실상 '응, 나 Ember 야' 라고 말해줘야 하는 거지. 둘 다 통과하면 진짜 도는 거야. 하나라도 어긋나면 Firelink 는 뭐가 안 맞는지 붙여서 unknown 으로 적어. running 이라고 안 하고.
왜 'unknown' 이 정직한 답이냐면
이름 확인이 어긋났다고 'stopped' 라 적지도 않는 걸 봐. 뭔가 답은 하고 있으니까. 그게 맞는 놈이라는 증명이 안 될 뿐이지. 이건 '죽었다'가 아니라 '이게 자기가 말하는 그놈인지 확인이 안 된다' 야. running 이라 하면 거짓말이고, stopped 라 해도 거짓말이야. 뭐가 안 맞는지 붙인 unknown 만이 정직한 답이고, 사람이 '그럼 저 port 엔 대체 뭐가 앉아 있는 거야?' 하고 보러 가게 만드는 것도 그거야.