1. 요청과 응답 이해하기
- 클라이언트와 서버는 요청(Req:Request)와 응답(Res:Response)로 구성 되어있으며, 클라이언트로 요청을 보내고 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답을 보낸다.
- 즉 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다.
- 요청과 응답은 이벤트 방식이라고 생각
- 클라이언트로부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해야 함.
/server0.js
const http = require('http'); //http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으므로 http 모듈을 사용
http.createServer((req, res) => {
// 여기에 어떻게 res 할지를 작성을 한다.
});
- http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으므로 http 모듈을 사용
- http 모듈에는 createServer 메서드가 있다.
- 인수로 요청에 대한 콜백 함수를 넣을 수 있으며, 요청이 들어올 때마다 매번 콜백 함수가 실행된다. 따라서 이 콜백 함수에 응답을 적으면 된다.
- createServer의 콜백 부분을 보면 req와 res 매개변수가 있다.
- 보통 request를 줄여 req라고 표현하고, response를 줄여 res라고 표현합니다.
- req 객체는 요청에 관한 정보들을, res 객체는 응답에 관한 정보들을 담고 있다.
- 아직은 코드를 실행해도 아무 일도 일어나지 않는다.
- 상단에 주석 넣는 란에 요청에 대한 응답도 넣어주지 않았고 서버와 연결하지도 않았기 때문
- 다음 예제에서 응답을 보내는 부분과 서버에 연결하는 부분을 추가해보겠습니다.
/server1.js
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
/*
res.writeHead는 응답에 대한 정보를 기록하는 메서드 :
첫 번째 인수로 성공적인 요청임을 의미하는 200을,
두 번째 인수로 응답에 대한 정보를 보내는데
콘텐츠의 형식이 HTML임을 알리고 있다.
또한 한글 표시를 위해 charset을 utf-8로 지정했다.
이 정보가 기록되는 부분을 **헤더**(Header)라고 부른다.
*/
res.write('<h1>Hello Node!</h1>');
/*
res.write 메서드의 첫 번째 인수는 클라이언트로 보낼 데이터.
지금은 HTML 모양의 문자열을 보냈지만 버퍼를 보낼 수도 있다.
또한, 여러 번 호출해서 데이터를 여러 개 보내도 된다.
데이터가 기록되는 부분을 본문(Body)이라고 부른다.
*/
res.end('<p>Hello Server!</p>');
/*
- res.end는 응답을 종료하는 메서드
만약 인수가 있다면 그 데이터도 클라이언트로 보내고 응답을 종료
*/
})
.listen(8080, () => { // 서버 연결
/*
createServer 매서드 뒤에 listen메서드를 붙이고
클라이언트에 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣는다.
이제 이 파일을 실행하면 서버는 8080 포트에서 요청이 오기를 기다린다.
*/
console.log('8080번 포트에서 서버 대기 중입니다!');
});
- 상단의 코드를 넣고 node server1를 입력하여 파일을 실행한다.
- 실행화면