์ต๊ทผ NestJS๋ฅผ ํ์ฉํด ๊ด๋ฆฌ์ CMS ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋์ค ๋ฐฑ์๋ ์ค๊ณ ์ ๊ณ ์ ID ๊ฐ์ผ๋ก BigInt๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ์น๋ช
์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฐ๋ ์ ์ค ๋ฌธ์ ์ ๋ํด ์๊ฒ ๋์๋ค.
๋น์ฅ ๋ด ์ฝ๋์์ ์๋ฌ๊ฐ ๋์ง ์๋๋ผ๋ ์๋น์ค๊ฐ ์ปค์ ธ ID ๊ฐ์ด ์ปค์ง๋ ์๊ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํฐ ์ซ์๋ฅผ ๋ค๋ฃฐ ๋ ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ํ์์ธ์ง ์ ๋ฆฌํด๋ณด์.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ์(Int)์ ์ค์(Float)์ ๊ตฌ๋ถ ์์ด ๋ชจ๋ ์ซ์๋ฅผ 64๋นํธ ๋ถ๋ ์์์ (Double Precision) ํ์์ผ๋ก๋ง ์ ์ฅํ๋ค. ์ด ํ์ค(IEEE 754)์ ๋ฐ๋ฅด๋ฉด 64๋นํธ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐ๋ถ๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ์ค์ ์ ๋ฐ๋๋ฅผ ๋ด๋นํ๋ ๊ฐ์๋ถ๊ฐ 52๋นํธ๋ฟ์ด๋ผ๋ ์ ์ด๋ค. ์ด๋ก ์ธํด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ ํ๊ฒ ํํํ ์ ์๋ ์ ์์ ๋ฒ์๋ ์ฝ -0.9๊ฒฝ ~ 0.9๊ฒฝ ์ฌ์ด๋ก ์ ํ๋๋ค.
Number.MAX_SAFE_INTEGER: 9,007,199,254,740,991 (์ฝ 0.9๊ฒฝ)
๋ฐ๋ฉด DB๋ Java/NestJS์์ ์ฌ์ฉํ๋ 64๋นํธ Long(BigInt) ํ์ ์ ๋ฒ์๋ -922๊ฒฝ ~ 922๊ฒฝ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฒ์๋ฅผ ํจ์ฌ ์ด๊ณผํ๋ค.
๋ง์ฝ ์๋ฒ๊ฐ ์์ ๋ฒ์๋ฅผ ๋์ด์๋ ํฐ ์ซ์ ID๋ฅผ ๊ทธ๋๋ก ๋ณด๋ธ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ธ๋ผ์ฐ์ ๊ฐ JSON์ ํ์ฑํ๋ ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํํํ ์ ์๋ ํ์ ๋นํธ๋ฅผ ๋ฐ์ฌ๋ฆผํ๊ฑฐ๋ ๋ฒ๋ ค๋ฒ๋ฆฌ๊ฒ ๋๋ค.
์๋ฒ๊ฐ ๋ณด๋ธ ๊ฐ = 9,223,372,036,854,775,807
๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ ๊ฐ = 9,223,372,036,854,776,000 (๊ฐ์ด ๋ค๋ฆ)
์ด๋ฌํ ๋ฐ์ดํฐ ์๊ณก์ ๋จ์ํ ์ซ์๊ฐ ํ๋ฆฌ๋ ๊ฒ์ ๋์ด ์๋ชป๋ ID ์ฐธ์กฐ๋ก ์ธํด ๋ฐํ์ ์๋ฌ๋ฅผ ์ ๋ฐํ๋ค.
# ์๋ชป๋ ID๋ก ์ธํ ์ฐธ์กฐ ์๋ฌ ์์
Uncaught TypeError: Cannot read properties of null (reading 'id')
์ด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ฅ ๊ถ์ฅ๋๋ ์ค๊ณ ๊ท์ฝ์ ํฐ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด๋ค.
*NestJS์์๋ class-transformer๋ฅผ ํ์ฉํด ์๋ต DTO ๋จ๊ณ์์ ์์ฃผ ๊ฐ๋จํ๊ฒ ์ด ๊ท์น์ ์ ์ฉํ ์ ์๋ค.
import { Transform } from 'class-transformer';
export class PostResponseDto {
@Transform(({ value }) => value?.toString()) // BigInt๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ ์ก
id: bigint;
}
์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋ฉด ์๋ฒ ๋ด๋ถ์์๋ ํจ์จ์ ์ธ BigInt๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ํด๋ผ์ด์ธํธ์๋ ์์ ํ string ํ์ ์ ์ ๋ฌํ ์ ์๋ค.
๋งค๋ฒ DTO์ @Transform์ ๋ถ์ด๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ๋ค๋ฉด main.ts ์๋จ์ toJSON ํ๋กํ ํ์ ์ ์ ์ํ์ฌ ์ ์ญ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
// main.ts
if (!(BigInt.prototype as any).toJSON) {
Object.defineProperty(BigInt.prototype, 'toJSON', {
value() {
return String(this);
},
configurable: true,
enumerable: false,
writable: true,
});
}
์ด๋ ๊ฒ ํ๋ฉด ์ ์ญ์ ์ผ๋ก ๋ชจ๋ BigInt๊ฐ JSON ์ง๋ ฌํ ์ ๋ฌธ์์ด๋ก ๋ณํ๋์ด ์ ๋ฐ๋ ์ ์ค ๋ฌธ์ ๋ฅผ ์์ฒ ๋ด์ํ ์ ์๋ค.
๋จ, ์๋ฒ์์ ๋ณด๋ผ ๋๋ ๋ฌธ์์ด๋ก ์๋ ๋ณํ๋์ง๋ง ํ๋ก ํธ์๋์์ ๋ฌธ์์ด๋ก ๋ณด๋ธ ID๋ฅผ ์๋ฒ์์ ์ซ์๋ก ๊ณ์ฐํด์ผ ํ๋ค๋ฉด BigInt()๋ฅผ ํตํด ์ซ์๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
