๋ฌธ์ ์ํฉ
๋ฌธ์ ์ํฉ์ ์ด๋ฌ๋ค.
๋ด๊ฐ 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๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
- volume ์ ์ด์ฉํด์ HOST PC ์ Timezone ์ Link ํ๊ธฐ
- 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๋ก ์ ์ค์ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
๋๊ธ