본문 바로가기
Node.js

[Node.js] Server, Client

by 개발도사(진) 2023. 2. 6.

클라이언트는 서버로 요청(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