씨마켓 스프린트 코드 리팩토링 중에 마주한 에러였다.
에러 메세지를 그대로 복사하여 구글링했더니 친절하게도 어떤 블로그에서 에러원인을 상세히 설명하고 있었다.
구글링 전, 서버가 클라이언트에게 응답을 했는데, 또 응답을 하려고 해서(에러 메세지 말 그대로 해석해보면 헤더를 다시 세팅하려고 해서) 에러가 났다고 해석하였는데, 내 예상이 맞았다.
원인을 해결하고자 컨트롤러 측의 코드에서 리턴문을 작성해 주었다. (에러가 난 상황에서는 리턴 키워드가 없었다. 처음에는 리턴 키워드가 없이 페어분과 작성을 했었는데, 그때 테스트 통과가 안 되었던 것이 이것 때문이었던 것 같다. 페어분이랑, 어 이거 조건문 작성했는데 왜 통과해버리지? ..이렇게 대화나눴던 게 기억난다.)
컨트롤러 부분을 수정하였음에도 불구하고 같은 에러가 나서, 모델 부분의 코드를 다시 살펴보았더니, 여기서도 리턴문이 필요함을 알 수 있었다.
왜냐하면 조건문이 끝난 이후에 한번 더 콜백을 호출하고 있었기 때문이다.
한번 더 호출되는 콜백은 무조건적으로 실행되기 때문에 조건문에서 무조건 리턴이 이루어져야 한다.
-응답을 보내는 코드만으로 완전히 응답이 종료되지 않는다!!
-모델과 컨트롤러 코드 둘 다, js 함수의 형태를 띄고 있기 때문에 필요 시 반드시 리턴 키워드를 사용하여 불필요한 추가적인 응답이나, 모델에서의 콜백 호출을 막아야 한다.