백엔드/AWS

[AWS] EC2 내부 MariaDB 시간 설정

mike705114 2024. 9. 18. 19:59

1. 문제 발생

졸업 작품을 진행하던 도중, 게시글을 올렸을 때 시간이 현재 시간보다 9시간 느리다는 것을 발견했다.

서버의 시간을 KST로 설정해 놓았기 때문에 시간이 맞아야 했지만, 왜 이런 문제가 발생했는지 의문이었다.

 

2. 문제 원인

문제를 분석해 보니, EC2 인스턴스 내의 MariaDB에서 시간 설정을 별도로 하지 않았다는 사실을 발견했다.

MariaDB는 기본적으로 UTC를 사용하므로, 서버 시간과 데이터베이스 시간 사이에 차이가 발생할 수 있다.

MariaDB 설정 파일을 수정하기로 결정했다. 설정 파일을 열어 기본 시간대를 KST로 변경했다:

sudo nano /etc/mysql/my.cnf

설정 파일에 다음과 같은 내용을 추가했다:

default-time-zone='+09:00'

이 설정은 MariaDB가 기본적으로 UTC에 9시간을 더하여 KST를 사용하도록 지시한다.

SQL 쿼리로도 설정할 수 있지만, 서버가 재부팅될 때마다 설정을 다시 해야 하는 불편함이 있어서 설정 파일을 직접 수정하는 방법을 선택했다.

 

3. 문제 해결

MariaDB에 접속하여 현재 시간을 확인한 결과, 서버 시간과 동일하게 변경된 것을 확인했다.

이제 데이터베이스에서의 시간문제는 해결된 것처럼 보였다.

하지만.... 역시 한번에 해결될 일은 없었다...

배포된 프로젝트를 실행하고 회원가입을 시도했을 때, 여전히 시간이 제대로 적용되지 않는 문제가 발생했다.

 

무엇이 문제일까....

로그를 확인해 보니, JAR 파일을 실행할 때 시간대 설정이 적용되지 않는다는 것을 발견했다.

 

4. 문제 해결2

문제를 해결하기 위해 JAR 파일을 실행할 때 시간대 옵션을 추가하는 방법을 사용했다.

기존의 배포 스크립트를 수정하여 -Duser.timezone=Asia/Seoul 옵션을 추가했다.

최종 스크립트는 다음과 같다:

REPOSITORY=/home/ubuntu
PROJECT_NAME=PublicPlace_BE

cd $REPOSITORY/$PROJECT_NAME

echo "> Git Pull"
git pull

echo "> 프로젝트 Build 시작"
./gradlew clean bootjar

echo "> step1 디렉토리 이동"
cd $REPOSITORY

echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> 현재 구동적인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

if [ -z "$CURRENT_PID" ]; then
    echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
    echo "> kill -15 $CURRENT_PID"
    kill -15 $CURRENT_PID
    sleep 5
fi

echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -Duser.timezone=Asia/Seoul -jar $REPOSITORY/$JAR_NAME > backend.log 2>&1 &

이제 -Duser.timezone=Asia/Seoul 옵션을 추가하여 JAR 파일을 실행하니, 시간대가 제대로 적용되었다.

게시글의 시간이 서버 시간과 정확히 일치하게 되었고, 문제를 성공적으로 해결할 수 있었다. 만세!