[Node.js] 3. http 모듈 (+ MIME 형식)
http 모듈
: Node.js 에서 가장 기본적이고 중요한 서버 모듈이다.
HTTP 웹 서버를 생성하는 것과 관련된 모든 기능을 담당한다.
server객체, request 객체, response 객체가 있다.
자세히 알아보도록 하겠다.
1. server 객체
http 모듈의 createServer() 메소드를 사용해 생성한다.
- 메소드
listen() : 서버를 실행하고, 클라이언트를 기다린다.
사용할 포트번호(3000), 익명함수로 서버가 실행되면 실행할 코드들을 작성해 준다.
close() : 서버를 종료한다.
- 이벤트
request : 클라이언트가 서버에 요청할 때 발생하는 이벤트이다.
connection : 클라이언트가 접속할 때 발생하는 이벤트이다.
close : 서버가 종료될 때 발생하는 이벤트이다.
2. request 객체
: 클라이언트가 서버에게 전달하는 메세지(정보)를 담는 객체이다.
- 속성
method : 클라이언트 요청 방식을 나타낸다. GET, POST 와 같은 방식이 있다.
url : 클라이언트가 요청한 URL을 나타낸다.
URL은 ?전까지의 주소를 의미한다.
3. response 객체
: 서버에서 클라이언트로 응답 메세지를 전송시켜주는 객체이다.
- 메소드
writeHead() : 응답 헤더를 작성하는 메서드이다.
end() : 응답 본문을 작성하는 메서드이다.
writeHead() 메서드에는 statusCode와 headers를 작성해주어야한다.
statusCode 부분에는
headers 부분에 MIME 형식을 작성해 주어야한다.
res.writeHead(200, {'content-type':'text/html'});
MIME 형식
: 클라이언트가 받을 파일 정보의 타입이다.
text/plain : 일반적인 text 파일
text/html : html 형식 파일
text/css : css 형식 파일
text/xml : xml 형식 파일
image/jpeg : jpeg 이미지 파일
image/png : png 이미지 파일
video/mpeg : mpeg 동영상 파일
audio/mp3 : mp3 음악 파일
이제 이 객체들을 활용해서 서버를 생성해보겠다.
예제코드
const http = require('http');
// 서버 생성
http.createServer((req, res) => {
res.writeHead(200, {'content-type':'text/html'});
res.end('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>http 모듈 테스트</title></head><body style="background-color: deepskyblue;"><h2>http 모듈 테스트</h2><p>처음으로 실행하는 node.js http 서버</p></body></html>');
}).listen(3000, () => {
console.log('서버 실행중...');
});
createServer()를 하고 서버를 실행하기 위해서 server객체의 listen() 메소드를 사용해 주어야한다.
3000번이라는 포트번호를 사용하고, 함수로 console창에 서버가 실행되면 띄울 메세지를 남겨준 것이다.
localhost:3000 이라는 주소로 이제 실행된 서버를 확인할 수 있다.
위의 코드는 직접 html 코드를 res.end()에 작성해주는 방식이다.
굉장히 가독성 뿐만 아니라 작성하기에도 불편하다.
이번에는 fs 모듈을 사용해서 html 파일을 불러와 서버와 연결시켜보도록 하겠다.
test를 위한 html 파일을 만들었다.
const http = require('http');
const fs = require('fs');
// 서버 생성
http.createServer((req, res) => {
fs.readFile('test.html', (err, data)=>{
if(err){
console.log(err);
}else{
res.writeHead(200, {'content-type':'text/html'});
res.end(data);
}
})
}).listen(3000, () => {
console.log('서버 실행중...');
});
fs모듈의 비동기 방식을 사용해서 test.html 파일을 읽어들였다.
callback함수를 통해 잘 읽어졌으면 res.end(data)로 읽어들인 html파일을 전달한다.
터미널을 통해 실행을 시켜보면
잘 불러와서 띄워진 것을 확인할 수 있다.