http 모듈로 서버 생성하기
const http = require('http'); // http 모듈 불러오기
const hostname = '127.0.0.1'; // 서버의 주소는 호스트 네임이라 한다.
const port = 3000; // 서버의 여러 포트 중 3000번을 열어서 클라이언트와 통신
// http의 createServer 메서드로 서버 객체 생성
// createServer에 전달되는 콜백함수는 클라이언트가 접속했을 때 동작함
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n'); // end 메서드를 통해 문자열을 클라이언트에 전송
});
// server의 listen 메서드는 서버를 요청 대기 상태로 만들어 줌
// 서버는 클라이언트의 요청을 받기 위해서 종료하지 않고 계속 대기 함
// listen 함수는 포트, 호스트네임, 콜백함수를 파라미터로 받음
// 여기서 콜백은 listen 메서드가 완료되면 동작하는 함수
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
로컬 서버, 포트 3000번에 서버를 생성했다.
http 요청으로 확인하려면 터미널에서 아래 명령어 입력
curl -X GET 'localhost:3000'
Hello World 가 출력되는 것을 확인할 수 있다.
서버의 주소를 호스트네임이라고 합니다. 서버의 여러 포트중 3000번 포트를 통해 클라이언트와 통신합니다. 요청대기상태: 서버가 클라이언트의 요청을 받을수 있게 종료하기 않고 계속 대기하도록 하는 함수. listen() 함수로 동작합니다.
단, 이렇게 만든 서버는 root 경로에만 접속이 가능하다.
사용자가 자신의 요청에 따라 다른 경로로 접속할 수 있도록 라우팅을 추가해줘야 한다.
라우팅 추가하기
유저의 접속하는 url을 알고자 한다면 req 객체를 확인하면 된다.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
console.log(req.url);
if (req.url === '/'){
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\\n');
} else {
res.statusCode = 404;
res.end('Not Found\\n');
}
});
console.log(typeof server)
server.listen(port, hostname, () => {
console.log(`Server running at <http://$>{hostname}:${port}/`);
});
url 에 따라 다른 응답을 하도록 createServer의 콜백 함수를 수정했다.
서버에 http 요청을 하게 되면 url에 따라 다른 응답을 받을 수 있다. 만약 응답을 좀 더 상세히 보고 싶다면 -v 옵션을 추가해주면 된다.
curl -X GET 'localhost:3000/users' -v
유효하지 않은 경로에 접속한 결과는 아래와 같다.
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /users HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Thu, 25 Nov 2021 21:17:43 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Content-Length: 10
<
Not Found
* Connection #0 to host localhost left intact
* Closing connection 0
단, 이렇게 경로에 따라 분기문을 추가한다면 중복 코드가 많아지고, 코드가 길어짐에 따라 관리하기도 어렵다.
다음 포스팅에서는 express 프레임워크를 활용해보자.
'Javascript' 카테고리의 다른 글
map()과 forEach()차이 (0) | 2022.01.07 |
---|---|
Node.js - Express로 서버 만들기 (0) | 2021.12.14 |
Node.js - 모듈/동기/비동기 (0) | 2021.12.14 |
코어 자바스크립트 - 클래스 (0) | 2021.11.18 |
코어 자바스크립트 - 프로토 타입 (0) | 2021.11.18 |