본문 바로가기

nodeJS

[Node.js] Net 모듈

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의 콜백 부분을 보면 reqres 매개변수가 있습니다. 보통 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

localhost:8080

 

코드내용을 살펴보면

creatServer 메서드 뒤에 listen 메서드를 붙이고 클라이언트에 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣습니다. 이제 이 파일을 실행하면 서버는 8080번 포트에서 요청이 오기를 기다립니다.

 

res 객체에는 res.writeHeadres.write, res.end 메서드가 있습니다. res.writeHead는 응답에 대한 정보를 기록하는 메서드입니다. 첫 번째 인수로 성공적인 요청임을 의미하는 200을, 두 번 째 인수로 응답에 대한 정보를 보내는데, 콘텐츠의 형식이 HTML임을 알리고 있습니다. 또한, 한글 표시를 위해 charsetutf-8  로 지정했습니다. 이 정보가 기록되는 부분을

헤더(header)라고 합니다.

res.write 메서드의 첫 번째 인수는 클라이언트로 보낼 데이터입니다. 지금은 HTML 모양의 문자열을 보냈지만 버퍼를 보낼 수도 있습니다. 또한, 여러 번 호출해서 데이터를 여러개 보내도 됩니다. 데이터가 기록되는 부분을 본문(body) 이라고 합니다. 

 

 

 

ex2)

clients.js 와 server.js
server.js 추가

http/1.1 200 OK(스타트 라인)부터 keep-Alive 까지  클라이언트 요청(응답 헤더)이고

밑에 바디(html)까지는 서버응답이다.

그 사이 빈칸이 중요하다.(빈칸 기준으로 나누어진다.)

server.js 추가

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