1. dto 디렉토리 대규모 수정
서비스에 estimate(견적)에 관련된 기능이 가장 많은데, dto 구조가 필요 이상으로 복잡하고 가독성이 떨어진다 생각이 들었다. 합칠 수 있는 dto는 합치고, request/response 위주로 분리했다. 매우 헷갈리고.. 오래 걸렸지만 훨씬 깔끔해진 것 같아 뿌듯하다.
2. 유저가 디자인한 간판 생성 api
😇 save the transient instance before flushing
: FK 로 사용되는 컬럼값이 없는 상태에서 데이터를 넣으려하면 발생하는 에러이다.
→ 나는 진짜로 데이터가 없어서 발생했는데, 연관 관계 매핑해줄 때 사용하는 @ManyToOne, @OneToOne, @OneToMany 어노테이션에 cascade옵션을 변경하면 해결 할 수 있다고 한다.
3. @Embedded, @Embeddable
: 새로운 값 타입을 직접 정의해서 사용하도록 하는 어노테이션
→ 임베디드 타입도 int, String과 같은 값 타입이다.
- @Embeddable : 값 타입을 정의하는 곳에 표시
- @Embedded : 값 타입을 사용하는 곳에 표시
✅ 회원 엔티티로 예시를 들어 다음 두 문장을 비교해보자.
회원 엔티티는 이름, 근무 시작일, 주소 도시, 주소 번지, 주소 우편 번호를 가진다
회원 엔티티는 이름, 근무 기간, 집 주소를 가진다.
회원이 상세한 데이터를 그대로 가지고 있는 것은 객체 지향적이지 않으면 응집력만 떨어뜨린다.
→ 근무 기간, 주소 같은 타입을 통해 코드가 더 명확해질 수 있다.
@Entity
public class Member {
@Id @GeneratedVAlue
private Long id;
private String name;
@Embedded
private Period workPeriod; // 근무 기간
@Embedded
private Address homeAddress; // 주소
}
✅ 활용
@Entity
public class SignboardDesign {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "signboard_design_id", columnDefinition = "BIGINT", nullable = false, unique = true)
private Long signboardDesignId;
@Embedded
private Signboard signboard;
@Embedded
private Typography typography;
}
@ToString
@Embeddable
@Getter
public class Signboard {
private int signboardType; // 종류
private int signboardForm; // 형태
private int materialType; // 재질
private int lightType; // 조명 4종류
}
@ToString
@Embeddable
@Getter
public class Typography {
@Column(nullable = false)
private String mainText;
private int mainTextType; // 종류
private Integer mainTextLightType; // 조명
private Integer mainTextMaterialType; // 재질
}
→ @Embeddable Signboard, Typography가 SignboardDesign @Entity를 구성하고 있다.
'TIL' 카테고리의 다른 글
[TIL/adone] 2022-08-23~24 API 설계, @Builder.Default, Swagger 설정 (0) | 2022.08.24 |
---|---|
[TIL/fairer] 2022-05-14 jpa로직 구현 (0) | 2022.05.16 |
[TIL] 2022-01-12 (3) | 2022.01.13 |