인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

martin님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

process 객체를 이용해서 환경변수 불러오기

timezone 관련

작성

·

82

0

안녕하세요 선생님.

질문이 있습니다!

 

  @CreateDateColumn({
    name: 'mb_regs_tm',
    type: 'timestamp',
    comment: '등록일시',
  })
  regs_tm: Date;

  @UpdateDateColumn({
    name: 'mb_mod_tm',
    type: 'timestamp',
    nullable: true,
    comment: '수정일시',
  })
  mod_tm: Date;

위 데코레이션으로 만든 컬럼은 따로 시간을 지정해주지 않다보니 자동으로 UTC로 값이 설정되는데요.

문제는

  @Column({
    name: 'mb_exp_tm',
    type: 'timestamp',
    nullable: true,
    comment: '만료일시',
  })
  exp_tm: Date;

이 컬럼의 경우

export function getExpirationDate(days: number): Date {
  const now = new Date();
  return new Date(now.setDate(now.getDate() + days));
}

위의 함수를 사용하여 데이터가 생성된 날로부터 90일을 더한 값으로 만료일을 설정하거든요.


근데 mb_exp_tm 컬럼만 KST로 설정되고 나머지 mb_regs_tm, mb_mod_tm는 UTC로 데이터가 저장됩니다.

 

https://github.com/typeorm/typeorm/issues/5841

위 이슈에서도 제가 현재 고민하고 있는 부분에 대해 얘기하고 있지만 명확한 답은 아직 찾질 못해서요.

혹시 위 문제에 대한 해결책을 들을 수 있을까요?

답변 3

0

martin님의 프로필 이미지
martin
질문자

제가 읽다가 놓친 부분이 있었네요ㅜ timezone 대신 timestamp with time zone 타입을 사용하여 해당 이슈를 해결했습니다. 감사합니다.

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

제가 보기엔 말씀해주신 이슈에 답이 있는 것 같은데 적용 안되실까요?

https://github.com/typeorm/typeorm/issues/5841#issuecomment-809909776

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. martin님.

TypeORM에서 타임스탬프 컬럼을 사용할 때, 자동으로 UTC로 저장되는 경우와 필요한 경우 KST 등 다른 시간대로 저장하고자 하는 문제에 관한 질문을 주셨네요.

이러한 문제를 해결하기 위해서는 시간대 변환에 대한 설정을 명확히 하거나, 날짜 계산 시 라이브러리를 사용하는 방법을 고려할 수 있습니다.

해결 방안

  1. 데이터베이스 레벨에서 설정:
    대부분의 경우, UTC로 저장하는 것은 좋은 습관입니다. 이는 서버나 클라이언트의 타임존에 관계없이 일관된 데이터를 유지할 수 있기 때문입니다. 서버에서 데이터를 가져올 때, 클라이언트의 시간대에 맞춰 변환하는 것이 일반적입니다.

  2. 애플리케이션 레벨에서 변환:

    • date-fns-tz와 같은 라이브러리를 사용하여 애플리케이션 레벨에서 시간대 변환을 조정할 수 있습니다.

    ”`typescript
    import { zonedTimeToUtc } from ‘date-fns-tz’;

const expirationDate = getExpirationDate(90);
const utcExpirationDate = zonedTimeToUtc(expirationDate, ‘Asia/Seoul’);
“`
위처럼 변환된 날짜를 저장하도록 코드 수정이 가능합니다.

  1. 데이터베이스 Connection 옵션 설정:
    만약 MySQL 등을 사용하고 있다면, TypeORM의 연결 설정 시 옵션을 통해 서버 시간대를 KST로 설정할 수 있습니다. 그러나 이는 추천하지 않습니다. 일관성 있게 UTC를 유지하고 프론트엔드에서 변환하는 것이 유지보수 측면에서 더 유리합니다.

기존 문의와 유사한 해결 방안에 대해 논의한 내용을 추가로 참고하시려면, 아래 게시글이 도움될 수 있습니다:
- typeorm timezone 관련 문제 해결 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

martin님의 프로필 이미지

작성한 질문수

질문하기