🍀 새로운 프로젝트를 시작하려고 한다.
이전에 프로젝트를 진행했을 때 아쉬웠던 점을 채우고, 공부해야할 것을 정리해 남기려고 한다.
커뮤니티 기능을 하는 프로젝트의 Rest Api를 구현하기 위해서 해야할 것을 나누어 보았다.
일단, 엔티티를 구성하기 위해서 JPA를 사용하였다.
@Id //id 필드를 기본 키로 지정
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto Increment
@Column(name = "id", nullable = false) // null 불가, 설정하지 않으면 true
private Long id;
//Auto Increment는 정수, 실수인 컬럼에만 사용 가능
@ManyToOne // 다대일 관계
@JoinColumn(name = "user_id") // 조인하는 컬럼 명
private User user; // fk 객체
@Column(name = "title", nullable = false, length = 100) // 길이 100으로 지정
private String title;
@CreationTimestamp // 생성 시 자동으로 날짜-시간 저장
@Column(name = "create_date", nullable = false)
private LocalDateTime create_date;
@UpdateTimestamp // 업데이트 시 자동으로 날짜-시간 저장
@Column(name = "update_date", nullable = false)
private LocalDateTime update_date;
// @CreationTimestamp, @UpdateTimestamp 사용 시 생성자에서 초기화하지 않아도 자동으로 값이 저장
// LocalDateTime는 Timestamp 타입과 달리 타임존의 영향을 받지 않음 > 안정적인 날짜, 시간 표현 가능
// (1) 날짜와 시간을 분리하여 보관, 연산이 쉽고 간결(편의성)
// (2) JVM 안에서 처리되기 때문에 외부 공격에 영향 X(보안성)
출처 [Java] LocalDate, LocalDateTime을 사용하는 이유
//Builder X
new User("name", 100);
//Builder O
User.builder()
.name("name")
.age(100)
.build();
@Builder //빌더 패턴 방식으로 객체 생성
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Entity // 엔티티로 지정
@Getter // 클래스 필드에 별도 코드 없이 모든 필드에 대한 접근자 메서드 생성 가능
@NoArgsConstructor(access = AccessLevel.PROTECTED) //접근 제어자가 protected인 기본 생성자를 별도 코드 없이 생성
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "title", nullabe = false)
private String title;
@Column(name = "content") // nullable = true
private String content;
@CreationTimestamp
@Column(name = "create_date", nullable = false)
private LocalDateTime create_date;
@UpdateTimestamp
@Column(name = "update_date", nullable = false)
private LocalDateTime update_date;
@Builder
public User(String title, String content) {
this.title = title;
this.content = content;
}
}
이와 같이 JPA를 이용해 필요한 엔티티를 구성 및 관계 설정을 하면 된다.
이때, DB의 예약어나 명령어, 키워드를 객체 이름으로 사용하게 될 경우 DB에서 이를 구분하지 못하기 때문에 에러가 발생한다.
정리
1. 클래스를 만들고, 애너테이션을 설정한다.
2. 기본 키를 시작으로, 컬럼을 필요에 맞게 구성한다.
3. Builder 패턴을 이용한 생성자를 구현한다.
참고 서적 스프링 부트3 백엔드 개발자 되기
다음으로는 인텔리제이와 MySQL를 연동하고, Spring boot와 JDBC를 연동할 것이다.