더북(TheBook)

static 미들웨어는 요청에 부합하는 정적 파일을 발견한 경우 응답으로 해당 파일을 전송합니다. 이 경우 응답을 보냈으므로 다음에 나오는 라우터가 실행되지 않습니다. 만약 파일을 찾지 못했다면 요청을 라우터로 넘깁니다.

이렇게 자체적으로 정적 파일 라우터 기능을 수행하므로 최대한 위쪽에 배치하는 것이 좋습니다. 그래야 서버가 쓸데없는 미들웨어 작업을 하는 것을 막을 수 있습니다. 필자는 보통 morgan 다음에 배치합니다. static 미들웨어를 morgan보다도 더 위로 올리면 정적 파일 요청이 기록되지 않기 때문입니다.

기존 코드를 다음과 같이 수정합니다.

app.js

...
app.use(logger('dev'));
app.use(express.static(path.join(__dirname,'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
...

 

기존 코드에서는 morgan, json, urlencoded, cookie-parser 미들웨어를 거쳐야 static 미들웨어에 도달합니다. 요청을 기록하는 morgan을 제외하고 정적 파일을 제공하는 데 영향을 끼치지 않는 json, urlencoded, cookie-parser를 거치는 것은 낭비입니다. 따라서 순서를 바꿔주는 것이 좋습니다. 참고로 서비스에 따라 쿠키 같은 것이 정적 파일을 제공하는 데 영향을 끼칠 수도 있습니다. 그러므로 자신의 서비스에 맞는 위치를 선택해야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.