💡 게시판 - JPA Auditiong으로 작성 시간 추가

2026. 7. 20. 21:31·Project/나의 작은 프로젝트

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

보통 Entity는 해당 데이터의 생성시간과 수정시간을 포함한다. 이러한 생성/수정 정보는 후에 유지보수에 있어서 굉장히 중요한 정보이기 때문에 항상 데이터와 함께 저장해주는게 좋다. 하지만 이를 매번 DB에 삽입할때 날짜 데이터를 등록/수정하는 코드를 만들어 주는 것은 코드도 너무 지저분하고, 너무 많은 노동력이 들어가는 일일 것이다. 그래서 이러한 문제를 해결하고자 JPA Auditing을 사용해서 이를 자동화 해보자.


우선 board 테이블에 작성 시간에 해당하는 created_date와 수정 시간에 해당하는 modified_date를 추가한다.

그리고 데이터에 날짜를 추가해주기 위해서 TimeEntity를 만들어주자

TimeEntity.java

package com.studyweb.webboard.entity;

import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class TimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}

@MappedSuperClass

  • JPA Entity 클래스들이 TimeEntity를 상속할 경우 이 클래스의 변수인 createdDate와 modifiedDate도 Column으로 인식하게한다.

@EntityListners(AuditingEntityListener.class)

  • TimeEntity 클래스에 Auditing 기능을 포함시킨다.

@CreatedDate

  • Entity가 생성되면, createdDate에 저장 시간이 자동으로 저장된다.

@LastModifiedDate

  • 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.

package com.studyweb.webboard.entity;

import lombok.Data;
import lombok.Getter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Entity
@Data
public class Board extends TimeEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String title;
    private String content;
    private String author;

    //수정을 위한 생성자
    public Board(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    //기본 생성자 추가!
    public Board() {

    }
}

이렇게 만들어준 TimeEntity를 Entity인 Board에 상속해준다.

@SpringBootApplication
@EnableJpaAuditing
public class WebboardApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebboardApplication.class, args);
    }

}

그리고 JPA Auditing을 활성화할 수 있도록 Application 클래스에 활성화 어노테이션을 추가해주면, 자동으로 데이터베이스에 생성시간과 수정시간을 포함하여 저장할 수 있다.


지금까지 기능을 추가했으니, 실제로 적용이 되는지 작성을 해보자.


잘 적용이 됐는지 확인 하기 위해 위 사진과 같이 게시글을 작성을 해준다. 잘 적용이 되었다면 게시글이 작성이 되면서 DB에 작성시간이 저장되어 있을 것이다.

DB 확인


DB를 확인해보니 작성시간이 잘 저장된 것을 알 수 있다.

수정 시간 확인을 위한 게시글 작성


이제 수정 시간도 적용이 됐는지 확인을 해야한다. 따라서, 위처럼 게시글을 수정하겠다.

DB 확인


DB를 확인해보니 작성시간과 수정 시간 모두 저장되어있는 것을 볼 수 있다.


작성 시간과 수정 시간을 게시글에서 확인하도록 수정

<!--작성 시간과 수정 시간을 나타내기 위한 html코드-->
<span th:if="${post.getCreatedDate() == post.getModifiedDate()}">
     <span th:text="'작성 시간: ' + ${#temporals.format(post.getCreatedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span>
</span>

<span th:if="${post.getCreatedDate() != post.getModifiedDate()}">
     <span th:text="'작성 시간: ' + ${#temporals.format(post.getCreatedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span><br>
     <span th:text="'수정 시간: ' + ${#temporals.format(post.getModifiedDate(), 'yyyy.MM.dd HH:mm:ss')}"></span>
</span>

이제 게시글에 작성 시간과 수정 시간을 나타내주는 html을 추가해서 게시글 상세 페이지에서 확인을 할 수 있도록 하였다.


다음 글은 페이징 처리에 대해서 작성하겠습니다. 글에서 부족한 부분이 많을 것 같습니다. 모든 지적을 환영합니다!!

더 자세한 코드는 깃허브를 참고해주세요!

깃허브: https://github.com/pp8817/ToyProjectBoard

'Project > 나의 작은 프로젝트' 카테고리의 다른 글

💡 게시판 - 파일 업로드 2  (0) 2026.07.20
💡 게시판 - 파일 업로드  (0) 2026.07.20
💡 게시판 - 검색 기능  (0) 2026.07.20
💡 게시판 - 페이징 처리  (0) 2026.07.20
💡 게시판 만들기  (0) 2026.07.20
'Project/나의 작은 프로젝트' 카테고리의 다른 글
  • 💡 게시판 - 파일 업로드
  • 💡 게시판 - 검색 기능
  • 💡 게시판 - 페이징 처리
  • 💡 게시판 만들기
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    Spring
    개념 정리!
    Algorithm
    OS
    Spring MVC
    척척학사
    jpa
    Book
    나의 작은 프로젝트
    게시판
    BOJ
    HTTP WEB 기본 지식
    Project
    Python
    트러블슈팅
    http
    object
    CS Interview
    interview
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
💡 게시판 - JPA Auditiong으로 작성 시간 추가
상단으로

티스토리툴바