๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฑ์—”๋“œ/ORM

[TypeORM] bigint๊ฐ€ string์œผ๋กœ ๋ณ€ํ™˜๋  ๋•Œ

 

๋ฌธ์ œ ์ƒํ™ฉ

TypeORM์œผ๋กœ ๋งŒ๋“  ์—”ํ‹ฐํ‹ฐ ์ผ๋ถ€

 

TypeORM ๊ณต์‹๋ฌธ์„œ : https://typeorm.io/entities#column-types

 

  • TypeORM ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ ๋‚˜์™€์žˆ๋“ฏ์ด, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ bigint๋กœ ์ปฌ๋Ÿผ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” string์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. (PostgreSQL ๊ธฐ์ค€)
  • ํ•˜์ง€๋งŒ ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ๊ธฐ๋Š” ๊ท€์ฐฎ์œผ๋‹ˆ, ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜ํ•œ ์‹œ์ ์— ์ด๋ฏธ number ๋ผ๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • Javascript์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” "์•ˆ์ „ํ•œ" ์ •์ˆ˜์˜ ๋ฒ”์œ„๋Š” -9,007,199,254,740,991 ~ 9,007,199,254,740,991 ์ž…๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ PostgreSQL bigint์˜ ๋ฒ”์œ„๋Š” -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807๋กœ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— string์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
  • totalAmount ๊ฐ’์ด Javascript์˜ "์•ˆ์ „ํ•œ" ์ •์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • TypeORM ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด transformer๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • from, to ๋‘ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด ํƒ€์ž…์ด๊ณ  ์—”ํ‹ฐํ‹ฐ ํƒ€์ž…์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์œผ๋กœ(๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ) ๋งˆ์ƒฌ๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

  • Transformer ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  to, from ๋‘ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • to : ์—”ํ‹ฐํ‹ฐ ํƒ€์ž…์˜ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ณ€ํ™˜ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • from : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ณ€ํ™˜ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ €๋Š” from์—์„œ string ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ’์„ parseInt๋ฅผ ์‚ฌ์šฉํ•ด number๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ 

https://stackoverflow.com/questions/59927625/how-to-store-big-int-in-nest-js-using-typeorm

https://www.postgresql.org/docs/current/datatype-numeric.html

https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures

https://jojoldu.tistory.com/600