도메인은 애플리케이션이 다루는 데이터 구조와 책임을 표시하고, 실제 DB에 저장되는 물리적 데이터 구조
package com.project.project1.domain;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.time.LocalDateTime;
@Entity
@Table(name = "T_USER")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class User {
@Id
@GeneratedValue //AutoIncrement
private Long id;
private String username;
private String password;
private String email;
private LocalDateTime createTime;
private LocalDateTime modifyTime;
@PrePersist
protected void onCreate() {
this.createTime = LocalDateTime.now();
this.modifyTime = LocalDateTime.now();
}
@PreUpdate
protected void onUpdate() {
this.modifyTime = LocalDateTime.now();
}
public void encodePassword(PasswordEncoder passwordEncoder) {
this.password = passwordEncoder.encode(this.password);
}
}
1.@Entity
-> JPA Entity라는 것을 의미, 이 클래스를 기반으로 테이블 매핑
2.Table()
-> 테이블 명시적 매핑, 생략 시 클래스명으로 테이블 매핑
3.Lombok
@Getter : getter 자동 생성 -> Entity는 setter를 열어두지 않음
@NoArgsConstructor(access = AccessLevel.PROTECTED) -> 기본 생성자 protected로 생성
@AllArgsConstructor + @Builder -> 모든 필드를 받는 생성자 생성, Builder 패턴으로 객체 생성 가능
Builder 패턴
User user = User.builder()
.name("남기문")
.loginId("ngm011")
.password("1234")
.email("ngm011@naver.com")
.createTime(LocalDateTime.now())
.build();
4. @PrePersist, @PreUpdate
-> Entity의 상태가 변경될 때 호출하여 JPA 내부에서만 사용하는 생명주기 메서드
Entity가 새로 생성될 때, 수정될 때 각각 동작한다.
하지만 모든 Entity마다 공통된 컬럼을 PrePersist, PreUpdate를 사용하여 관리하는 경우 불필요한 코드가 반복된다.
이 때, Auditing를 사용한다면 엔티티를 직접 구현하지 않고 공통 규칙으로 처리할 수 있다.
'프로젝트 끄적이기' 카테고리의 다른 글
| 5.PasswordEncoder를 이용한 비밀번호 암호화 (0) | 2026.01.27 |
|---|---|
| 4. Spring Security 로그인 인증 방식 (0) | 2026.01.27 |
| 3. 의존성 주입(DI) 방법 비교 (0) | 2026.01.22 |
| 0. 프로젝트 세팅 (0) | 2026.01.21 |
| 1. Spring Security 자동 로그인 및 권한 설정 (0) | 2026.01.20 |