Ethan Hur's blog

Node.js 에서 GUID 압축하기

2016-12-02

보통 Unique 한 ID 를 지정하기 위해서 여러 방법을 쓰는데, 그 중 하나가 바로 GUID (또는 UUID) 이다. (모른다면 URL을 참고하자)

하지만 이를 그냥 generate 하였을 때 보통은 길이가 36자 (dash 를 빼도 32자) 가 된다.

평소에는 그냥 써도 되지만, 그렇게 긴 Key 또는 ID 를 보낼 수 없는 경우가 종종 존재한다.

나의 경우에는 Transaction ID 를 GUID 로 만들었는데, 이를 다른 API와 매핑 시킬 때, 36자보다 짧은 길이로 전송해야 했다.

여러 방법을 찾아보다가 GUID String 을 Base64 로 압축하는 방법이 있었다. 하지만 Node.js로 된 코드는 존재하지 않아 공유해본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
function encode(uuid) {
let buffer = new Buffer(uuid.replace(/-/g, ""), 'hex');
let ret = buffer.toString('base64');
ret = ret.replace(/\//g, "_").replace(/\+/g, "-");
return ret.substring(0,22);
}
function decode(base64) {
let buffer = new Buffer(base64 + '==', 'base64');
let ret = buffer.toString('hex');
ret = ret.replace(/_/g, "/").replace(/-/g, "+");
return ret;
}

위와 같은 코드를 이용하면 36자인 GUID 를 22자로 줄일 수 있다.

P.S. Node.js 버전 5.1 부터는 new Buffer() 이 deprecated 된다. 따라서 Buffer.from() 이라는 함수로 바꾸어주어야 한다. 자세한 사항은 Buffer API 를 참고하기 바란다.

Tags: Node.js