You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constnow=newDate();console.log(now);// Tue Jan 28 2025 14:02:00 GMT+0900 (한국 표준시)
2. 데이터베이스로 저장 시 toISOString()의 동작
toISOString()은 UTC 기준의 ISO 8601 문자열을 반환합니다.
예: 2025-01-28T05:02:00.000Z (Z는 UTC를 나타냄).
데이터베이스에 저장되는 시간은 toISOString()을 사용했을 경우 UTC 기준 시간으로 저장됩니다.
3. 왜 브라우저와 DB의 시간이 다르게 보이는가?
브라우저:
브라우저는 Date 객체를 **로컬 타임존(KST)**으로 출력합니다.
예: Tue Jan 28 2025 14:02:00 GMT+0900 (한국 표준시).
DB에 저장된 시간:
toISOString()을 사용해 저장하면, UTC 기준 시간이 저장됩니다.
예: 2025-01-28T05:02:00.000Z.
결과적으로 **DB에 저장된 값(UTC)**과 **브라우저 콘솔 출력(로컬 시간)**이 달라 보이게 됩니다.
4. 브라우저와 DB의 시간 차이를 해결하는 방법
4.1 데이터베이스에 한국 시간을 저장
toISOString() 대신 한국 시간 기준의 ISO 문자열을 생성해 DB에 저장하면 됩니다.
constnow=newDate();constoffset=9*60*60*1000;// UTC+9 (밀리초)constkstDate=newDate(now.getTime()+offset);// 한국 시간 ISO 형식으로 변환constkstISOString=kstDate.toISOString().replace("Z","+09:00");console.log(kstISOString);// "2025-01-28T14:02:00+09:00"
DB에 kstISOString을 저장하면 로컬 시간과 동일하게 보이게 됩니다.
4.2 데이터베이스는 UTC로 저장, 로컬에서 변환
DB에 시간을 UTC로 저장하고, 클라이언트에서 읽을 때 로컬 시간으로 변환합니다. 이 방식은 국제화가 필요한 경우 권장됩니다.
저장 시:
constnow=newDate();constutcISOString=now.toISOString();// UTC 기준 시간console.log(utcISOString);// 예: "2025-01-28T05:02:00.000Z"
읽어올 때:
constutcTime="2025-01-28T05:02:00.000Z";// DB에서 가져온 UTC 시간constlocalTime=newDate(utcTime).toLocaleString("ko-KR",{timeZone: "Asia/Seoul",});console.log(localTime);// 한국 시간으로 변환된 값 출력
5. 왜 이런 방식으로 동작하는가?
브라우저에서 Date 객체:
시스템의 로컬 타임존 설정(예: 한국 표준시, KST)을 사용합니다.
toISOString():
항상 UTC 기준 시간으로 변환합니다.
데이터베이스:
UTC 기준 시간으로 저장하도록 설계된 경우가 많습니다(특히 TIMESTAMP 타입).
6. 결론
문제 원인: 브라우저는 로컬 시간대를 기준으로, DB는 UTC로 시간을 처리하기 때문.
해결 방법:
DB에 한국 시간 기준 값(+09:00)을 저장하려면 toISOString() 대신 직접 변환한 값을 사용.
DB에 UTC로 저장하고 클라이언트에서 로컬 시간으로 변환.
-> 우리는 팀원들의 빠른 구현을 위해 "DB에 한국 시간 기준 값(+09:00)을 저장하려면 toISOString() 대신 직접 변환한 값을 사용"하는 것을 선택하여 적용
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
이 문제는 JavaScript의
Date
객체가 작동하는 방식과 데이터베이스가 시간을 저장하는 방식의 차이 때문에 발생합니다. 정확히 이해하려면Date
객체와 데이터베이스 간의 처리 과정을 살펴볼 필요가 있습니다.1.
Date
객체의 기본 동작const now = new Date();
는 사용자의 시스템 시간대를 기준으로 현재 날짜와 시간을 생성합니다.console.log(now)
를 호출하면 **로컬 시간(한국 시간)**으로 보입니다.2. 데이터베이스로 저장 시
toISOString()
의 동작toISOString()
은 UTC 기준의 ISO 8601 문자열을 반환합니다.2025-01-28T05:02:00.000Z
(Z
는 UTC를 나타냄).toISOString()
을 사용했을 경우 UTC 기준 시간으로 저장됩니다.3. 왜 브라우저와 DB의 시간이 다르게 보이는가?
브라우저:
Date
객체를 **로컬 타임존(KST)**으로 출력합니다.Tue Jan 28 2025 14:02:00 GMT+0900 (한국 표준시)
.DB에 저장된 시간:
toISOString()
을 사용해 저장하면, UTC 기준 시간이 저장됩니다.2025-01-28T05:02:00.000Z
.결과적으로 **DB에 저장된 값(UTC)**과 **브라우저 콘솔 출력(로컬 시간)**이 달라 보이게 됩니다.
4. 브라우저와 DB의 시간 차이를 해결하는 방법
4.1 데이터베이스에 한국 시간을 저장
toISOString()
대신 한국 시간 기준의 ISO 문자열을 생성해 DB에 저장하면 됩니다.kstISOString
을 저장하면 로컬 시간과 동일하게 보이게 됩니다.4.2 데이터베이스는 UTC로 저장, 로컬에서 변환
DB에 시간을 UTC로 저장하고, 클라이언트에서 읽을 때 로컬 시간으로 변환합니다. 이 방식은 국제화가 필요한 경우 권장됩니다.
저장 시:
읽어올 때:
5. 왜 이런 방식으로 동작하는가?
Date
객체:toISOString()
:TIMESTAMP
타입).6. 결론
+09:00
)을 저장하려면toISOString()
대신 직접 변환한 값을 사용.-> 우리는 팀원들의 빠른 구현을 위해 "DB에 한국 시간 기준 값(
+09:00
)을 저장하려면toISOString()
대신 직접 변환한 값을 사용"하는 것을 선택하여 적용Beta Was this translation helpful? Give feedback.
All reactions