본문으로 건너뛰기

[Spring Boot / JPA] @CreationTimestamp / @UpdateTimeStamp

2025년 5월 31일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.
여기에서 원본을 확인할 수 있습니다.

들어가며

Spring Boot로 API를 만들 때 최초 업로드 된 Timestamp와 해당 Entity를 업데이트 했을 때의 Timestamp를 서비스 단에서 LocalDateTime.now() 로 직접 수정하였다. 코드로 예를 들면 아래와 같다.

...
@Entity
class Project(
	...
	
	@Column(nullable = false)
	var uploadedAt: LocalDateTime? = LocalDateTime.now(),
	
	@Column(nullable = false)
	var updatedAt: LocalDateTime? = LocalDateTime.now(),
	
	...
)
...
@Transactional
fun modifyProject(projectRequestDto: ProjectRequestDto): ResponseEntity<Any> {
	...
	projectRepository.save(
		Project(
			...
			updatedAt: LocalDateTime.now(),
			...
		)
	)
	...
}
...​

하지만, Hibernate에서는 Entity 객체가 Insert 또는 Update 쿼리가 발생 될 때 자동으로 현재 시간을 저장해 주는 Annotation(@CreationTimestamp / @UpdateTimestamp 를 제공하여 불필요한 코드를 줄일 수 있었다.

사용해보기

...
@Entity
class Project(
	...
	
	@Column(nullable = false)
	@CreationTimestamp
	var uploadedAt: LocalDateTime? = null,
	
	@Column(nullable = false)
	@UpdateTimestamp
	var updatedAt: LocalDateTime? = null,
	
	...
)

위와 같이 Entity를 수정하면, 서비스 단에서 업로드 또는 업데이트가 될 때마다 현재 시간을 업데이트 해주지 않아도 INSERT 또는 UPDATE 쿼리가 발생하면, 자동으로 현재 시간을 저장 또는 업데이트 해 준다. 특히 @UpdateTimestamp Annotation은 업데이트가 자주 이루어지는 Entity에서 자주 사용할 것 같다.