JPA
https://woowabros.github.io/woowabros/2018/12/29/woowahan-jpa1.html
우아한형제들 JPA 강의 소감과 적용 사례 - 우아한형제들 기술 블로그
우아한형제들에 외부 개발자분들을 초대해서 JPA 기본기를 강의한 소감배달의민족 내부 시스템 JPA 적용 사례 공유
woowabros.github.io
Entity의 PK
- Long 타입의 auto_increment를 추천 (mysql 기준으로 이렇게 하면 bigint)
주문등록번호와 같이 비즈니스상 유니크 키나 여러 키를 조합한 복합키로 PK를 잡을 경우 난감한 상황 발생 가능
1) FK를 맺을 때 다른 테이블에서 복합키 전부를 갖고 있거나, 중간 테이블을 하나 더 둬야 하는 상황 발생
2)인덱스에 좋은 영향을 끼치지 못함
3) 유니크한 조건이 변경될 경우 PK를 전체 수정해야 하는일
주민등록번호, 복합키는 유니크 키로 별도로 추가하자
빌더패턴
https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4
빌더 패턴 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. /** "Product" */ class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void s
ko.wikipedia.org
Entity 클래스에서는 절대 Setter 메소드를 만들지 않음
-> 무분별하게 만들 경우 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분 불가하여 차후에 기능 변경시 정말 복잡해짐
- 해당 필드의 값 변경이 필요하면 명확히 그 목적과 의도를 나타낼 수 있는 메소드를 추가해야만 함
잘못된 사용예
public class Order{
public void setStatus(boolean status){
this.status = false;
}
}
public void 주문서비스의_취소이벤트(){
order.setStatus();
}
올바른 사용예
public class Order{
public void cancelOrder(){
this.status = false;
}
}
public void 주문서비스의_취소이벤트(){
order.cancelOrder();
}
어떻게 값을 채워 DB에 삽입하는가?
default:
-생성자를 통해 최종값을 채운 후 DB에 삽입
-값 변경이 필요한 경우 해당 이벤트에 맞는 public 메소드를 호출하여 변경
@Builder를 통해 제공되는 빌더 클래스 사용 :
-생성자나 빌더나 생성 시점에 값을 채워주는 역할은 같음
-but, 생성자의 경우 지금 채워야 할 필드가 무엇인지 정확히 지정 불가
public Example(String a, String b){
this.a = a;
this.b = b;
}
//사용
new Example(b,a)
a와 b의 위치를 변경해도 코드를 실행하지 전까지는 문제를 찾기 어려움
Example.builder()
.a(a)
.b(b)
.build();
빌더를 사용하게 되면 다음과 같이 어느 필드에 어떤 값을 채워야 할지 명확하게 인지 가능
출저 : 스프링부트와 AWS로 혼자 구현하는 웹서비스 91~94p