나만의 작은 도서관
[TIL] 240625 캠프 72일차: 커링 (Currying) , 프로토콜 버퍼 본문
오늘 배운 내용
커링 (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% -완-
'Today I Learn' 카테고리의 다른 글
[TIL] 240627 캠프 74일차: TCP Handshake, TCP와 UDP (0) | 2024.06.27 |
---|---|
[TIL] 240626 캠프 73일차: 로드 밸런싱, 대칭/공개 키 암호화 방식 (0) | 2024.06.27 |
[TIL] 240624 캠프 71일차: net으로 간단한 TCP 서버 만들기, 자바스크립트 Buffer (0) | 2024.06.24 |
[TIL] 240621 캠프 68일차: 웹소켓과 http와의 관계, Socket.io의 기초 emit 이해 (0) | 2024.06.23 |
[TIL] 240620 캠프 67일차: HTML파일에서 script로 API 사용하기, 객체에서 속성의 값에 접근하는 2가지 방식: [ ] 와 . (0) | 2024.06.20 |