230320 TIL #37 DB 시간 설정 / 작성시간 소수점 삭제

김춘복·2023년 3월 19일
0

TIL : Today I Learned

목록 보기
37/571

230320 Today I Learned

미니프로젝트 4일차.


DB 시간 설정

RDS 시간 설정 방법 참고사이트

  • 문제점 : 게시글을 작성할 때, timestamped로 entity에서 구현했던 작성시간이 현재 한국시간보다 9시간 늦게 반영되어있는 것을 확인했다.

  • 시도 : aws 서버쪽 시간이 잘못 설정되어있다고 생각해서 git bash로 접속을해서 시간을 봤지만 정상적으로 시간이 떠 있었다.
    그래서 조금 더 생각해보니 timestamped가 작성 시간을 생성하는 곳은 DB였기 때문에 AWS RDS DB쪽 시간을 체크해보았다.
    콘솔창에 SELECT NOW();를 입력하니 9시간 이른 UTC(Coordinated Universal Time)시간으로 맞춰져 있었다.

  • 해결 : AWS RDS 파라미터 생성으로 들어가서 time/zone을 Asia/Seoul로 맞춰주고 RDS를 즉시반영으로 세팅해서 재부팅하니 해결되었다.
    이 방법말고 직접 MySQL에서 쿼리를 날려 직접 바꾸는 방법도 있는데, 여기를 참고해보자.

  • 알게된 것 : TimeStamp를 Entity에서 상속해서 작성시간을 구현하면 DB쪽 시간을 따른다.

적용 실패

  • 파라미터 바꿔보고 쿼리로 +9시간 추가도 해봤는데 RDS 재부팅해봐도 적용이 제대로 되지 않았다.
  • 임시 방편으로 아래의 코드를 Timestamped에 추가해서 작성시간에 9시간을 더해서 저장하는 방식으로 1차적으로 해결은 했는데 임시방편은 임시방편일뿐이니 나중에 수정은 해야한다.
    @PrePersist
    public void prePersist() {
        this.createdAt = this.createdAt.plusHours(9);
    }

작성시간 소수점 삭제

  • TimeStamped를 상속해서 작성시간을 체크할경우 소수점 초까지 같이 나와서 거슬린다.
    그걸 다듬으려면 DTO에서
this.createdAt = post.getCreatedAt().withNano(0);

이런식으로 .withNano(0)를 붙이면 깔끔하게 나온다.

  • 아니면 DB에서 애초에 저장될 때 TimeStamped의 값을 변경하는 방법도 존재하는데 이건 구글링 하면 잘 나오니 필요할 때 찾아보자.
profile
Backend Dev / Data Engineer

0개의 댓글