티스토리 뷰
서론
클라이언트에서 서버 쪽으로 무언가를 요청하면,
서버에서 그 요청에 대한 처리를 하고 결과를 클라이언트에게 보내준다.
이때, 클라이트와 서버 사이에 요청과 응답이 발생하는데,
정해진 규칙, "HTTP 프로토콜"이라는 약속에 따라 요청과 응답을 주고 받는다.
그것을 HTTP 요청, HTTP 응답이라 한다.
네트워크
브라우저에서 google.com 접속하여 F12 키로 개발자 도구를 열고, Network 탭을 누른다.
개발자 도구를 열어둔 채로 새로고침 해본다.

화면이 리로드 되면서 어떤 파일이 오고 갔는지 확인할 수 있다.
클라이언트에서 google.com 요청을 하면,
서버는 이 화면을 보여주기 위해 여러 파일들을 다운로드하는데, 그 내역을 확인할 수 있다.

네트워크에 로드된 목록 중 가장 상단의 www.google.com 문서를 클릭해보면 우측에 정보창 하나가 뜬다.
상단에 헤더, 미리보기, 응답 등등이 있고,
헤더를 클릭하면 일반, 응답헤더, 요청헤더가 있다.
- 일반 : 전체적인 네트워크 상태를 요약해서 보여주는 것
- 요청헤더 : google.com이라 작성하고 enter 치면 서버 요청이 되는데, 요청 정보가 담기는 부분
- 응답헤더 : 서버에서 브라우저로 응답을 보낼 때, 응답 정보가 담기는 부분
IP와 port
위 이미지에 [헤더>일반>원격 주소]에 142.250.198.164:443 이라고 적혀 있다.
앞의 142.250.198.164는 IP주소이고, 443은 port 번호이다.
인터넷 상에는 아주 많은 컴퓨터들이 있는데, 어떤 특정 서버를 찾아가기 위한 주소가 IP 이다.
그리고 그 서버 안에 여러 프로그램이 있는데, 그 중 특정한 하나의 프로그램을 찾아가는 번호가 port 번호이다.
IP 주소와 port 번호를 합쳐서 "소켓 주소" 라고 한다.
- IP 주소 : 142.250.198.164
- port 번호 : 443
- 소켓 주소 : http://142.250.198.164:443
그리고 자주 사용하는 포트 번호에는 미리 약속된 번호가 있다.
예 : 파일 전송 프로토콜(FTP) : 20,21 / 메일 발송(SMTP) : 25 / DNS 서버 : 53 / 웹(HTTP) : 80 / HTTPS : 443 등등
개발을 할 땐 위 포트 번호가 아닌 다른 번호를 사용하는 게 좋다.
Node.js의 HTTP 모듈로 서버 만들기
const http = require('http');
//서버 생성 : createServer(콜백함수)
const server = http.createServer((req, res) =>{
console.log("요청발생");
})
//서버 실행 : listen(포트번호, 콜백함수)
server.listen(3000, ()=>{
console.log("서버 실행중")
});
require 문으로 http 모듈을 가져오고,
const server = http.create( (req, res) => {} ) 로 서버를 생성한다. (req는 요청, res는 응답)
server.listen(포트번호, ()=>{}) 로 서버를 실행한다.
그리고 위 파일을 실행시켜보았다.

파일을 실행하면 server.listen의 콜백함수가 작동하여 "서버 실행중"이라는 문구가 콘솔창에 찍힌다.
이 말은, 3000번 포트의 server를 listen 하고 있겠다는 뜻으로, 3000번 port번호의 서버를 열어두겠다 라는 의미다.
브라우저에서 localhost:3000 으로 접속 해본다.

"요청발생"이라는 문구가 추가로 찍힌다.
server.listen 으로 3000번 port번호의 서버를 열었고,
localhost:3000으로 요청을 보냈더니 http.createServer 함수의 콜백함수가 작동하였다.
http.createServer의 콜백함수의 파라미터는 req와 res이고
각각 요청과 응답 데이터를 의미한다.
콜백함수 내에 console.log(req); console.log(res); 해보면 각 내용을 살펴볼 수 있다.
그중 res, 응답객체에 대해 알아보자
response 응답 객체
응답 객체는 헤더와 본문으로 구성됨.
응답 데이터는 JSON일 수도, 텍스트일 수도 혹은 다른 형식일 수도 있다.
즉, 응답 데이터가 어떤 형식인지를 헤더 안에서 처리해주어야 한다.
const http = require('http');
//서버 생성 : createServer(콜백함수)
const server = http.createServer((req, res) =>{
res.setHeader("Content-type", "text/plain"); //일반 순수한 텍스트임을 명시
res.write("Hello Node");
res.end(); //응답이 끝났음을 명시
})
//서버 실행 : listen(포트번호, 콜백함수)
server.listen(3000, ()=>{
console.log("서버 실행중")
});
위처럼 코드를 작성해 주었다.
http.createServer 의 콜백함수의 res (응답) 데이터에
setHeader 와 write 함수를 이용해 각 내용을 작성해주고,
res.end(); 하여 응답이 끝났음을 명확하게 알려주었다.

다시 서버를 실행하고, localhost:3000 으로 접속하였다.

res.write 함수를 통해 응답객체에 담아주었던 문구가 화면에 표출되었고,
res.setHeader 함수를 통해 지정한 Content-Type:text/plain 이 네트워크 탭의 응답 헤더 쪽에 잘 들어오고 있다.
라우팅
- 클라이언트의 요청에 따라 그에 맞는 함수를 실행하는 것
- nodejs.org/en/about 과 nodejs.org/en/download 가 각각 다른 화면을 보여주는 것처럼, 라우팅을 이용하면 사용자가 입력하는 URL에 따라 브라우저에 다른 화면을 보여줄 수 있다.
- 요청 메서드(GET, POST, PUT, DELETE)에 따라 처리할 함수를 다르게 연결할 수도 있다.
다시말하면,
사용자가 요청하는 경로(URL)와 선택한 요청 방식(요청 메서드)에 따라,
실행할 함수를 지정해주는 것이 라우팅이다.
const http = require('http');
const server = http.createServer((req, res) =>{
// req.url : 요청 경로
// req.method : 요청 방식
const { url, method } = req; //구조분해할당으로 변수 선언
res.setHeader("Content-type", "text/plain");
if(method === "GET"){
if(url ==="/home"){
res.write("HOME");
res.end();
}else if(url === "/about"){
res.end("ABOUT");
}else {
res.end("Not Found");
}
}
})
server.listen(3000, ()=>{
console.log("서버 실행중")
});
위처럼 작성 후 서버 실행하였다.


GET 방식으로 /home , /about 으로 요청했을 때 내용이 달라지고 있다.
express 프레임워크 사용 이유
사이트에서 처리해야 할 URL은 엄청 많은데,
위처럼 if else 구문으로 모든 경로를 처리하는 것은 좋지 않다.
node.js의 express 프레임워크는 서버를 만들고 라우팅 처리를 쉽게 도와준다.
npm install express로 설치하여 사용해보자.
https://youtu.be/vjr7zsdmAS4?feature=shared
https://youtu.be/kiGJLe1z8d8?feature=shared
'백엔드 > Node.js' 카테고리의 다른 글
| [Node.js] express로 다양한 라우팅 작성하고 테스트 하기, 썬더 클라이언트 설치 (0) | 2025.02.12 |
|---|---|
| [Node.js] express로 서버 만들고 라우팅하기, nodemon 설치, HTTP 모듈 vs express 비교 (0) | 2025.02.12 |
| [Node.js] path 모듈, file system 모듈 (0) | 2025.02.11 |
| [Node.js] 모듈이란, 2가지 모듈 시스템, 모듈 만들어보기, 코어 모듈, 글로벌 모듈 (0) | 2025.02.10 |
| [Node.js] Node.js 백엔드 기초(2, 완) - express 프레임워크 설치, express로 간단한 API 만들기 (0) | 2025.02.07 |
