인프런 커뮤니티 질문&답변

보물섬님의 프로필 이미지
보물섬

작성한 질문수

실전! 스프링 데이터 JPA

Auditing

서버가 여러대일때 createdDate, updatedDate 처리?

작성

·

454

0

안녕하세요.

보통 createdDate 나 updatedDate 같은걸 등록할때 서버쪽에서 시간을 얻어서 등록하나요?

만약 서버가 여러개 있다고 할때 각 서버마다 아주 미세하게 시간이 다를수도 있을거 같은데요.

그럼 실제 A서버에서 등록한 시간이 B서버에서 등록한 시간보다 느린데 빠르게 등록될수도 있을거같아서요.

차라리 db에서 제공하는 default값이나 트리거등으로 값을 넣어주는게 확실하고 더 낳지 않나요?

실무에선 보통 어떻게 처리하는지 궁금합니다.

1. 외부타임서버에서 가져오는건 시간 텀이 있을수 있으니 내부에 NTP서버를 두고 시간갱신을 한다.

이떄 NTP클라이언트들의 시간갱신을 텀을 보통 얼마나 주는지도 궁금합니다. 24시간씩 두지는 않을거 같고 6시간? 1시간? 10분?

2. 시간이 중요할거 같으면 db에서 처리한다.

그리고 시간업데이트할떄 연관된 엔티티끼리의 createdDate 시간은 같이 맞추나요? 아님 조금 차이가 나둬 상관없으니 각각 시간을 구해서 업데이트하나요? 아님딱히 중요한건 아니니 그냥 개별로 업데이트 하나요?

예를들어 ORDER, ORDER_ITEM, DELIVERY, ORDER_HISTORY(ORDER와 N:1의 crud내역) 엔티티가 있을때 같은 주문일경우 각각의 엔티티의 시간을 똑같이 맞추나요? 아님 시간차이가 조금 나도 상관없으니 그냥 엔티티별로 createdDate, updatedDate를 업데이트하나요?

그리고 새 강의 계획은 언제쯤 인지 알수 있을까요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 보물섬님

서버 시간을 내부에서 동기화 하는 프로그램을 사용하기 때문에 이 부분은 그렇게 문제가 되지는 않습니다.

동기화 프로그램과 관련해서는 다음을 참고해주세요. 폴링 주기에 대해서는 어떻게 동작하는지는 잘 모르겠습니다.

https://aws.amazon.com/ko/blogs/korea/keeping-time-with-amazon-time-sync-service/

DB 시간 뿐만 아니라 애플리케이션이 남기는 로그까지 여러가지가 다 중요합니다. 그리고 시간 체크를 할 때 애플리케이션에서 체크하는 로직도 많기 때문에 결국 애플리케이션의 시간을 동기화 하는 것이 중요합니다.

그리고 시간이 정말 중요한 경우에는 createDate 처럼 단순히 테이블에 데이터가 저장된 시간을 사용하지 않습니다.

별도의 컬럼을 만들고, 해당 컬럼으로 시간을 수동으로 직접 입력해줍니다.

예를 들어서 주문시간 같은 경우 23:59:59초와 1초 뒤에 하루라는 날짜 차이가 있고, 이 1초 때문에 하루전에 주문한 것인지 다음날에 주문한 것인지가 판명납니다.

이처럼 비즈니스상 중요한 시간은 애플리케이션에서 별도의 주문날짜 같은 컬럼을 파서 사용하고, 필요한 테이블들도 이 데이터를 함께 싱크를 맞추어서 DB에 저장합니다.

다음 강의인 MVC2편은 6월 중 출시예정 입니다^^ 분량이 많아서 좀 걸리네요 ㅎㅎ

(3주 정도는 걸리지 않을 까 예상해봅니다.)

감사합니다.

보물섬님의 프로필 이미지
보물섬

작성한 질문수

질문하기