2022. 12. 15. 20:47ㆍNodeJs
| 목차 |
| 1. Server, Client 파일의 생성 |
| 2. Server.js |
| 3. Client.js |
| 4. 코드 해석 및 흐름 |
1. Server, Client 파일의 생성
보통은 Server와 Client를 서로 다른 컴퓨터끼리 통신을 하지만 Server가 잘 구현되었는지 보기 위해 임의로 나누어보자.
같은 프로세스(실행되고있는 파일, 프로그램) 안의 서로 다른 스레드라면 불가능하겠지만, 두 가지의 프로세스를 돌려 다른 프로세스의 다른 스레드라면 가능하다.

Server.js와 Client.js를 각각 파일로 만들어보자.
2. Server.js
서버 역할을 하는 자바스크립트 파일을 만들어보자.
const net = require('net')
const PORT = process.env.SERVER_PORT || 3000
const HOST = process.env.SERVER_HOST || "127.0.0.1"
const server = net.createServer((client) => {
client.setEncoding('utf8')
client.on("data", (data) => {
console.log(data)
console.log(data.toString('hex'))
console.log(data.toString('utf8'))
})
client.on("close", () => {
console.log("Goodbye client.")
})
})
server.listen(PORT, HOST, () => {
console.log(`Server Listening Port : ${PORT}`)
server.on("connection", () => {
console.log("client가 접속함!")
})
})
3. Client.js
클라이언트 역할을 하는 자바스크립트 파일을 만들어보자.
const net = require('net')
const config = {port:3000, host:'127.0.0.1'}
const socket = net.connect(config)
socket.on("connect", () => {
console.log("connected to server!")
socket.write("Send_Data")
})
4. 코드 해석 및 흐름

우선, 두 파일 모두 위에서 require를 이용해 TCP 통신을 위한 내장모듈 'net'을 가져온다.
(TCP는 커널 영역에 속해있어 우리가 조작하기 힘들다.)
Server.js에선 createServer 메서드를 이용해 서버를 만들고 server 변수(함수 선언식)에 담았다. 항상 요청을 받을 수 있도록 구현되어 있는 listen 메서드를 이용해 서버를 시작한다.
Client.js에서는 Server의 포트번호(PORT)와, IP주소(HOST)를 이용해 서버로의 접속을 시도한다.
Server에서 이 접속을 server.on("connection")으로 확인한다. 이때 접속하면서 Client에서는 "Send_Data"(String)를 같이 보내왔는데, 이를 server에서 매개변수 = client(socket)로 받아 client.on을 사용해 데이터를 받는 이벤트로 받아낸다.
데이터 이벤트를 받는 코드의 윗줄에서 받은 데이터의 변환을 위해 setEncoding 메서드로 'UTF8'로 인코딩 해온다.
( 데이터를 통째로 보내는 것이 아니라 텍스트 형태로 쪼개 보낸다. 쪼개진 형태를 chunk라고 하며, 이를 Buffer나 Stream형태로 보낸다.)
이 과정을 그림으로 한 번 보자면 다음과 같다.

데이터를 보내기 전에 3_way_hand_shaking으로 연결이 되고나서, 데이터를 주고받을 수 있는 상태가 되는 것이다.
Server는 Client의 요청에 무조건 응답을 주게 만들어야 한다. 잘못 만들게 되면 다음과 같은 형태로 무한 루프를 돌기도 한다.

이렇게 되지 않도록 서버나 클라이언트에서 연결을 종료 시킬 수 있도록 HTTP 프로토콜로 약속한 것이다.
다음번에는 클라이언트를 직접 구현하지 않고, 브라우저를 이용해 내가 만든 서버에 요청을 보내 응답을 줄 때, HTTP 메시지를 어떤 형태로 보내 어떻게 바꿔야 하는지 한번 구현해보도록 하자.
'NodeJs' 카테고리의 다른 글
| NodeJs.노드 패키지 매니저(npm) (0) | 2022.12.20 |
|---|---|
| NodeJs.TCP Server 만들기(2) (0) | 2022.12.17 |
| NodeJs.TCP 흐름 (0) | 2022.12.15 |
| NodeJs.모듈 (0) | 2022.12.06 |
| NodeJs.실행 및 사용방법 (0) | 2022.12.06 |