나만의 작은 도서관

[TIL] 240625 캠프 72일차: 커링 (Currying) , 프로토콜 버퍼 본문

Today I Learn

[TIL] 240625 캠프 72일차: 커링 (Currying) , 프로토콜 버퍼

pledge24 2024. 6. 25. 23:16

오늘 배운 내용                                     

커링 (Currying)

‘커링’은 여러 인수를 받는 함수를 인수가 하나인 함수들의 연속으로 변환하는 기법이다. 만약 onConnection() 함수가 socket이라는 매개변수를 받고, 안에 onData()함수에 data를 넣어 호출했다면, onData에서 socket, data 매개변수를 전부 사용할 수 있게 하는 기능이다. 사용법은 아래와 같다.

// socket은 onData를 호출함 onConnection()함수의 매개변수이다.
export const onData = (socket) => (data) => {
  console.log(data);
};

 

 

프로토콜 버퍼

프로토콜 버퍼는 구글에서 오픈소스로 공개한 언어로, 구조화(structured)된 데이터를 직렬화(serialization) 하는 방식입니다. 줄여서 protobuf, 더 줄여서 pb라고 부릅니다. 자바스크립트에서 프로토콜 버퍼의 정의는 protobufs 패키지를 통해 할 수 있습니다. 확장자는 .proto입니다.

 

아래의 코드는 .proto확장자 파일에 적을 프로토콜 버퍼에 대한 내용입니다.

// person.proto

syntax = "proto3"; // 버전은 proto3으로 사용

// Person이라는 프로토콜 버퍼 정의
message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

 

이제 만든 프로토 파일을 사용하는 방법은 아래와 같습니다.

import protobuf from 'protobufjs';

protobuf.load("person.proto").then(root => { // 'person.proto' 파일을 로드합니다.
  
  // 'Person' 메시지 타입을 'root' 객체에서 찾아 저장.
  const Person = root.lookupType("Person");
  
  // 'Person' 메시지 타입을 사용하여 새로운 메시지 객체를 생성합니다. 여기서는 name, id, email 필드를 설정합니다.
  const message = Person.create({ name: "John Doe", id: 123, email: "johndoe@example.com" });
  
  // 생성된 메시지 객체를 바이너리 형식으로 인코딩합니다. 'finish' 메서드는 최종 인코딩된 버퍼를 반환합니다.
  const buffer = Person.encode(message).finish();
  
  const decodedMessage = Person.decode(buffer);
 

  console.log("Original message:", message); // { name: "John Doe", id: 123, email: "johndoe@example.com" }
  console.log("Encoded buffer:", buffer); // < buffer ........... >
  console.log("Decoded message:", decodedMessage); // { name: "John Doe", id: 123, email: "johndoe@example.com" }

})

 

오늘 한 일                                       

더보기
  • Node.js 게임서버개발 주특기 플러스 100% -완-