Net 모듈 사용해보기
NodeJS에서 기본적으로 제공하는 '내장모듈'
- path
- fs
- net
const net = require("net")
console.log(net)
send vs sendFile
send : 매개변수에있는 내용을 그대로 body에 담아서 보내는 역할이다
sendFile : 특정파일에있는 내용을 버퍼로 읽은 다음에, 그 내용을 바디로 만들어서 보내는것
- 파일을 읽는 메서드
- 읽은 파일의 내용을 response message를 만드는 코드
readFile
fs(File System) 의 약자로, fs모듈을 설치하면 PC의 파일을 읽거나 저장하는 등의 일을 할 수 있게 도와준다.
node.js 에는 컴퓨터의 계산기 기능, 메모장 기능 처럼 기본적으로 세팅되어있는 내장 모듈이 있다.
자바스크립트파일을 불러오기 위해 밑에 작성된 키워드를 작성한것처럼
fs.readFile() 은 로컬에 존재하는 파일을 읽어오는 메소드다.
fs.readFile 은 비동기적으로 파일 내용 전체를 읽으며 세가지의 인자를 넘길 수 있다.
fs.readFile(path[, options], callback)
전송 제어 프로토콜 TCP를 사용해 원시데이터를 전송.
서버에는 요청을 받는 부분과 응답을 받는 부분이 있어야 합니다. 요청과 응답은 이벤트 방식이라고 생각하면 됩니다.
클라이언트부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해둬야 합니다.
LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
저장후 나갈시 : Terminal → CTRL + C (정보를 추가할때 마다 저장후 켜야된다.)
const http = require('http');
http:createServer((req, res) => {
// 여기에 어떻게 응답할지 적어둡니다
})
http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으므로 http 모듈을 사용했습니다. http모듈에는 createServer 메서드가 있습니다. 인수로 요청에 대한 콜백 함수를 넣을 수 있으며 요청이 청이 들어올 떄마다 매번 콜백 함수가 실행됩니다. 따라서 이 콜백 함수에 응답을 적으면 됩니다.
createServer의 콜백 부분을 보면 req 와 res 매개변수가 있습니다. 보통 request를 줄여 req라 표현하고 response를 줄여 res라 표현합니다(매개변수는 마음대로 바꿔도 됩니다.) req 객체는 요청에 관한 정보들을, res 객체는 응답에 관한 정보들을 담고 있습니다.
ex)
// server1.js
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=uft-8'});
res.write('<h1>Hello Node!</h1>')
res.end('<p>Hello Server!</p>')
})
.listen(8080, () => { // 서버 연결
console.log(('8080번 포트에서 서버 대기 중입니다'));
});
// 콘솔
$ node server1
코드내용을 살펴보면
creatServer 메서드 뒤에 listen 메서드를 붙이고 클라이언트에 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣습니다. 이제 이 파일을 실행하면 서버는 8080번 포트에서 요청이 오기를 기다립니다.
res 객체에는 res.writeHead 와 res.write, res.end 메서드가 있습니다. res.writeHead는 응답에 대한 정보를 기록하는 메서드입니다. 첫 번째 인수로 성공적인 요청임을 의미하는 200을, 두 번 째 인수로 응답에 대한 정보를 보내는데, 콘텐츠의 형식이 HTML임을 알리고 있습니다. 또한, 한글 표시를 위해 charset을 utf-8 로 지정했습니다. 이 정보가 기록되는 부분을
헤더(header)라고 합니다.
res.write 메서드의 첫 번째 인수는 클라이언트로 보낼 데이터입니다. 지금은 HTML 모양의 문자열을 보냈지만 버퍼를 보낼 수도 있습니다. 또한, 여러 번 호출해서 데이터를 여러개 보내도 됩니다. 데이터가 기록되는 부분을 본문(body) 이라고 합니다.
ex2)
http/1.1 200 OK(스타트 라인)부터 keep-Alive 까지 클라이언트 요청(응답 헤더)이고
밑에 바디(html)까지는 서버응답이다.
그 사이 빈칸이 중요하다.(빈칸 기준으로 나누어진다.)
socket.end() 추가시 데이터 보낸후에 종료 시킬수있다.(브라우저 위 로딩표시가 안보인다.)
WebSocket 와 express
WebSocket은 사용자의 브러우저와 서버 사이의 동적인 양방향 연결 채널을 구성하는 HTML5 프로토콜이다. WebSocket API 를 통해 서버로 메시지를 보내고 요청없이 응답을 받아오는 것이 가능하다.
HTTP는 클라이언트에 의해 초기화되기 때문에 서버가 변경사항을 클라이언트에게 알릴 수 있는 방법이 없지만 WebSocket 의 연결은 HTTP 통신과는 다르게 클라이언트가 특정 주기를 가지고 Polling 하지 않아도 변경된 사항을 시기 적절하게 전달할 수 있는 지속저깅고 완전한 양방향 연결 스트림을 만들어 주는 기술이다.
에러 핸들링 방법
서버가 올바르게 종료되지 않아 발생한 문제이다.
터미널에서 아래 코드를 입력하여
$ lsof -i TCP:포트번호
가동 중인 서버를 찾고
kill -9 PCI번호
위 코드를 입력하여 강제 종료 시킨 후 서버를 재가동 하면 에러가 사라진다.
~~@~~-ui-MacBookAir ~ % lsof -i TCP:4000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 63066 sangkan 22u IPv6 0x3f076cad4734e4d 0t0 TCP *:terabase (LISTEN)
~~@~~-ui-MacBookAir ~ % kill -9 63066
'nodeJS' 카테고리의 다른 글
[Node.js] 예외 처리하기 (0) | 2023.09.07 |
---|---|
[NodeJS] express (0) | 2023.09.04 |
[Node.js] 통신(네트워크) (0) | 2023.08.30 |
[Node.js] 내장 모듈 , require (0) | 2023.08.29 |
NodeJS 기초 , 정의 (0) | 2023.08.25 |