프로젝트

개발지원

  • 운영서버에 강의 6개 생성 -> 동료분과 3개씩 나눠서 개설 완료
  • 운영서버에서 수강신청 시 사용자 정보 불러오는 기능 확인

개발

설문통계 2번째 쿼리 진행 중

  • 기수별 통계 결과 조회 쿼리는 오래 안걸렸는데 예시 파일을 보면 내가 조회한 결과의 행렬이 바껴있는 형태이다.
  • 행렬을 바꾸는 기능을 검색해보니 pivot 등이 있는데 잘 모르겠다.. 왜 안되는 걸까?
  • pivot이 아니라 그냥 case when을 사용해서 만드는 방법도 찾아봤는데 문제는 컬럼이 될 값이 항상 고정되는 것이 아니라 변하는 값이라는 점이다. 그거때문에 인터넷 예제를 그대로 적용할 수가 없다.
  • 일단 통계 결과는 제대로 나오기 때문에 내일은 현재 쿼리로 화면을 만들 생각이다.

사이드

작성시간 9시간 차이나게 표시되는 문제

로컬에서는 작성 시간이 정확히 저장되고 표시되는데, 운영 서버에서는 현재시간에서 9시간 적게 표시되는 문제가 있었다. 예전에도 비슷한 문제가 있었는데 timezone 설정이 원인이었어서 하나씩 체크해보았다.
1. 소스 코드 확인
2. 운영 서버 DB timezone 설정 및 저장된 데이터 확인
3. 운영 서버 시간대 설정 확인

1. java : localDateTime() -> Instant()

java 날짜 및 시간 유형 차이
원래 현재 시간을 측정할 때 LocalDateTime 클래스를 사용했는데 다른 팀원분이 찾아본 결과 LocalDateTime은 시간대를 나타내는 데 주로 사용하고, Instant라는 클래스는 특정 시각을 나타내는 데 주로 사용한다는 것을 알려주셨다.
LocalDateTime을 찾아서 Instant로 단순치환해서 실행해봤는데 에러 없이 돌아가는 것을 보니 메소드 명 등 사용법은 같은 듯하다.

하지만 처음 찾으려고 했던 시간대 문제는 운영에서만 일어나고 로컬 서버에서는 시간 문제가 없어서 운영서버 환경의 문제라는 생각이 들었다.

2. mysql datetime,timestamp

mysql timezone 설정 확인 및 변경
운영서버 환경 문제라고 생각하고 처음 확인한 것은 운영서버의 mysql DB의 timezone 설정이다. mysql에서 시간을 저장하는 데이터 타입은 여러가지가 있는데, 그 중 자주 사용하는 것이 Datetimetimestamp이다. 두 개의 차이점을 잘 몰랐는데, timezone 정보를 포함하고 있는지 여부가 다르다고 한다.
혹시 DB에 시간이 다르게 저장되고 있는지 데이터를 확인해봤는데, timezone을 저장하지 않는 datetime 타입이고 데이터도 현재 한국시간 기준으로 잘 저장되고 있었다.

운영서버의 DB에도 시간은 한국시간으로 잘 저장되는 것을 보니 결국 DB 저장까지도 문제없고, 화면에서 보여줄 때 시간을 변환한다는 것을 알 수 있었다.
마지막으로 혹시 서버 시간대가 다르게 설정되어있는지 확인해보았다.

3. ubuntu timezone

homey 프로젝트의 운영서버는 사내 서버자원을 일부 빌려서 운영되는 형태였는데, 사실 서버 환경설정을 직접 해보지는 못했기 때문에 시간대가 다를 수 있다는 생각을 못했다.

혹시나 해서 검색해보니 잘 정리된 글을 발견해서 우분투 서버의 시간대를 확인해보았더니 역시! Asia/Seoul이 아닌 UTC~로 되어있는 것을 볼 수 있었다.
ubuntu timezone 확인 및 변경하기


글에서 설명하는 대로 시간대를 원하는 것으로 바꾸어 주니 소스코드나 DB 설정, 데이터를 변경하지 않아도 알아서 웹사이트에서 정확한 시간대로 출력되었다.

profile
문서화를 좋아하는 개발자

0개의 댓글