728x90
슬레이어즈
설레일팀의 슬레이어즈로 기획이 컨펌되고, 여러 환경설정이나 맞춰가는 시간을 가졌다.
멘토님이 정해져서 멘토님과의 면담도 진행했다.
멘토님은 5민랩의 CTO님이셨고, 여러 걱정이나 그런것들이 있었는데, 면담 시간을 갖고나서 그런것들이 싸그리씨그리싸그리 없어졌다.
너무 친절하게 다 집어주시고, 중요한 부분 아키텍처나 프로젝트의 시간적인 그런 부분까지 다 고려해서 말씀해 주시는 부분이 너무 좋았다.
서버에 대해서도 말씀해주셨는데, 말씀을 듣고 여러 생각을 해본 결과 C++에서 Node.js로 옮기게 됐다. 아마 서버 구현이 끝나고, 시간이 남으면 c++로 그 서버 그대로 짜보는 연습이나 시간을 가질듯하다.
면담을 통해 큰 줄기 잡힌것같고, 그 큰 줄기에 여러 타임라인이 새겨진 느낌이다.
잘 해 나갈 수 있을 것이라 의심치 않는다. 파이팅 파이팅!
는 바로 node.js 스타트
const net = require('net');
const sockets = new Set();
const server = net.createServer((socket) =>
{
console.log('새로운 클라이언트 접속 : ', socket.remoteAddress,socket.remotePort);
sockets.add(socket);
socket.on('data',(data)=>
{
console.log('클라이언트 메시지 : ',data.toString());
sockets.forEach((clientSocket)=>
{
if(clientSocket !== socket)
{
clientSocket.write(data);
}
});
});
socket.on('end',() =>
{
console.log('클라이언트 접속 종료 : ', socket.remoteAddress,socket.remotePort);
sockets.delete(socket);
});
socket.on('error',(err)=>
{
console.error('소켓 에러 : ', err);
sockets.delete(socket);
});
});
server.listen(3000,() =>
{
console.log('TCP 서버가 3000번 포트에서 실행 중입니다.')
});
- 간단한 서버 코드이다.
const net = require('net');
const sockets = new Set();
- net이 tcp를 사용한다는 것이다.
- sockets는 연결된 클라이언트 소켓을 저장하는 데 사용한다. 각 클라이언트 소켓은 고유한 값이므로 set을 사용해서 중복 없이 효율적으로 관리할 수 있다.
Set은 다음과 같은 주요 메서드를 제공한다:
- add(value): Set에 새로운 값을 추가한다.
- delete(value): Set에서 특정 값을 제거한다.
- has(value): Set에 특정 값이 존재하는지 확인한다.
- size: Set에 저장된 값의 개수를 반환한다.
- clear(): Set에서 모든 값을 제거한다.
socket.on('data', (data) => { ... })
- socket.on('data', (data) => { ... }) 은 node.js의 net 모듈에서 사용되는 이벤트 리스너이다. 이 코드는 클라이언트로부터 데이터를 수신했을 대 호출되는 콜백 함수를 등록하는 부분이다.
- socket.on()은 소켓에서 발생하는 이벤트를 처리하기 위해 사용되는 메서드다. 이 메서드를 사용하여 특정 이벤트를 수신하고 해당 이벤트 발생 시 실행될 콜백 함수를 등록할 수 있다.
- 'data'는 수신할 이벤트의 이름입니다. 이 경우에는 클라이언트로부터 데이터를 받았을 때 발생하는 이벤트를 나타낸다.
- (data) => { ... }는 화살표 함수 문법으로 작성된 콜백 함수이다. 이 함수는 'data' 이벤트가 발생할 때마다 호출된다. 함수의 매개변수 data는 수신된 데이터를 나타낸다.
sockets.forEach((clientSocket)=>
{
if(clientSocket !== socket)
{
clientSocket.write(data);
}
});
- 연결된 모든 클라이언트 소켓에게 데이터를 전송하는 부분이다.
- sockets.forEach()는 set의 forEach 메서드를 사용해서 sockets 내의 각 클라이언트 소켓에 대해 콜백 함수를 실행한다. set에 저장된 각 소켓을 순회하며, 콜백 함수에 해당 소켓을 매개변수로 전달한다.
if (clientSocket !== socket) { ... }
은 현재 데이터를 보낸 클라이언트 소켓을 제외한 나머지 클라이언트 소켓에게만 데이터를 전송하기 위한 조건문입니다.
- clientSocket은 현재 순회 중인 클라이언트 소켓을 나타낸다.
- socket은 데이터를 보낸 클라이언트 소켓을 나타낸다.
- 이 조건문은 데이터를 보낸 클라이언트 자신에게는 데이터를 전송하지 않도록 한다.
Node.js
const, let
const
- 변수 선언 시 사용한다.
- 한 번 값을 할당하면 다른 값을 할당할 수 없다.
- const로 선언한 변수를 상수라고 부르기도 한다.
- 블록 스코프를 가져서 블록 밖에서는 변수에 접근할 수 없다.
- const로 선언된 객체의 안에 있는 값은 바꿀 수 있다.
let
- 다른 값을 할당해야 할 시 사용한다.
- 블록 스코프를 가져서 블록 밖에서는 변수에 접근할 수 없다.
프로미스
- node의 api가 콜백(call back) 대신 프로미스(promise)를 기반으로 재구성된다.
- 프로미스는 비동기 방식이다.
promise.all
- 프로미스가 여러 개 있을 때 promise.all에 넣으면 모두 resolve될 때까지 기다렸다가 then으로 넘어간다.
async/await
- 노드에서 비동기 위주로 프로그래밍을 할 때 도움이 된다.
set
Set은 다음과 같은 주요 메서드를 제공합니다:
- add(value): Set에 새로운 값을 추가합니다.
- delete(value): Set에서 특정 값을 제거합니다.
- has(value): Set에 특정 값이 존재하는지 확인합니다.
- size: Set에 저장된 값의 개수를 반환합니다.
- clear(): Set에서 모든 값을 제거합니다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.04.28 나만무 (0) | 2024.04.30 |
---|---|
24.04.27 나만무 (0) | 2024.04.30 |
24.04.25 최종 기획 (0) | 2024.04.25 |
24.04.24 알고리즘, 기획 (0) | 2024.04.25 |
24.04.23 3차 기획 발표 (0) | 2024.04.25 |