깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • 자료 구조
  • 트러블 슈팅 Troubleshooting
  • Til
  • 점화식(Recurrence Relation)
  • TIT (Today I Troubleshot)
  • TypeScript
  • Trie
  • DFS(깊이우선탐색)
  • 시간 복잡도
  • 01. 미니 프로젝트
  • 혼자 공부하는 자바스크립트
  • Linked List
  • 재귀 함수
  • 최소 힙(Min Heap)
  • Binary Tree(이진 트리)
  • Leetcode
  • 코딩테스트 연습문제
  • 최대 힙(Max Heap)
  • BST(이진 탐색 트리)
  • 자잘한 에러 해결
  • leetcode-cli
  • Inorder Traversal(중위 순회)
  • tree
  • Backtracking(백트래킹)
  • 프로그래머스
  • 자바스크립트 기초 문법
  • 팀 프로젝트
  • BFS(너비우선탐색)
  • Preorder Traversal(전위 순회)
  • POST / GET 요청
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

3/27 월 (Timezone 트러블슈팅 정리중) TIL, TIT

2023. 4. 16. 02:55

(최종 프로젝트 진행중)

내일 할 일

  • 시간 차 트러블슈팅 정리하기


※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※

시간 차 트러블슈팅중…

UTC 적용전…

현재 사용하는 Timezone 정리:

분류타임존비고
AWS RDS DBMSUTC
TypeORMZ = UTCTypeORM에게 너가 연결할 DBMS는 UTC로 되어있다! 라고 알려주는 거죠.옵션에 timezone=’Z’라고 추가함
서버컴퓨터(Heroku) UTC아! 이 컴퓨터의 ‘로컬 타임’이 KST나 en-US 등이 아니고, UTC로 되어 있다는 뜻이었다..! 여기서 프론트에서 “Asia/Seoul”로 바꿔서 출력해주는 게 맞는 것이었다.
개발컴퓨터KST무시하자 = “Asia/Seoul”로 설정
  • 우선 OS 레벨의 타임존 설정은 사용하지 않기로 했어요. 왜냐하면 OS 레벨 타임존을 따를 경우, 개발할 때는 되다가 배포하면 안되는 상황이 생길 수 있기 때문입니다. (일명 제꺼에서는 되는데요..!? 현상) → 어떻게?
export const typeormConfig: TypeOrmModuleOptions = {
    ...
    timezone: 'UTC', // Z, UTC, KST, Asia/Seoul 등 입력 가능
    ...
};

(참고: https://techblog.wclub.co.kr/posts/0007.what-is-timezone/Timezone 맞춰주는 법 총정리)

(참고: heroku 타임존 디폴트 설정은 UTC다 : https://help.heroku.com/JZKJJ4NC/how-do-i-set-the-timezone-on-my-dyno)

(참고: 아마존 RDS 타임존 디폴트 설정도 UTC다: https://repost.aws/knowledge-center/rds-change-time-zone)

mysql 기본 timezone을 utc로 설정해보았다 (DBeaver로)

이전:

이후 (별 소용이 없다):

⇒ DB는 처음부터 UTC로 설정되어 있었고, 잘 들어가고 있었다.


이유는 모르겠지만 됐다. 아침에 찾아본 시간을 제외하고도 저녁 시간만 장장 5시간을 거쳐…

원인1: timezone: 'Z',

원인2: dbeaver 시간 세팅을 바꿈 (이건 불확실)

원인3: const created_at = post.created_at.toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' }); %>

⇒ 1과 3이 유력하다고 봄. 필요한 프론트마다 3을 적용시키면 되겠다.

필요한 곳: 댓글 날짜, 품앗이 begin과 end date.

⇒ 품앗이 게시글이 따로 놀았던 (잘 됐던) 이유도 알겠다. toLocaleString()을 거치지 않고 순수 초 단위로 계산해서 …

내일:

이거를 timezone:Z라고 해놓기 전과 후 ‘자유게시판 날짜 포맷’ 비교해보고,

그래서 그 이후로 진짜 힌트가 된 ‘어, 배표 환경은 서버 로컬 시간으로 포맷이 이루어진 것 같다!’는 차이점이 ‘생겨나서’ 발견하게 된 건지, 원래 있었는데 못봤던 건지 확인해보기.

더불어 아침에도 원인3을 적용해봤던 것 같은데 원인 1없이 해서 제대로 작동하지 않았던 게 맞는지도 확인해보기

⇒ 원인1만 리셋해놓고 전후 비교, 원인 3만 리셋해놓고 전후 비교, 이렇게 해보기.

그러니까, 서버 자체의 timezone은 UTC로 되어 있는데, 이게 toLocaleString()에서 먹는 옵션1번의 ‘로컬’은 또 미국이라고 인지를 하고 있었다. 그래서 년/월/일 시:분:초 PM 이런 식으로 출력이 됐고. toLocaleString()의 옵션1이 이렇게 인지하고 있다면 옵션 2도 똑같이 미국으로 인지하고 있지 않을까 해서 …저처럼 해봤더니 됐던 것이다. 하나 의문은, ‘로컬’을 es-us로 인식하고 있던 거라면, 왜 시간대 timeZone을 pst 등으로 나타내지 않고 uct 그대로 나타내었는가 하는 점이다. 옵션1이 인식하는 ‘로컬’과 , 옵션 2가 인식하는 ‘로컬시간’이 달라야만 이게 말이 된다.

(참고로 date-fns는 알아봤으나 이 문제를 해결하는 함수를 제공하지 않는 것 같아 스킵하였다)

(date-fns 메소드 소개글 - https://jsikim1.tistory.com/197)

참고로, 브라우저 타임존을 알아내는 코드:

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
=> Asia/Seoul 01:48:05.297

(참고: NHN의 프론트엔드 타임존에 대한 좋은 PPT - https://rlxuc0ppd.toastcdn.net/presentation/[NHN FORWARD 2020]프런트엔드 타임존 뽀개기.pdf)


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 3/29 수 (최종 발표 대본 제작) TIL
    • 3/28 화 (최종 발표 PPT 제작 및 자료 조사) TIL, TIT
    • 3/25 토 (중복 렌더링 트러블슈팅 완료) TIL, TIT
    • 3/24 금 (프로젝트 기술 질답(수정중)) TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바