클라이언트는 서버로 요청(request)를 보내고 서버는 이에 대한 응답(response)를 클라이언트에게 보낸다.
이 요청과 응답은 이벤트 방식으로 구현되는데, 요청에 대하여 수행할 작업을 이벤트 리스너로 등록해 두어야 한다는 의미이다.
CreateServer
http 모듈에 있는 createSever method로 요청에 대한 콜백 함수를 작성할 수 있다.
const http = require('http');
http.createServer((req,res)=>{
//여기에 작성
});
req 객체는 요청(request), res 객체는 응답(response)이다.
res.write() : 클라이언트로 보낼 데이터
res.end() : 인자가 있다면 인자를 클라이언트로 보내고 응답 종료
localhost: 현재 컴퓨터의 내부 주소.(=컴퓨터의 로컬 IP)
port: 서버 내에서 프로세스를 구분. 서버는 프로세스마다 다른 port를 할당하여 요청을 구분한다. IP주소 뒤에 : 로 붙여 사용한다.
다른 프로세스에 할당된 port를 사용하려고 하면 포트 번호 에러가 발생한다.(Error: listen EADDRINUSE :::portNum)
listen method : 서버를 대기 상태로 만들어 요청을 받고 처리할 수 있게 한다. 첫 번째 인수는 포트 번호이다.
아무래도 책에 있는 예제를 갖다 붙히는 건 나와 방문객들에게 별 도움도 안 될 뿐더러 양심에도 찔리니까 잠시 책을 덮고 스스로 재구성해 봤다.
const http = require('http');
http.createServer((req, res) => {
res.write("<h1>개발도사 무도사</h1>");
res.write("<h2>게임도 잘 만들고 서버도 잘 만든다</h2>");
res.end("<h3>개발도사무도사 화이팅!</h3>");
}).listen(8080, () => {
console.log("개발도사 서버 준비완료");
});
http 모듈을 import하고, http모듈의 createServer method를 이용해 응답에 대한 요청을 만들고, listen() method를 통해 8080포트를 할당하고 실행 시 vscode의 console에는 '개발도사 서버 준비완료' 를 띄우기로 했다.
이는 한글을 표현하기 위해 UTF-8을 사용한다는 점을 명시해주지 않아서 일어나는 문제였다.
이 경우에는 response 객체의 writeHead method를 사용해서 UTF-8을 사용하겠다는 것을 명시해주어야 한다.
writeHead method: 헤더 정보를 응답에 작성해서 보낸다. 첫 번째 인자는 상태 코드, 두 번째 인수는 연관 배열로 나타낸 헤더 정보이다.
따라서 코드를 다음과 같이 수정하면 한글 깨짐 현상을 없앨 수 있다.
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html;charset=UTF-8' });
res.write("<h1>개발도사 무도사</h1>");
res.write("<h2>게임도 잘 만들고 서버도 잘 만든다</h2>");
res.end("<h3>개발도사무도사 화이팅!</h3>");
}).listen(8080, () => {
console.log("개발도사 서버 준비완료");
});
이번에는 똑같은 창을 띄울 건데, res.write로 한 줄씩 작성하지 않고 따로 html 파일을 만든 후에 이를 띄울 것이다. 이 경우에는 파일을 읽어오기 위해서 fs module을 불러와야 한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>개발도사 무도사</h1>
<h2>게임도 잘 만들고 서버도 잘 만든다</h2>
<h3>개발도사 무도사 화이팅!</h3>
</body>
</html>
이 html 파일을 만들어서 Server/serverEx.html로 저장하고
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
fs.readFile('./Server/serverEx.html', (err, data) => {
if (err) {
throw err;
}
res.end(data);
});
}).listen(8080, () => {
console.log("8080 포트에서 서버 대기 중!");
});
을 실행하면, 똑같은 화면을 볼 수 있다.
'Node.js' 카테고리의 다른 글
[Node.js] 내장 객체 _ exports, (0) | 2023.02.07 |
---|---|
[Node.js] REPL, Module, 내장 객체_1 (0) | 2023.02.03 |
[Node.js] 기본_1 (0) | 2023.02.01 |