금융사와 tcp 통신을 해야 할 업무가 생겼는데,

10년전 게임 만들 때 사용하던 것처럼 binary배열에 바이트를 할당해서 사용할 일이 생겼다.

그리고 nestjs 서버간 Buffer를 주고 받아야 할일이 생겼는데, 거기서 문제가 생겼다.

 

그에 관련된 얘기를 하고자 한다.

 

조금 벗어난 얘기를 하자면, 

정의된 클래스 -> Buffer

Buffer -> 정의된 클래스 로 변환할 때는 struct 패키지를 사용했다.

www.npmjs.com/package/struct

 

struct

Pack/Unpack multibyte binary values from/to buffers

www.npmjs.com

 

개발환경

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

+ Recent posts