2025-01-06 TIL
1. TCP 서버 튜토리얼
저번에 이어서 javascript에서 tcp 작업을 하기 위한 코드를 연습했다. 이번에는 빠르게 강의들을 끝낼 생각이었는데 의외의 문제가 생겨서 수업을 오래 끌게 되었다.
buffer(버퍼)
임시 저장 공간을 의미하며 현재 작업하는 환경에선 바이트 배열(배열 한 칸이 1바이트인 배열)의 형태로 데이터를 집어 넣어야 하기에 먼저 buffer에 집어 넣은 다음 보내는 작업을 하고 있는 것으로 보여진다.
아래와 같이 작업할 경우 string은 buffer 값에 들어갈 아스키 값으로 들어가는 결과를 보인다.
const buffer = Buffer.from(data);
문제는 여기서 생겼는데, tcp 작업을 하기 위해 이 앞에 헤더를 붙였다 때고 하는 과정에서 데이터를 읽는 데 문제가 생겼다 생각해 버린 것이다.
발생한 문제
const responseMessage = handle(message);
const responseBuffer = Buffer.from(responseMessage);
const header = writeHeader(responseBuffer.length, 10);
const packet = Buffer.concat([header, responseBuffer]);
socket.write(packet);
위의 코드가 기본적으로 내가 데이터를 보내는 값이다. 이걸 바탕으로 서버와 클라이언트가 데이터를 보내고 받는 것을 상정하고 있는데, 이걸 출력하는 과정에서 데이터가 변환이 안 되는 문제가 있었던 것이다.
console.log(message);
서버 쪽과 클라이언트 쪽 양쪽 다 똑같은 값을 줬는데도 출력값이 다르게 나오는 문제가 생겨서 그 문제를 해결하다 오늘 하루를 다 소모했다.
문제 자체는 아주 간단했다. 출력 방식만 바꿔주니 해결되었다.
console.log(`${message}`);
두 가지에 어떤 차이가 있는지는 확실히 모르겠지만 이거 하나 때문에 오늘 하루를 다 날려 버렸다.