start_link라는 이름은 든든하지만, 이 호출이 반환됐을 때 클라이언트가 실제로 확인한 건 무엇일까요?
가상의 캐시 서비스에서 init이 {:ok, state, {:continue, :warm_cache}}를 반환해요. 시작 호출은 init이 반환할 때까지 기다려요. 그 뒤 continuation이 handle_continue에서 추가 작업을 해요. 시작됐다는 응답만으로 캐시 예열이 끝났다고 볼 수는 없어요. 이 GenServer 안에서 클라이언트 요청이 continuation과 동시에 처리되는 것도 아니고요.
클라이언트가 정상적인 시작 표시를 보고 곧바로 캐시 값을 요청하는 상황을 떠올려 봐요. 그 표시가 초기화 함수의 반환만 뜻한다면, 준비됐다는 말은 너무 많은 것을 약속해요. 예열이 끝날 때까지 준비 표시를 늦출까요, 아니면 Warming을 노출하고 대기할 수 있는 요청 수를 제한할까요? 대기를 허용한다면 타임아웃이 났을 때 서비스의 대기 작업에서 무엇을 제거해야 할까요?
감독 아래 재시작할 때도 같은 결정이 필요해요. 프로세스를 다시 시작하는 것과 사용 가능한 캐시를 복구하는 것은 별개의 약속이에요. 준비됐다는 말은 클라이언트가 실제로 필요로 하는 조건에 남겨 두겠어요.