강의

멘토링

로드맵

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

JS Hong님의 프로필 이미지
JS Hong

작성한 질문수

초보자를 위한 BigQuery(SQL) 입문

4-5. 시간 데이터 연습 문제 1~2번

4-5. 1번 문제 TIMESTAMP 관련 질문

해결된 질문

작성

·

46

0

SELECT
TIMESTAMP(DATETIME(CURRENT_TIMESTAMP(), 'Asia/Seoul')),
CURRENT_TIMESTAMP()

위와 같이 쿼리를 실행시키면

2025-08-12 02:15:03.434744 UTC

2025-08-11 17:15:03.434744 UTC

아래와 같이 출력됩니다.

 

저는 이를 보고 TIMESTAMP 값이 서울 시간대로 설정이 되어 있더라도 그게 출력 결과물만 보고는 판단할 수 없는건가? 라는 생각을 하게 됐습니다.

위와 같이 어느 지역의 시간대가 반영됐는지가 timestamp값에 UTC+9와 같은 방식으로 반영되있지 않다면 어떻게 저희가 그걸 판단할 수 있나요?

train_pokemon 테이블의 catch_datetime 변수(필드)도 서울 시간대(UTC+9)인지, UTC+0인 시간대인지 판단할 수 없는 거 아닌가요?

 

감사합니다.

 

 

답변 2

1

카일스쿨님의 프로필 이미지
카일스쿨
지식공유자

안녕하세요. 인프런 AI 인턴이 잘 설명해줬네요. TIMESTAMP는 절대적인 시간을 표현하기 때문에 TIMESTAMP만 보고 어느 시간대인지 알 수 없습니다. 말씀해주신 말씀이 맞습니다.

 

다만 지금 해주신 TIMESTAMP -> DATETIME -> TIMESTAMP는 잘 사용하지 않습니다. 연산이 반복되기도 하고(쿼리 퍼포먼스 이슈), 혼란을 유발할 수 있기 때문입니다. 그리고 굳이 다시 TIMESTAMP로 바꿀 이유가 없거든요. TIMESTAMP -> DATETIME을 쓰거나 그냥 TIMESTAMP(UTC+0이라고 가정하고) 사용하는 경우가 많습니다.

 

catch_datetime의 경우 서울 시간대인지 UTC 0인지 판단하기 어렵기 때문에 강의에서 catch_date랑 같은지 확인하는 과정을 보여드렸습니다(catch_date와 DATE(catch_datetime)이 일치하는지 확인)

 

보통 DATETIME을 다시 TIMESTAMP로 저장하진 않기 때문에, 암묵적으로 UTC라고 하면 UTC+0이라고 가정하고 DATETIME이라고 하면 한국이라고 하곤 합니다. 물론 글로벌 서비스라고 하면 상황이 달라질 것 같네요. 이런 것들은 보통 회사에 컬럼에 대한 정의를 작성한 문서가 있어서 그걸 보고 판단하게 됩니다. 데이터 거버넌스의 영역입니다. 컬럼의 정의와 어떤 값이 들어가는지, 부가적인 설명을 추가합니다. 지금 강의에선 간단하게 설명하기 위해 강의 초반에만 설명드린거고 실제 회사의 데이터는 이런 스키마에 대한 문서가 있어야 데이터를 확인하기 좋습니다. 하지만 없는 회사들도 꽤 많을 거예요.

JS Hong님의 프로필 이미지
JS Hong
질문자

친절한 답변 감사합니다 카일님. 특히 마지막 문장이 제가 경험했던 일이기도 해서 공감이 되네요ㅠㅠ 답변 감사합니다!

0

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

질문하신 내용은 TIMESTAMP와 시간대(Time zone)에 관한 이해를 돕기 위한 좋은 사례입니다. TIMESTAMP 데이터 타입은 일반적으로 UTC(표준시)로 저장됩니다. 서울 등의 특정 시간대를 표현하기 위해 TIMESTAMP는 표준 시간대 정보가 표시되지 않기 때문에, TIMESTAMP 데이터를 사용할 때는 관련 시간대 정보를 명시적으로 적용해야 합니다.

TIMESTAMP와 시간대 처리

TIMESTAMP는 기본적으로 UTC로 처리되기 때문에, 지역 시간대를 알고 싶다면 TIMESTAMP를 DATETIME으로 변환하면서 특정 시간대를 명시하는 것이 필요합니다. 예를 들어, 아래와 같이 CURRENT_TIMESTAMP를 ‘Asia/Seoul’ 시간대로 변환하여 확인할 수 있습니다.

SELECT
  TIMESTAMP(DATETIME(CURRENT_TIMESTAMP(), 'Asia/Seoul')) AS seoul_time,
  CURRENT_TIMESTAMP() AS utc_time;

특정 시간대의 판별

각 필드가 어떤 시간대로 저장되어 있는지를 판단하는 것은 데이터 제공 시 명시된 문서나 정의된 스키마를 참조해야 합니다. 예를 들어, train_pokemon 테이블의 catch_datetime 필드는 보통 SQL 및 데이터베이스 문서에 설명되어 있을 것입니다. 이런 문서를 통해 시간대 정보를 확인해야 합니다.

관련된 다른 질문들

아래의 유사한 질문과 답변을 통해 시간대 문제와 TIMESTAMP 처리 방법에 대한 추가적인 인사이트를 얻을 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

JS Hong님의 프로필 이미지
JS Hong

작성한 질문수

질문하기