금융사와 tcp 통신을 해야 할 업무가 생겼는데,
10년전 게임 만들 때 사용하던 것처럼 binary배열에 바이트를 할당해서 사용할 일이 생겼다.
그리고 nestjs 서버간 Buffer를 주고 받아야 할일이 생겼는데, 거기서 문제가 생겼다.
그에 관련된 얘기를 하고자 한다.
조금 벗어난 얘기를 하자면,
정의된 클래스 -> Buffer
Buffer -> 정의된 클래스 로 변환할 때는 struct 패키지를 사용했다.
개발환경
typescript, nestjs
처음에는 기존에 했던 데로 class로 request, response를 정의했다.
각 request, response 에는 Buffer가 property로 들어있다.
이 Buffer를 주고 받을 때 발생한 문제인데,
class에 Buffer를 property로 넣고 요청을 하면 JSON으로 변환되서 전달된다.
전달 받은 서버에서는 JSON을 Buffer로 변환되리라 기대 했지만,
그렇지 않다.
해결 방법은 Uint8Array를 이용하는 방법도 있지만,
쉬운길을 택했다.
Buffer -> base64로 인코딩 후 전송, base64 -> Buffer 로 디코딩 후 사용한다.
코드를 보면 쉽게 이해가 가능하다.
const a = Buffer.from("abcdef")
console.log(a)
// <Buffer 61 62 63 64 65 66>
console.log(a.toJSON())
// { type: 'Buffer', data: [ 97, 98, 99, 100, 101, 102 ] }
const b = a.toString("base64")
console.log(b)
// YWJjZGVm
const c = Buffer.from(b, "base64")
console.log(c)
// <Buffer 61 62 63 64 65 66>
console.log(c.toString())
// abcdef
'Develop' 카테고리의 다른 글
mysql rows to columns (0) | 2021.10.21 |
---|---|
DocumentDB failover 장애 시간 (0) | 2021.09.28 |
aws elasticcache MOVED 문제 (0) | 2021.02.02 |
make date range list (0) | 2020.07.03 |
ecs-params: assign_public_ip (0) | 2020.06.02 |