위의 내용을 정리해보자면, 1. Handler를 등록하는 단계, 2. Listen 을 하면서 connection 을 만드는 단계 3. 2에서 생성된 connection을 1에서 등록한 함수와 매핑해서 실제 응답을 제공하는 단계로 구성된다.
2번에서 3번으로 넘어가는 단계에서 go 가 호출된다.
코드 상의 특이한 점은 Listen 을 호출하면 별도의 Listener 인터페이스가 반환되고 Listener 에 Serve를 호출하는 구조로 되어있다는 점이다.
당연하다고 생각하면 당연할수도 있지만, connection 을 생성하는 loop를 Listener 안쪽에 넣음으로써 추후 확장을 용이하게 해놓았다.
개인 생각 : 만약 connection을 맺는 속도 및 connection을 제어하는 알고리즘을 별도로 구성하게 된다면 (예를 들어, 실제 tcp socket을 열고, http listen 을 하는 구조가 아닌, 성능상의 이슈로 pull 방식으로 request를 처리해야하는 일이 있다면) Listener를 별도로 정의해주고 httpHandler를 등록하는 식으로 별도의 handler 분리 없이 Listener Layer만 고치면 될것 같다.