express로 http 프로젝트를 진행시 유의사항

Posted by Everyharu
2016.07.13 17:22 IT/NodeJS

최근 API 또는 웹을 nodejs 로 많이 만들곤 합니다.
특히 express 를 많이 사용합니다. 비단 express만의 문제는 아니지만 기본적으로 많은 라이브러리나 Webserver들은 네이글 알고리즘을 기본으로 사용합니다.

express도 기본으로 네이글 알고리즘을 사용합니다. 이 알고리즘은 보통 네트워크 환경이 나쁜곳에서 사용합니다. 하지만 국내에서는 사정이 좀 다릅니다.

이 알고리즘은 nginx에서는 tcp_nodelay 라는 변수명으로도 잘 알려져 있다.
국내에서는 당연히 이건 on을 해주는것이 맞다.
인터넷환경이 쾌적하기 때문이다.
이를 off 시킨다면 모든 소켓연결에 대하여 처음에 200ms 의 대기시간을 가지게 된다.
웹서비스에서 반응속도가 느려지는것은 치명적이다.

nginx와 같은 ws단에서 nodelay를 꺼준다고해서 nodejs에서 적용되는것은 아니다.
nodejs의 express로 사용할때도 이를 꺼줘야한다.
필자도 실제로 이 200ms 때문에 골머리를 싸매다가 express에 문의를 넣어가며 발견한 사실이다. default는 delay를 가진다.

보통의 예제에서는 이를 건들지 않기때문에 문제가 생기는걸 잘 모르는 경우가 많다.
웹서비스를 할때는 초기 200ms 별로 느껴지지 않을 수 있지만 API로 사용할 경우에는 200ms는 체감상으로 느러나므로 반드시 주의한다.


이를 끄는 방법은 생각보다 간단하다.

아래의 코드를 프로젝트의 초기단계에 입력해주자.

app.use(function(req,res,next){

     req.connection.setNoDelay(true);
     next();
});

위처럼 간단하게도 req.connection.setNoDelay(true) 를 해주면된다. 


200ms나 되는 딜레이에 대한 문제를 찾지 못하고 헤매던 수많은 개발자들에게 도움이 되기를....

이 댓글을 비밀 댓글로