YesCoding

Go to English
search:

datetime vs timestamp

thumbnail timestamp

createdAt, updatedAt ν•„λ“œ type 을 datetime 으둜 ν•΄μ•Ό ν•  지, timestamp 둜 ν•΄μ•Όν•  지 κ³ λ―Όμ΄μ—ˆλŠ”λ°, ν˜„μž¬ 진행쀑인 ν”„λ‘œμ νŠΈμ—μ„œ timestamp λ₯Ό μ„ νƒν•œ 이유λ₯Ό μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

Timestamp 의 μž₯점

1. κΈ€λ‘œλ²Œ μ„œλΉ„μŠ€μΈ 경우 데이터 μž…λ ₯ μ‹œκ°„ 관리가 νŽΈν•˜λ‹€.

timestamp λŠ” datetime κ³Ό 달리 time_zone 에 μ˜μ‘΄ν•˜κ³  UTC 지원이 κ°€λŠ₯ν•˜λ‹€.

πŸ’‘ νƒ€μž„μ‘΄μ΄λž€ ?

λ™μΌν•œ 둜컬 μ‹œκ°„μ„ λ”°λ₯΄λŠ” 지역을 μ˜λ―Έν•˜λ©° ν•΄λ‹Ή ꡭ가에 μ˜ν•΄ λ²•μ μœΌλ‘œ μ§€μ •λœλ‹€. 기쀀은 영ꡭ의 κ·Έλ¦¬λ‹ˆμΉ˜ μ²œλ¬ΈλŒ€λ₯Ό κΈ°μ€€μœΌλ‘œ offset 을 두어 κ΅­κ°€λ³„λ‘œ ν•œκ°œ ν˜Ήμ€ μ—¬λŸ¬κ°œμ˜ νƒ€μž„μ‘΄μ„ 가진닀.

PostgresQL μ—μ„œ timezone ν™•μΈν•˜λŠ” 법

μ§€κΈˆ λ§Œλ“€κ³  μžˆλŠ” μ„œλΉ„μŠ€λŠ” κΈ€λ‘œλ²Œ μ„œλΉ„μŠ€μ΄κΈ° λ•Œλ¬Έμ— νƒ€μž„μ‘΄μ΄ μ§€μ›λ˜λŠ” timestamp λ₯Ό 써야 데이터λ₯Ό μ‰½κ²Œ 관리할 수 μžˆλ‹€κ³  νŒλ‹¨ν–ˆλ‹€.

TIMESTAMP 의 경우

  • insert into TBL (ts) values (now()) β†’ UTC 둜 λ³€ν™˜λ˜μ–΄ 기둝됨
  • select ts from TBL β†’ νƒ€μž„μ‘΄μ— 따라 λ³€ν™˜λ˜μ–΄ 좜λ ₯됨

DATETIME 인 경우

  • insert into TBL (ts) values (now()) β†’ LOCAL TIME 으둜 기둝됨
  • select ts from TBL β†’ νƒ€μž„μ‘΄μ— 관계없이 μ²˜μŒμ— κΈ°λ‘λ˜μ—ˆλ˜ μ‹œκ°„μ΄ 좜λ ₯됨

2. 인덱싱이 더 λΉ λ₯΄κ²Œ λœλ‹€.

datetime 은 1000-01-01 00:00:00 λΆ€ν„°Β 9999-12-31 23:59:59 κΉŒμ§€ 지원

timestamp λŠ” 1970-01-01 00:00:01 λΆ€ν„°Β 2038-01-19 03:14:07 κΉŒμ§€ 지원

μ§€μ›ν•˜λŠ” λ²”μœ„κ°€ 더 적기 λ•Œλ¬Έμ— timestamp κ°€ indexκ°€ 더 λΉ λ₯΄κ²Œ μƒμ„±λœλ‹€.

3. byte κ°€ 더 μž‘λ‹€.

TIMESTAMP λŠ” 4 bytes vs DATETIME 은 8 byte 이닀. column type 이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€. datetime - λ¬Έμžν˜•, timestamp - μˆ«μžν˜•μœΌλ‘œ λ³€ν™˜λ˜μ–΄ μ €μž₯λœλ‹€.

4. μžλ™μž…λ ₯이 λœλ‹€.

datetime - μˆ˜μ •ν•  일이 있으면 κ·Έ λ•Œλ§ˆλ‹€ λ‚ μ§œλ₯Ό μž…λ ₯

timestamp - λ‚ μ§œλ₯Ό λ”°λ‘œ μž…λ ₯ μ•ˆν•΄μ€˜λ„ μžλ™μœΌλ‘œ μž…λ ₯ κ°€λŠ₯ (CURRENT_TMESTAMP μ‚¬μš©μ‹œ)

Timestamp 단점 (2038 λ…„ 문제)

2038λ…„ 문제

(2038εΉ΄ ε•ι‘Œ,Β μ˜μ–΄:Β year 2038 problem, Unix Millennium bug, Y2K38)λž€ 컴퓨터 λΆ„μ•Όμ—μ„œΒ 2038λ…„ λ˜λŠ” 전후에 νŠΉμ •ν•œ 컴퓨터 μ†Œν”„νŠΈμ›¨μ–΄μ— 이상이 λ°œμƒν•˜λŠ” 문제λ₯Ό λ§ν•œλ‹€. 이 λ¬Έμ œλŠ”Β POSIX μ‹œκ°„ ν‘œκΈ°λ²•μ„ μ΄μš©ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ λ°œμƒν•˜λŠ”λ°, 이 ν‘œκΈ°λ²•μ€ μ‹œκ°„μ„Β 1970λ…„Β 1μ›” 1일 μžμ •Β UTC 이후 경과된 초 μ‹œκ°„μ„ μ΄μš©ν•˜μ—¬ ν‘œν˜„ν•œλ‹€. 이 ν‘œκΈ°λ²•μ€Β μœ λ‹‰μŠ€ 계열 의 운영 μ²΄μ œμ—μ„œ ν‘œμ€€μ΄λ©°,Β Cκ°€ 널리 이용되기 λ•Œλ¬Έμ— λ‹€λ₯Έ λŒ€λΆ€λΆ„μ˜ 운영 μ²΄μ œμ—μ„œ μž‘λ™ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—λ„ 영ν–₯을 μ€€λ‹€. λŒ€λΆ€λΆ„μ˜ 32λΉ„νŠΈ μ‹œμŠ€ν…œμ—μ„œ 초 μ‹œκ°„μ„ μ €μž₯ν•˜λŠ” 데 μ΄μš©λ˜λŠ”Β time_t자료 ν˜•μ‹μ€ λΆ€ν˜Έ μžˆλŠ”Β 32λΉ„νŠΈΒ μ •μˆ˜ν˜•μ΄λ‹€. POSIX ν‘œμ€€μ— λ”°λ₯΄λ©΄, 이 ν˜•μ‹μ„ μ΄μš©ν•˜μ—¬ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” μ΅œν›„μ˜ μ‹œκ°μ€ 1970λ…„ 1μ›” 1일 μžμ •μ—μ„œΒ 2147483647 μ΄ˆκ°€ μ§€λ‚œΒ 2038λ…„Β 1μ›” 19μΌΒ ν™”μš”μΌΒ 03:14:07Β UTC이닀. 이 μ‹œκ° μ΄ν›„μ˜ μ‹œκ°μ€ λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜μ—¬ λ‚΄λΆ€μ μœΌλ‘œ 음수둜 ν‘œν˜„λ˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ 이상 μž‘λ™μ„ μœ λ°œν•˜λŠ”λ°, μ™œλƒν•˜λ©΄ μ΄λŸ¬ν•œ 값은 2038λ…„ λŒ€μ‹  ν”„λ‘œκ·Έλž¨μ˜ κ΅¬ν˜„ 방법에 따라 1970λ…„ λ˜λŠ” 1901년을 가리킀기 λ•Œλ¬Έμ΄λ‹€. λ”°λΌμ„œ 계산 였λ₯˜μ™€ κ²°μ • 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλ‹€. 좜처: wiki

2038λ…„ timestamp μ—λŸ¬

2038λ…„ timestamp μ—λŸ¬

32λΉ„νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” λ‚ μ§œμ˜ ν•œκ³„κ°€ 2038λ…„ 1μ›” 19일이기 λ•Œλ¬Έμ— timestamp 둜 ν‘œν˜„ν•˜λŠ” ν•„λ“œκ°€ 2038λ…„ 1μ›” 19일 이후에도 μ“°μ—¬μ§ˆ 것이 ν™•μ‹€ν•˜λ‹€λ©΄ datetime 을 μ“°λŠ”κ²ƒμ΄ μ’‹λ‹€κ³  μƒκ°λœλ‹€.

λ¬Όλ‘  그런 κ²½μš°κ°€ 올 경우 κΈ°μ‘΄ timestamp λ₯Ό datetime 으둜 λ³€ν™˜ν•  수 μžˆμ§€λ§Œ 데이터 양이 λ§Žμ„μˆ˜λ‘ λ³€ν™˜μ΄ 쉽지 μ•Šμ„ 것이닀.

πŸ‘©πŸ»β€πŸ’» μ§€κΈˆ λ§Œλ“€κ³  μžˆλŠ” μ„œλΉ„μŠ€λŠ” κΈ€λ‘œλ²Œ μ„œλΉ„μŠ€μ΄κ³ , 2038λ…„ κΉŒμ§€μ˜ κ³„νšμ΄ μžˆλŠ” μƒνƒœλŠ” μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μž₯점이 더 크닀고 생각해 timestamp λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

Recommend Post
nestjs request dto and response dto
nestjs request dto and response dto
google social login ν•œ μœ μ €μ˜ 생년월일 κ°€μ Έμ˜€κΈ°
google social login ν•œ μœ μ €μ˜ 생년월일 κ°€μ Έμ˜€κΈ°
TypeORM soft delete on cascade
TypeORM soft delete on cascade
typeORM entity μ—μ„œ λΉ„λ°€λ²ˆν˜Έ hash ν•˜κΈ°
typeORM entity μ—μ„œ λΉ„λ°€λ²ˆν˜Έ hash ν•˜κΈ°
Β© Copyright 2022, YesCoding