๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐ŸŽ› Others.../- infra [linux, aws, docker, k8s]

Docker Timezone์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ(UTC to KST) ํ•ด๊ฒฐํ•˜๊ธฐ

by Wonit 2021. 8. 18.

๋ฌธ์ œ ์ƒํ™ฉ

 

๋ฌธ์ œ ์ƒํ™ฉ์€ ์ด๋žฌ๋‹ค.

 

๋‚ด๊ฐ€ Spring Boot Application ์œผ๋กœ Backend API ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„๋ฅผ Dockerizing ํ•˜์˜€๋‹ค.

 

ํ•ด๋‹น Application ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€์—์„œ ์ดˆ๊ธฐ initial data ๋ฅผ ์œ„ํ•ด์„œ import.sql ๋กœ ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  Controller ์—์„œ ์ œ๊ณตํ•˜๋Š” API ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ -24์‹œ๊ฐ„ ๊นŒ์ง€์˜ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ณ„์†ํ•ด์„œ 500 Internal Server Error ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

 

 

๊ทธ๋ž˜์„œ ์–ด๋–ค ๋ฌธ์ œ์ธ์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด์„œ docker logs ๋ฅผ ํ†ตํ•ด์„œ ๋‚ด๋ถ€๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์˜ Application Layer ์˜ ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋‹ˆ

 

 

์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ด ์—๋Ÿฌ๋Š” ์•ž์„œ ์ด์•ผ๊ธฐํ•œ Application ์—์„œ ์ผ๋ถ€๋Ÿฌ ์˜ˆ์™ธ๋กœ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฌธ์ œ๊ณ  ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ์ธ์ง€ ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ์ž„์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฒ˜์Œ์—๋Š” ์™œ ์ด๋ ‡๊ฒŒ ๋˜๋Š”์ง€ ๋ชฐ๋ž๋‹ค๊ฐ€ ๋„์ปค๋ผ์ด์ง• ํ•œ Application ์—์„œ๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด๊ณ  Docker App ๊ณผ ๋‚ด Host PC ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ๋ญ๊ฐ€ ์žˆ์„๊นŒ? ๋ฅผ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์›์ธ

 

์›์ธ์€ ๊ฐ„๋‹จํ•˜๋‹ค.

 

๋‚ด๊ฐ€ ๋งŒ๋“  API ๋Š” DB์— ์กฐํšŒํ•  ๋•Œ, Timestamp Between ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํ˜„์žฌ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ -24์‹œ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค๊ณ  ์ด์•ผ๊ธฐ ํ–ˆ์—ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๋งŒ๋“  ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋Š” *KST๋ฅผ ๊ธฐ์ค€ ์œผ๋กœ *insert ๋˜์–ด์žˆ๊ณ , ๋„์ปค๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” *UTC, GMT ๋ฅผ ๊ธฐ์ค€์œผ๋กœ *๋Œ์•„๊ฐ€๋ฏ€๋กœ ๊ณ„์†ํ•ด์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ docker exec ๋ช…๋ น์–ด๋กœ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ๊ฐ„์„ ํ™•์ธํ•ด๋ณด๋‹ˆ

 

 

์—ญ์‹œ๋‚˜ UTC๋กœ ๋˜์–ด์žˆ์—ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 

์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

 

  1. volume ์„ ์ด์šฉํ•ด์„œ HOST PC ์— Timezone ์„ Link ํ•˜๊ธฐ
  2. tzdata ๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ Timezone ์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ

 

volume ์„ ์ด์šฉํ•ด์„œ HOST PC ์— Timezone ์„ Link ํ•˜๊ธฐ

 

$ sudo docker run ...
  -v /etc/localtime:/etc/localtime

 

์—ฌ๋Ÿฟ ๋ธ”๋กœ๊ทธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด HOST PC ์˜ localtime ์„ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ด์•ผ๊ธฐํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ Host PC๊ฐ€ Window ์ธ ๊ฒฝ์šฐ์—๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋งŽ์ด ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ๊ณ ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œํ•ด๊ฒฐ์„ ํ•˜๋ ค ํ–ˆ์œผ๋‚˜ ์ œ ๊ฒฝ์šฐ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.. ํ˜น์‹œ ์ด์— ๋Œ€ํ•œ ๋‹ต์ด ์žˆ์œผ์‹  ๋ถ„๋“ค์€ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

tzdata ๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ Timezone ์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ

 

tzdata ๋Š” Timezone ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ์„ธ๊ณ„ ํ‘œ์ค€์‹œ๊ฐ„๋Œ€์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

tzdata ๋ฅผ ์„ค์น˜ํ•ด์„œ local time ์„ ๋™์ ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

 

FROM openjdk:17-ea-11-jdk-slim

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apt-get install -y tzdata

WORKDIR /server

COPY ./build/libs/L7-Monitor-0.0.1-SNAPSHOT.jar l7-monitor.jar

ENTRYPOINT ["java", "-jar", "l7-monitor.jar"]

 

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด KST๋กœ ์ž˜ ์„ค์ •๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ“๊ธ€