본문 바로가기
Database/Oracle

[ORACLE] SESSIONTIMEZONE() 함수로 글로벌 애플리케이션 시간대 문제 해결

by Papa Martino V 2025. 6. 5.
728x90

오라클 SESSIONTIMEZONE() 함수로 글로벌 애플리케이션 시간대 문제 해결
[Oracle] SESSIONTIMEZONE

 

SESSIONTIMEZONE() 함수는 Oracle SQL에서 현재 세션의 시간대(Time Zone)를 반환하는 함수입니다. 글로벌 환경에서 운영되는 애플리케이션에서는 세션별 시간대 처리가 매우 중요하며, 이 함수는 그러한 시간대 차이를 식별하고 관리하는 데 유용합니다.

1. SESSIONTIMEZONE() 함수란?

SESSIONTIMEZONE 함수는 현재 세션에 설정된 시간대를 문자형(예: '+09:00')으로 반환합니다. 반환 형식은 VARCHAR2입니다.

문법:

SELECT SESSIONTIMEZONE FROM dual;

예시:

-- 예: KST 기준 세션
SELECT SESSIONTIMEZONE FROM dual;
-- 결과: '+09:00'

2. SESSIONTIMEZONE의 필요성

  • 글로벌 사용자 대상의 웹 애플리케이션에서 사용자별 시간 처리를 위함
  • 서버와 사용자 간 타임존 불일치에 따른 오류 방지
  • 오라클의 TIMESTAMP WITH TIME ZONE 또는 SYSTIMESTAMP와 함께 활용

3. SESSIONTIMEZONE 설정 변경

ALTER SESSION 문을 사용해 세션 타임존을 변경할 수 있습니다.

ALTER SESSION SET TIME_ZONE = '-05:00';

변경 후 확인:

SELECT SESSIONTIMEZONE FROM dual;
-- 결과: '-05:00'

4. DBTIMEZONE과의 비교

DBTIMEZONE은 데이터베이스 수준에서 설정된 기본 시간대이고, SESSIONTIMEZONE은 접속한 세션별 시간대입니다.

항목 DBTIMEZONE SESSIONTIMEZONE
기준 데이터베이스 시스템 세션 사용자
변경 여부 ALTER DATABASE ALTER SESSION
용도 타임스탬프 저장 기준 타임스탬프 조회/입력 기준

5. 실무 활용 예제

5-1. 현재 세션의 시간대 확인

SELECT SESSIONTIMEZONE FROM dual;

5-2. 세션 시간대를 기준으로 타임스탬프 출력

SELECT SYSTIMESTAMP AT TIME ZONE SESSIONTIMEZONE AS local_time FROM dual;

5-3. 세션 기준 시간대로 데이터 변환

SELECT FROM_TZ(CAST(CURRENT_TIMESTAMP AS TIMESTAMP), DBTIMEZONE) AT TIME ZONE SESSIONTIMEZONE AS adjusted_time
FROM dual;

5-4. 사용자 입력을 세션 시간대로 맞추기

-- UTC 시간 → 세션 시간대로 변환
SELECT FROM_TZ(TIMESTAMP '2025-06-01 00:00:00', 'UTC') AT TIME ZONE SESSIONTIMEZONE AS session_converted
FROM dual;

6. 시간대 표현 형식

  • '+09:00' 또는 '-05:00' 등 오프셋 형식
  • 'Asia/Seoul', 'America/New_York' 등 이름 형식 (Oracle 11g 이후 지원)

7. SESSIONTIMEZONE 관련 주의사항

  • ALTER SESSION은 DB 권한에 따라 제한될 수 있음
  • 세션 설정은 접속 종료 시 사라짐 (영구적 아님)
  • TIMESTAMP WITH TIME ZONE 유형은 자동으로 시간대 정보를 포함함

8. 관련 함수 정리

  • SYSTIMESTAMP: 세션 기준 타임스탬프
  • CURRENT_TIMESTAMP: 세션 기준 현재 시각
  • DBTIMEZONE: DB의 기본 시간대
  • FROM_TZ: 타임스탬프에 타임존 적용
  • AT TIME ZONE: 타임스탬프 시간대 변환

9. 요약

SESSIONTIMEZONE() 함수는 오라클에서 시간대 관리의 핵심입니다. 특히 글로벌 환경에서 시간 정보를 정확하게 처리하기 위해서는 세션 기반 시간대 설정과 변환이 필수적입니다. 본 글에서 다룬 실무 예제들을 잘 응용하면 시간대 관련 오류를 효과적으로 예방할 수 있습니다.

참고자료

728x90