[TIL] 230720 데이터저장 UTC에서 KST로?

CountryGirl·2023년 7월 20일
0

TIL

목록 보기
29/80

📌 문제점 & 시도 & 해결

RDS에 저장을 할 때, RDS에서는 저장 시간을 국제 표준시 UTC로 저장이 된다...

마니또 쪽지를 보낼 때, RDS에 저장이 되고 나중에 다시 보낸 쪽지함과 받은 쪽지함에서 조회를 할 때 문제가 생겼다.

자정이 지난 시간에 쪽지는 2023-07-21이 나와야한다.
하지만 계속 전날로 날짜가 찍혔다.

그래서 RDS를 보니 UTC 기준으로 데이터가 저장되고 있었다.

코드를 테스트할 때는 로컬에서 하다보니까 여기까지는 생각도 하지 못했다.

그래서 9시간을 더해서 저장을 할 수 있도록 코드를 구현하였다.

Auditing을 사용하였고, LocalDateTime으로 만들었다.

✅ 시도 #1

@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime now;
private LocalDateTime createdAt = now.plusHours(9);

LocalDateTime 으로 현재시간에 9시간을 더해주는 코드를 작성하였다.

하지만 이렇게 하게 되면 now라는 column이 하나 더 생긴다.
필요하지 않은, 사용하지 하는 column이 생긴다는 아주 큰 단점이 생겼다.

✅ 시도 #2

그래서 합쳐보았다.

private LocalDateTime createdAt = LocalDateTime.now().plusHours(9);

이렇게 합쳐서 사용하지 않는 now column을 생성하지 않도록 하였다.
하지만 이렇게 구현했을 때는 다시 9시간이 더해지지 않았다.
뭐가 문제인지 모르겠다.

그래서 다른 방법을 찾아보았다.

✅ 시도 #3

@Temporal(TemporalType.TIMESTAMP)
private Date createdAt = new Date();

@PrePersist
public void prePersist() {
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(new Date());
	calendar.add(Calendar.HOUR, 9);
	createdAt = calendar.getTime();
}

@PrePersist
: DB 에 해당 테이블의 insert 가 실행할 때 같이 실행한다.

이것을 이용해서 현재 시간에 더해질 수 있도록 하였다....

✅ 시도 #4

하지만 프론트에 보냈을 때는 이미 9시간을 더해서 보내주었는데 또다시 9시간이 더해져서 총 18시간이 더해지는 문제가 발생했다.
분명 프론트에서 9시간을 더해주는 로직을 다 지우셨다고 하셨다.

그래서 더하지 않고 보내려고 했지만
마니또를 매칭하는 로직도 UTC 기준으로 작동을 하기 때문에 어쩔 수 없이 9시간을 더해주고
보낸 쪽지함과 받은 쪽지함에 response 해주는 Dto에서 다시 9시간을 빼주었다............

public SendMessageResponseDto(Message message) {
	this.contents = message.getContent();
	this.getPersonUsername = message.getMessageReceiver().getUsername();
	this.sendDay = adjustTimeByHours(message.getCreatedAt(), -9);
}

private Date adjustTimeByHours(Date date, int hours) {
	Instant instant = date.toInstant();
	OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.UTC).plusHours(hours);
	return Date.from(offsetDateTime.toInstant());
}

프론트에게 응답을 보낼 때는 다시 9시간을 빼주어서 반환하는 로직을 구현하였다.......

이렇게 해주어서 원하는 값을 프론트에게 전달할 수 있었다...

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글