Node.js와 Express.js 서버 개발 – 포트, 라우팅, chunk/buffer 완전 이해
2025. 7. 2. 13:55ㆍJavaScript/Node.js
오늘은 Node.js와 Express.js를 활용한 웹 서버 개발 전반에 대해 심층적으로 학습했습니다. 특히, HTTP 통신 구조, 라우팅의 원리, 포트와 경로의 관계, chunk/buffer 개념, 그리고 브라우저 자동 실행 방법까지 실습 중심으로 익혔습니다. 이 글은 실전 코딩과 함께 배운 개념들을 기반으로, 백엔드 개발자로서 반드시 이해하고 있어야 할 핵심 내용을 모두 담고 있습니다.
1️⃣ 용어 및 개념 정리
용어설명
| JavaScript | 원래는 웹 브라우저에서만 실행되던 프로그래밍 언어 |
| Node.js | JavaScript를 브라우저 밖(서버 환경)에서도 실행 가능하게 만든 런타임 환경 |
| Express.js | Node.js 위에서 동작하는 웹 서버 프레임워크. 라우팅, 응답, 미들웨어 등을 간편하게 처리 |
| 포트(Port) | 서버가 외부와 통신하는 통로. 클라이언트는 특정 포트로 요청을 보냄 |
| 라우팅(Routing) | 특정 URL 경로로 요청이 들어왔을 때 어떤 동작을 수행할지 정하는 방식 |
| chunk | 클라이언트가 전송하는 데이터를 잘게 나눈 조각 |
| buffer | chunk 조각을 담고 있는 이진 데이터 구조체 (Node.js 내부 처리 구조) |
2️⃣ Express 설치 및 서버 생성
✅ 설치 방법
npm init -y # package.json 생성
npm install express # express 설치
✅ 기본 서버 코드 구조
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('express page');
});
app.listen(3001, () => {
console.log('3001 port waiting...');
});
이 코드를 통해 http://localhost:3001/ 경로에서 "express page"가 출력됩니다.
🔎 코드 분석
- require('express'): 외부 모듈 불러오기
- app.get('/'): 루트 경로(/)에 GET 요청이 들어올 때 콜백 함수 실행
- res.send(): 클라이언트에 응답 전송
- app.listen(3001): 3001번 포트에서 요청을 기다림
3️⃣ app.get('/')가 작동하는 이유
- app.listen(3001)은 서버의 입구 역할을 하고,
- app.get('/')은 그 안에서 URL이 /인 요청만 처리함
- 두 개가 함께 존재해야 http://localhost:3001/이 정상 작동함
app.listen(3001);
app.get('/');
→ 이렇게 구성되면 브라우저에서 포트번호를 통해 들어온 요청 중 / 경로에 해당하는 요청만 처리됨
4️⃣ 개발 환경 vs 배포 환경
| 환경 | 설명 |
| 개발 환경 | 로컬 PC에서 localhost:3001처럼 포트번호를 직접 명시하여 사용 |
| 배포 환경 | AWS, Netlify, Vercel 등에서 보통 80/443 포트를 자동 사용 → myapp.com으로 접속 가능 |
5️⃣ 터미널에서 서버 실행 명령어
node ex01.js # 기본 실행
npx nodemon ex01.js # 코드 변경 시 자동 재실행 (권장)
nodemon이 없으면 먼저 설치:
npm install -g nodemon
ctrl + c로 서버 실행 중지 가능
6️⃣ 터미널에서 브라우저 열기 (Bash 환경)
Git Bash에서는 start 명령어 대신 explorer 사용
explorer http://localhost:3001/
또는 Express 서버 코드 안에 삽입하여 자동 브라우저 열기:
const { exec } = require('child_process');
exec('explorer http://localhost:3001');
7️⃣ req.on('data')와 req.on('end') 이해
Node.js에서 POST 요청 처리를 위해 http.createServer()로 만든 서버에서는 req 객체에서 데이터가 조각(chunk) 단위로 들어옵니다.
let body = "";
req.on('data', (chunk) => {
body += chunk;
});
req.on('end', () => {
console.log('받은 전체 데이터:', body);
});
- data: 데이터 조각이 들어올 때마다 발생
- end: 모든 조각 수신이 완료되었을 때 발생
📌 왜 누적해야 할까?
데이터는 한 번에 다 오지 않기 때문 (네트워크의 특성) → body += chunk 로 누적해서 전체 본문을 완성하는 것
8️⃣ chunk와 buffer 개념
| 개념 | 설명 |
| chunk | 네트워크에서 전송되는 데이터의 조각 (예: id=abc) |
| buffer | 이진 데이터로 구성된 chunk를 담는 구조체 (Node.js 내부에서 사용) |
예시:
req.on('data', (chunk) => {
console.log(typeof chunk); // object (Buffer)
console.log(chunk.toString()); // id=jinwoo&pw=1234
});
9️⃣ cd .. vs cd ../ 차이
| 명령어 | 설명 |
| cd .. | 현재 폴더의 부모 디렉토리로 이동 (기본 이동) |
| cd ../ | 부모 디렉토리를 경로 연결용으로 사용 (예: cd ../images) |
핵심 요약:
- 기능은 같지만 사용 목적과 문맥에 따라 쓰임이 다름
- 실무에서는 cd ..는 단독 이동용, ../는 경로 연결용으로 자주 사용됨
✅ 오늘 학습 핵심 요약
- Node.js는 JavaScript 런타임, Express.js는 웹 프레임워크
- 서버는 listen(포트)로 열고, 라우팅은 get('/경로')로 처리
- POST 요청 처리 시 data, end 이벤트를 통해 본문 수신
- 데이터는 chunk로 오고, Buffer로 구성됨 → 문자열로 누적 필요
- Git Bash에서는 브라우저 자동 실행 시 explorer 명령어 사용
- 디렉토리 이동 시 cd ..와 cd ../는 기능은 같지만 문맥이 다름
다음 학습 주제: Express 미들웨어, RESTful API 설계, JWT 인증 처리
'JavaScript > Node.js' 카테고리의 다른 글
| [jQuery + Ajax]실습으로 완전히 체득한 jQuery AJAX + 영화 API 연동 (2) | 2025.06.26 |
|---|