5️⃣ Express.js로 강력한 웹 애플리케이션 구축하기 🌐
지금까지 우리는 Node.js의 내장 http 모듈을 사용하여 웹 서버를 만드는 방법을 배웠습니다. 하지만 실제 애플리케이션을 http 모듈만으로 개발하는 것은 매우 번거롭고 많은 반복 작업을 요구합니다. 예를 들어, 수많은 URL 경로(라우트)를 관리하고, 요청 본문을 파싱하며, 쿠키를 처리하는 등의 작업을 직접 구현해야 합니다.
이러한 불편함을 해결하고 개발자가 비즈니스 로직에 더 집중할 수 있도록 도와주는 것이 바로 웹 프레임워크입니다. 그리고 Node.js 생태계에서 가장 인기 있고 사실상의 표준으로 여겨지는 웹 프레임워크가 바로 Express.js 입니다.
Java 개발자를 위한 비유:
Express.js는 Java 생태계의 Spring MVC나 과거의 Struts와 같은 역할을 합니다. 즉, 웹 애플리케이션 개발에 필요한 공통적인 기능들(라우팅, 요청/응답 처리, 템플릿 연동 등)을 미리 구현해놓은 틀(framework)입니다. 다만, Spring이 IoC 컨테이너, AOP 등 수많은 기능을 포함하는 거대하고 종합적인 프레임워크인 반면, Express.js는 "최소한의 기능을 갖춘 유연한(minimal and flexible)" 프레임워크를 지향합니다. 필요한 기능은 미들웨어(middleware)라는 메커니즘을 통해 선택적으로 추가하여 사용하는 방식입니다.
이 챕터에서는 Express.js를 사용하여 웹 서버를 구축하고, 라우팅, 미들웨어, 데이터 처리 등 웹 애플리케이션의 핵심 구성 요소들을 어떻게 다루는지 배워보겠습니다.
Express.js 소개 및 설치
1. Express.js란?
Express.js는 Node.js의 http 모듈 위에 구축된 웹 애플리케이션 프레임워크입니다. 다음과 같은 주요 기능들을 통해 웹 및 API 개발을 빠르고 쉽게 만들어줍니다.
- 강력한 라우팅: HTTP 메소드(GET, POST 등)와 URL 패턴을 기반으로 요청을 처리할 핸들러를 쉽게 지정할 수 있습니다.
- 미들웨어(Middleware): 요청 처리 파이프라인에 다양한 기능을 끼워넣을 수 있는 강력한 메커니즘을 제공합니다. (로깅, 인증, 요청 본문 파싱 등)
- 간소화된 요청/응답 객체: Node.js의 기본 req, res 객체를 확장하여 유용한 헬퍼 메소드들을 추가로 제공합니다.
- 템플릿 엔진 연동: Pug, EJS, Handlebars 등 다양한 템플릿 엔진과 쉽게 통합하여 동적인 HTML 페이지를 생성할 수 있습니다.
2. Express.js 설치
Express.js는 외부 패키지이므로 NPM을 통해 설치해야 합니다.
- 먼저 프로젝트 폴더를 만들고 npm init -y 명령어로 package.json 파일을 생성합니다.
Bash
mkdir express-app cd express-app npm init -y - npm install 명령어로 Express를 설치합니다. 이 프로젝트는 Express 위에서 동작하므로, 개발 의존성이 아닌 일반 의존성(dependencies)으로 설치합니다.
설치가 완료되면 package.json 파일의 dependencies 섹션에 express가 추가되고, node_modules 폴더 안에 Express 관련 파일들이 생성된 것을 확인할 수 있습니다.Bash
npm install express
3. Express로 "Hello World" 서버 만들기
이제 Express를 사용하여 가장 간단한 웹 서버를 만들어 보겠습니다. app.js (또는 index.js) 파일을 생성하고 다음 코드를 작성하세요.
// 1. express 모듈을 가져옵니다.
const express = require('express');
// 2. express 애플리케이션 객체를 생성합니다.
const app = express();
// 3. 포트 번호를 설정합니다.
const port = 3000;
// 4. 라우팅 설정: HTTP GET 요청이 루트 경로('/')로 들어올 때 처리할 핸들러
// req: 요청 객체 (Information about the incoming request)
// res: 응답 객체 (Used to send a response back to the client)
app.get('/', (req, res) => {
// res.send() 메소드는 응답을 보내고 연결을 종료합니다.
// Content-Type 헤더도 자동으로 설정해줍니다. (문자열이면 text/html)
res.send('Hello, Express.js World!');
});
// 5. 서버를 시작하고 특정 포트에서 요청을 수신 대기합니다.
app.listen(port, () => {
console.log(`Express server listening at http://localhost:${port}`);
});
http 모듈과 비교해보기:
이전 http 모듈로 만들었던 "Hello World" 서버와 비교해볼까요?
- http.createServer() 대신 express()로 앱 객체를 생성합니다.
- URL과 HTTP 메소드를 확인하는 if (req.url === '/' && req.method === 'GET') 같은 조건문 대신, app.get('/', ...) 이라는 훨씬 직관적인 메소드를 사용합니다. 이를 라우팅이라고 합니다.
- res.writeHead(), res.end() 등을 직접 호출하는 대신, res.send() 라는 편리한 메소드를 사용하여 응답을 보냅니다.
서버 실행하기:
터미널에서 다음 명령어로 서버를 실행합니다.
node app.js
이제 웹 브라우저에서 http://localhost:3000으로 접속하면 "Hello, Express.js World!" 메시지를 볼 수 있습니다.
Express를 사용함으로써 코드가 훨씬 더 간결해지고, 무엇을 하는 코드인지 명확하게 이해하기 쉬워졌습니다. 이것이 바로 프레임워크를 사용하는 이유입니다.
'프로그래밍 > NODEJS 강좌 BY GEMINI' 카테고리의 다른 글
| 미들웨어 (Middleware) 활용하기 🔗 (1) | 2025.06.16 |
|---|---|
| 라우팅 (Routing) 정의하기 🚦 (1) | 2025.06.12 |
| Async/Await: 동기 코드처럼 비동기 코드 작성하기 MAGIC ✨ (1) | 2025.06.10 |
| 프로미스(Promises)로 우아하게 비동기 처리하기 ✨ (2) | 2025.06.09 |
| 콜백 함수 (Callbacks)와 콜백 지옥 (Callback Hell) 😫 (1) | 2025.06.05 |