강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

TAESUN님의 프로필 이미지
TAESUN

작성한 질문수

제대로 배우는 Express.js: Part1 기초부터 심화까지 [기초편]

첫 Node.js 서버 만들기 - Hello Server!

res.writeHead 질문

해결된 질문

작성

·

26

·

수정됨

0

Express.js를 사용하면

res.writeHead(200, { "content-type": "text/html"})

위와 같은 writeHead가 자동으로 들어가게 되나요?

또 node는 Express.js와 달리 여러 에러 400, 500에 대해 일일이 writeHead를 달아줘야 하는지도 궁금해요

답변 1

1

nhcodingstudio님의 프로필 이미지
nhcodingstudio
지식공유자

안녕하세요, Taejin Kim님! 질문 주셔서 감사합니다.

사실 네이티브 Node.js로 하나하나 코드를 짜다 보면 "이런 반복적인 것까지 내가 다 적어야 하나?" 싶은 순간들이 생기기 마련인데, 바로 그 가려운 부분을 시원하게 긁어주는 게 Express의 핵심입니다. 질문하신 헤더 설정 부분부터 비교해 보면 그 차이가 정말 명확하게 체감되실 거예요.

먼저 Express를 사용하기 전인 Before 단계, 즉 순수 Node.js 환경에서는 응답을 보낼 때마다 아래와 같이 상태 코드와 콘텐츠 타입을 개발자가 직접 손으로 하나하나 작성해야만 했습니다.

// 순수 Node.js (Before)
res.writeHead(200, { "Content-Type": "text/html" });
res.end("<h1>Hello World</h1>");

하지만 Express를 사용하는 After 단계로 넘어가면 res.send()res.json() 같은 메서드가 이 과정을 내부적으로 싹 다 대신 처리해 줍니다. 덕분에 우리는 아래처럼 핵심 데이터에만 집중할 수 있게 되죠.

// Express.js (After)
res.send("<h1>Hello World</h1>");

이 코드가 실행되는 순간 Express는 우리가 보내는 데이터가 HTML 문자열인지, 아니면 객체 형태의 JSON인지 똑똑하게 판단해서 상태 코드 200과 그에 딱 맞는 Content-Type을 알아서 붙여 응답을 보냅니다. 개발자가 일일이 "이건 HTML이야"라고 설명할 필요가 없어지는 셈입니다.

이러한 간결함의 진가는 에러 처리를 할 때 훨씬 더 크게 느껴집니다. Express를 쓰지 않는다면 요청 경로를 찾지 못하거나 서버에 문제가 생겼을 때, 매번 아래와 같이 if-elsetry-catch를 동원해 res.writeHead를 직접 명시해야 합니다.

// 순수 Node.js 에러 처리 (Before)
if (req.url === '/') {
    res.writeHead(200, { "Content-Type": "text/html" });
    res.end("메인 페이지");
} else {
    // 404 에러를 직접 작성하지 않으면 클라이언트는 무한 대기에 빠집니다.
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("Not Found");
}

만약 이 작업을 깜빡한다면 클라이언트는 서버가 죽은 건지 응답이 오는 중인 건지도 모른 채 무한정 대기에 빠지게 됩니다. 반면 Express는 기본적인 에러 핸들러를 품고 있어서, 아래와 같이 라우팅에 없는 곳은 404, 코드 실행 중 터진 에러는 500으로 알아서 응답을 보내주는 안전장치 역할을 합니다.

// Express.js 에러 처리 (After)
app.get('/', (req, res) => {
    res.send("메인 페이지");
});
// 정의되지 않은 경로나 내부 에러는 Express가 알아서 writeHead를 처리해 응답합니다.

이 상황을 식당 주문에 비유하면 더욱 직관적인데, 순수 Node.js가 주방장이 재료 손질부터 서빙, 메뉴 설명까지 혼자 다 하는 1인 식당 시스템이라면 Express는 든든한 매니저가 있는 프랜차이즈 매장과 같습니다. 1인 식당에서는 접시를 꺼내고 음식을 담아 전달하는 모든 과정을 주방장이 직접 챙겨야 하고 손님이 없는 메뉴를 찾아도 직접 설명해야 하지만, 프랜차이즈에서는 주방에서 "음식 나갑니다"라고 신호만 주면 매니저가 알아서 적절한 접시를 골라 세팅해 서빙하고 없는 메뉴 주문이 들어와도 정해진 매뉴얼에 따라 직원이 자동으로 응대하는 것과 같습니다.

결론적으로 Express는 res.send()를 쓸 때 헤더를 자동으로 설정해 주어 코드를 훨씬 간결하게 만들어 주며, 개발자가 일일이 챙기기 힘든 에러 상황까지 안전하게 방어해 줍니다. 물론 특수한 상황에서 내가 원하는 상태 코드를 보내고 싶을 때도 아래와 같이 훨씬 읽기 쉬운 문법을 제공하니 효율성 면에서 비교가 안 될 정도로 강력합니다.

// Express에서 원하는 에러 코드를 직접 보낼 때
res.status(404).send('페이지를 찾을 수 없습니다!');

참고해주세요!

TAESUN님의 프로필 이미지
TAESUN
질문자

자세한 설명 너무 도움이 되네요 감사합니다!

TAESUN님의 프로필 이미지
TAESUN

작성한 질문수

질문하기