라벨이 [JPA]인 게시물 표시

[Spring Boot] JPA Auditing 으로 생성/변경일시 관리하기

이미지
안녕하세요. 남산돈가스입니다.

오늘은 Spring Boot + JPA 환경에서 Auditing을 이용하여 생성/변경일시를 관리하는 법에 대해 포스팅하겠습니다.

일반적으로 테이블을 설계할 때, 거의 필수적으로 관리되는 컬럼들이 있습니다. 대표적인 예로 생성일시, 변경일시 등이 있을 것이고, 또 최종 변경자, 최초 생성자도 있을 수 있겠네요.

JPA환경에서 Entity들을 관리할 때, 이 모든 Entity에서 위에서 언급한 컬럼들을 일일이 관리하기엔 번거로움이 있을 것 같습니다. 또한, 코드 레벨에서 이 데이터들의 값을 관리하기는 더 어려운 일이 아닐 수 없겠죠.

이런 불편함들을 해소하고자(?) 혹은 Spring Data JPA가 아닌 다른 프레임워크 환경에서의 ORM에서 기본적으로 제공되던 것(ex. Sequelize 등) 들을 대체해 줄 수 있는 것이 바로 Spring Data JPA의 Auditing 입니다.

Auditing을 사용하기 위해서는 간단한 설정이 필요합니다.

Auditing을 활성화하기 위한 적당한 이름의 Config 파일을 생성한 뒤,
@EnableJpaAuditing 어노테이션을 추가합니다.
@EnableJpaAuditing@Configuration public class JpaAuditingConfig { }
Config를 생성한 뒤, 이제 Audity로 제공할 데이터들을 정의하는 클래스를 생성합니다.
@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class) public abstract class Audity { @CreatedDate@Column(name = "created_date", updatable = false) private LocalDateTime createdDate; @LastModifiedDate@Column(name = "updated_date", updatable = true) pri…

[Spring Boot] JPA + Pageable 을 이용한 페이징 처리

이미지
안녕하세요. 남산돈가스 입니다.

오늘은 Spring Boot JPA를 이용하여 API 개발 시 간단하게 Pagination 와 Sorting을 처리할 수 있도록 도와주는 Pageable에 대해서 알아보려고 합니다.

웹 개발 시 Pagination 과 Sorting은 필수적이라 할 수 있지만, 실제 개별적으로 구현 시 번거로운 작업이 생기기 마련입니다. 또한 각 데이터베이스마다 페이징 쿼리가 다를 수 있다는 점에서 모든 요구조건을 만족하기 어려운 부분들이 존재하기 마련입니다.

Spring Data JPA와 Pageable을 이용하면 이런 문제들을 아주 쉽게 해결할 수 있어 비즈니스 로직에 집중할 수 있게 도와줍니다.

우선 Pageable을 사용하여 얻을 수 있는 이점은 대표적으로 두 가지 입니다.
요건에 맞는 Pagination을 구현할 수 있다.정렬이 필요한 데이터를 쉽게 Sorting 할 수 있다. 예제를 들어 설명하겠습니다.

@Entity@Table(name="post") @Getter public class Post extends Audity { @Id@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") private Long id; @Column(name="title") private String title; @Column(length = 2000, name="content") private String content; @Column(length = 50, name="writer") private String writer; }
간단한 예제를 들기 위하여, "Post" 라는 Entity를 작성하였고, 예제를 위하여 약 20건의 데이터를 생성해두었습니다.

@RepositorypublicinterfacePostR…