*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성
- Windows11(윈도우 11) 환경
- 자바 JDK 17 버전 설치 https://yungenie.tistory.com/11
[Java] 차근차근 Java 설치하기 (JDK17, Window 11)
자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸
yungenie.tistory.com
- 스프링 부트 4.31.0 사용 - STS(Spring Tool Suite) 설치(Spring Tools for Eclipse - https://spring.io/tools)
=> https://priming.tistory.com/147 참고
[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치
STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로
priming.tistory.com
- MySQL Community Server 8.0.42 설치 https://dev.mysql.com/downloads/mysql/
MySQL :: Download MySQL Community Server
Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac
dev.mysql.com
- Gradle
**STS에서 Gradle 프로젝트 생성한 과정
*** 함께 보면 좋은 글
스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요
1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로
keep-programming-study.tistory.com
스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식
1. 서버 간 통신마이크로서비스 아키텍처에서 한 서버가 다른 서버에 통신을 요청하는 것을 의미-> 한 대는 서버/다른 한 대는 클라이언트가 됨 가장 많이 사용되는 방식은 HTTP/HTTPS 방식(TCP/IP, SOA
keep-programming-study.tistory.com
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 1(JPQL, 쿼리 메서드 살펴보기, 정렬과
*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법
keep-programming-study.tistory.com
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 2(@Query 어노테이션 사용하기, QueryDSL 적
*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법
keep-programming-study.tistory.com
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 3(QueryDSL 적용하기2)
*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법
keep-programming-study.tistory.com
1. JPA Auditing 개요
- JPA에서 'Audit'이란 감시한다는 의미로, 각 데이터마다 '누가', '언제' 데이터를 생성하고 변경했는지 감시하는 역할을 함
- 엔티티 클래스에는 공통적으로 들어가는 필드(생성 주체, 생성 일자, 변경 주체, 변경 일자)가 있는데,
매번 엔티티를 생성하거나 변경할 때마다 이들의 값을 주입해야 하는 번거로움이 있음
-> Spring Data JPA에서 이러한 값을 자동으로 넣어주는 기능 제공 - 엔티티에 이 기능을 적용하는 것
2. JPA Auditing 기능 활성화
- main() 메서드가 있는 애플리케이션 클래스에 다음과 같이 @EnableJpaAuditing 어노테이션 추가
// src/main/java/com.example.demo/StudyApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing
@SpringBootApplication
public class StudyApplication {
public static void main(String[] args) {
SpringApplication.run(StudyApplication.class, args);
}
}
- 테스트 코드를 작성해서 애플리케이션을 테스트 할 경우,
@WebMvcTest 어노테이션을 지정하는 상황에서는 애플리케이션 클래스를 호출하는 과정에서 예외가 발생할 수 있음
-> 아래처럼 별도의 Configuration 클래스를 생성해서 애플리케이션 클래스의 기능과 분리해서 활성화하는 것이 좋음
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
/**
* JPA Auditing을 활성화하기 위한 설정 클래스
* 이 설정을 통해 @CreatedDate, @LastModifiedDate 등의 어노테이션이 작동
*/
//Spring의 Configuration 클래스로 지정하여, 이 클래스가 설정 정보를 담고 있음을 나타냄
@Configuration
//JPA Auditing 기능을 활성화하기 위한 어노테이션: 엔티티의 생성일자, 수정일자 등을 자동으로 관리
@EnableJpaAuditing
public class JpaAuditingConfiguration {
// 현재는 별도의 설정이 없지만, 필요 시 AuditorAware 등을 정의
}
3. BaseEntity 만들기
- 코드의 중복을 없애기 위해서는 각 엔티티에 공통으로 들어가게 되는 칼럼(필드)을 하나의 클래스로 빼는 작업을 수행해야 함
-> 자주 활용되는 기법
1) 생성 일자와 변경 일자만 추가하여 BaseEntity 생성
package com.example.demo.jpa.data.entity;
import java.time.LocalDateTime;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter // 모든 필드에 대한 getter 메서드 자동 생성
@Setter // 모든 필드에 대한 setter 메서드 자동 생성
@ToString // toString 메서드 자동 생성
@MappedSuperclass // 이 클래스를 상속받는 엔티티 클래스에 필드가 매핑되도록 지정
@EntityListeners(AuditingEntityListener.class) // 생성일-수정일 자동 설정을 위해 Auditing 기능 활성화
public class BaseEntity {
@CreatedDate // 엔티티가 처음 저장될 때 자동으로 현재 시간이 설정됨
@Column(updatable = false) // 생성일은 수정되지 않도록 설정
private LocalDateTime createdAt; // 생성일시
@LastModifiedDate // 엔티티가 수정될 때 자동으로 현재 시간이 설정됨
private LocalDateTime updatedAt; // 최종 수정일시
}
2) BaseEntity를 상속받은 Product 엔티티 클래스
// Product.java
package com.example.demo.jpa.data.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
//클래스의 모든 필드에 대해 Getter 메서드를 자동 생성
@Getter
//클래스의 모든 필드에 대해 Setter 메서드를 자동 생성
@Setter
//파라미터가 없는 기본 생성자를 자동 생성
@NoArgsConstructor
//모든 필드를 파라미터로 받는 생성자를 자동 생성
@AllArgsConstructor
//이 클래스는 JPA 엔티티로 데이터베이스 테이블과 매핑
@Entity
// 객체 생성 시 빌더 패턴을 사용할 수 있게 해주는 어노테이션
@Builder
// toString() 메서드를 자동 생성하되, name 필드는 출력에서 제외
@ToString(exclude="name")
//엔티티가 매핑될 테이블 이름을 명시적으로 지정 (기본값은 클래스 이름)
@Table(name="product")
// BaseEntity를 상속하여, LocalDateTime.now() 메서드로 시간을 주입하지 않아도 자동으로 생성 일시/수정 일시의 값 생성
public class Product extends BaseEntity {
// 기본 키(PK)로 지정된 필드. 데이터베이스의 고유 식별자 역할
@Id
// ID 값을 자동 생성함. GenerationType.IDENTITY는 DB가 직접 AUTO_INCREMENT 방식으로 생성하도록 함(insert 후에 pk 자동생성)
// -> IDENTITY외에도 AUTO(기본값, 사용하는 데이터베이스에 맞게 기본값 자동 생성),
// SEQUENCE(Oracle, PostgreSQL 등 시퀀스를 지원하는 DB에서 별도 시퀀스 객체를 생성해 PK값 증가),
// TABLE(키 값을 관리하는 별도 테이블을 생성해 PK값 증가-성능 낮음)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long number;
// 엔티티 클래스의 필드는 자동으로 테이블 칼럼으로 매핑되므로, 별다른 설정을 하지 않을 경우 @Column을 생략해도 됨
// 상품 이름 (Null 허용하지 않음)
@Column(nullable = false)
private String name;
// 가격 (Null 허용하지 않음)
@Column(nullable = false)
private int price;
// 재고 수량 (Null 허용하지 않음)
@Column(nullable = false)
private int stock;
// 상품 생성 일시와 상품 수정 일시 자동 설정
}
3) JPA Auditing 테스트
// src/test/java/com.example.demo/ProductRepositoryTest.java
package com.example.demo;
... 생략 ...
public class ProductRepositoryTest {
//필요한 의존 객체의 “타입"에 해당하는 빈을 찾아 주입
@Autowired
ProductRepository productRepository;
... 생략 ...
// JPA Auditing 테스트
@Test
public void auditingTest() {
Product product = new Product();
product.setName("펜");
product.setPrice(1000);
product.setStock(100);
Product savedProduct = productRepository.save(product);
System.out.println("productName: " + savedProduct.getName());
System.out.println("createdAt: " + savedProduct.getCreatedAt());
}
}
*ProductRepositoryTest.java를 우클릭해서 Run As -> JUnit Test를 클릭한 결과
'스프링(Spring), 스프링부트(SpringBoot) > 스프링부트(SpringBoot) 기초' 카테고리의 다른 글
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 3(QueryDSL 적용하기2) (0) | 2025.08.28 |
---|---|
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 2(@Query 어노테이션 사용하기, QueryDSL 적용하기) (0) | 2025.08.22 |
스프링 부트 핵심 가이드(장정우 지음) - Spring Data JPA 활용 1(JPQL, 쿼리 메서드 살펴보기, 정렬과 페이징 처리) (0) | 2025.08.15 |
스프링 부트 핵심 가이드(장정우 지음) - JaCoCo를 활용한 테스트 커버리지 확인, 테스트 주도 개발(TDD) (0) | 2025.08.12 |
스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기2 (0) | 2025.08.08 |