nonneng.ee
Daeun-rithm
nonneng.ee
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Back-end (17)
      • Server (3)
      • Database (3)
      • Spring (9)
      • Node.js (1)
    • Book (1)
      • 이펙티브 자바 (0)
      • 대규모 시스템 설계 (1)
    • Algorithm (1)
      • Greedy, Implementation (6)
      • Dynamic Programming (5)
      • Data Structure (3)
      • Sorting (2)
      • Concept (1)
    • TIL (11)
    • Software (3)
      • Design Pattern (3)
    • Computer Science (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JPA
  • Spring
  • 이펙티브 자바
  • 아이템8
  • 아이템9
  • 구동원리
  • Restful API
  • 서버
  • DP
  • Java
  • 소스설치
  • 컴파일설치
  • 백준
  • 구현
  • 가상머신
  • 자바
  • API
  • APM
  • 에러
  • 수동설치
  • 아이템 23
  • 브루트포스
  • jwt
  • 우분투
  • 파이썬
  • node js
  • Postman
  • MySQL
  • 아이템 25
  • 아이템6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nonneng.ee

Daeun-rithm

[TIL/adone] 2022-08-25~26 dto 디렉토리 구조 변경, @Embeddable
TIL

[TIL/adone] 2022-08-25~26 dto 디렉토리 구조 변경, @Embeddable

2022. 8. 26. 17:17

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
    'TIL' 카테고리의 다른 글
    • [TIL/adone] 2022-08-23~24 API 설계, @Builder.Default, Swagger 설정
    • [TIL/fairer] 2022-05-14 jpa로직 구현
    • [TIL] 2022-01-12
    • [TIL] 2021-11-09
    nonneng.ee
    nonneng.ee

    티스토리툴바