Study/Node.js

[새싹x코딩온] 웹 개발자 부트캠프 과정 4주차 회고 | node.js 로 웹 서버 만들기(http 모듈 사용)

다니니니 2024. 6. 7. 18:39
728x90

1. 들어가며

  • Node.js의 모듈 중 http 모듈을 사용해서 웹 서버를 만들어보자

2. Node.js를 이용한 웹 서버 만들기

Node.js 를 통해서 서버를 만드는 방법은 크게 두가지가 있다.

하나는 http 모듈을 사용하는 것이고 다른 하나는 Express를 사용하는 것이다.

Express 를 이용하는 방법은 다음 시간에 할 것 같고 이번에는 http 모듈을 사용해서 웹 서버를 만드는 방법을 해봤다.

 

http 모듈로 웹 서버 만들기 

노드에 기본적으로 있는 http 모듈을 사용하면 웹 서버 기능을 담당하는 서버 객체를 만들 수 있다.

const http = require('http');

// 웹 서버 객체 만들기
const server = http.createServer();

// 웹 서버를 시작하여 8000번 포트에서 대기
server.listen(8000, function(){
 console.log('웹 서버 실행')
}

먼저 http 모듈을 require() 메서드를 사용해서 불러온다.

이 http 객체의 createServer() 메서드를 호출하면 서버 객체가 반환된다.

이 서버 객체의 listen() 메서드를 호출하면 웹 서버가 실행하여 대기시킨다.

listen() 메서드의 첫번째 파라미터는 포트번호, 두번째 파라미터는 콜백함수다.

첫번째 파라미터로 받은 포트번호에서 클라이언트의 요청을 대기하고, 두번째 파라미터로 받은

콜백함수를 웹 서버가 시작하면 호출한다.

 

createServer() 를 이용해서 요청에 대한 이벤트 처리를 할 수 있다.

const http = require('http');
http.createServer(function(req, res){ // req - request(요청) , res - response(응답)
    res.writeHead(200, {'Content-Type' : 'text/html'}) 
    res.write(`<h1>Hello</h1>`)
    res.end(`<h2>Hello World</h2>`)
}).listen(8080, ()=>{
    console.log('8080포트에서 실행 중');
});

 

첫번째 파라미터로 request, 두번째 파라미터로 response를 받아온다 

함수 내에서 Response 객체를 이용해서 클라이언트로 응답을 보낸다.

응답을 보낼 때 사용하는 메서드는 아래와 같다.

메서드 이름 설명
 writeHead 응답으로 보낼 헤더를 만든다
 write 응답 본문(body) 데이터를 만든다.
 end 응답 본문 작성 후 응답을 종료한다

 

writeHead() 메서드의 첫번째 인자로는 statusCode 를 적는다. 

(200번이면 정상적인 응답이다! 응답코드에 대한 내용은 mdn을 참고하면 될 것 같다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status)

 

Content-Type은 문서가 어떤 타입인지 알려준다.

Content Type 값 설명
text/plain 일반 텍스트 문서
text/html html 문서
text/css css 문서
text/xml xml 문서
image/png, image/jpeg png 파일, jpeg 파일
video/mpeg, audio/mp3 mpeg 비디오 파일, MP3 음악 파일
application/zip zip 압축 파일

 

클라이언트에서 요청 시 파일 읽어서 응답하기

fs 모듈은 파일 시스템을 관리해주는 모듈이다. 이 모듈과 readFile() 메서드를 사용해서 

파일을 읽어서 응답할 수 있다.

const http = require('http')
// 파일 모듈 불러오기
// fs -> 파일 시스템을 관리해주는 모듈
const fs = require('fs')

const server = http.createServer((req, res)=>{
    res.setHeader('Content-Type', 'text/html');
    // readFile 파일을 읽어오는 메서드
    fs.readFile('./views/index.html', (err, data)=>{ 
        // err -> 에러가 났을 경우, date -> 정삭적으로 불러왔을 경우
        if(err){ // 에러가 났을 경우
            console.log(err);
            res.end();
        } else { // 정상적으로 불러왔을 경우
            res.end(data)
        }
    })
});
server.listen(8000, ()=>{
    console.log(`8000번 서버 실행`);
});

 

readFile() 메서드는 파일을 모두 읽으면 콜백 함수 안의 data 객체로 파일 내용을 전달하며

콜백 함수 안에서 응답 객체의 메서드(여기서는 end())를 사용해서 파일 내용을 클라이언트로 전송한다.

 

3. 마치며

이제 서버를 배우기 시작하며 node.js 로 서버를 만드는 법을 배웠다.

좀 더 이론적인 얘기가 나와서 낯설면서도 머리가 아프면서도 배우는 것이 재미있어진다.

다음 시간에는 express 로 서버를 만드는 법을 배운다던데 기대된다.

 

4. Reference

1. 코딩온 강의 자료

 

2. Node.js 프로그래밍

https://product.kyobobook.co.kr/detail/S000001900875

 

Do it! Node.js 프로그래밍 | 정재곤 - 교보문고

Do it! Node.js 프로그래밍 | [Node.js 프로그래밍]은 누구나 쉽게 접근할 수 있는 자바스크립트 언어로 웹 서버를 만들며 서버 개발에 입문할 수 있도록 구성한 책이다. 책에서 다루는 코드는 Node.js의

product.kyobobook.co.kr

3. https://velog.io/@gkrba1234/Node.Js%EC%97%90%EC%84%9C-HTTP-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Node.Js에서 HTTP 모듈 사용하기

Node.js는 자바스크립트 런타임 플랫폼이라고 하는데 쉽게 말해서 서버를 구축하는 데 도움이 되는 툴이다. 오늘은 이 node.js를 통해서 서버를 구축하고자 한다. node.js는 HTTP의 도구를 제공하기 때

velog.io

4.https://nodejs.org/en/learn/modules/anatomy-of-an-http-transaction

 

Node.js — Anatomy of an HTTP Transaction

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

728x90