๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JPA

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 9์ผ์ฐจ - ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…, Converter (์ปค์Šคํ…€ ์ปจ๋ฒ„ํ„ฐ)

๐Ÿ“Œ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…

โœ”๏ธ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ์‚ฌ์šฉ ์ƒํ™ฉ

  • ์ฃผ๋ฌธ์‹œ ๊ฐ€๊ฒฉ์— ๋Œ€ํ•œ ํ•„๋“œ
    (๊ณต๊ธ‰๊ฐ€, ๋ถ€๊ฐ€์„ธ, ํ•ฉ๊ณ„ ...)
  • ์ฃผ์†Œํ•„๋“œ
    (๋„, ์‹œ(๊ตฐ,๊ตฌ), ์šฐํŽธ์ฃผ์†Œ, ์ƒ์„ธ์ฃผ์†Œ ...)

โœ”๏ธ ์ง‘์ฃผ์†Œ, ์ง์žฅ์ฃผ์†Œ ๊ตฌ์„ฑ
์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ์ ์šฉ์ „ โŒ

private String homeCity;
private String homeDetail;
private String homeZipcode;
private String companyCity;
private String companyDetail;
private String companyZipcode;

์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ์ ์šฉ ํ›„ ๐Ÿ‘

  • ์ฝ”๋“œ์˜ ์–‘์€ ์˜คํžˆ๋ ค ๋Š˜์—ˆ์ง€๋งŒ ํ•œ ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    @Embedded
    @AttributeOverrides({
      @AttributeOverride(name="city", @Column(name="home_city")),
      @AttributeOverride(name="detail", @Column(name="home_detail")),
      @AttributeOverride(name="zipCode", @Column(name="home_zipcode"))
    })
    private Address homeAddress;
    @Embedded
    @AttributeOverrides({
      @AttributeOverride(name="city", @Column(name="company_city")),
      @AttributeOverride(name="detail", @Column(name="company_detail")),
      @AttributeOverride(name="zipCode", @Column(name="company_zipcode"))
    })
    private Address companyAddress;

โœ”๏ธ @Embeddable

  • ๊ฐ’ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์— ์„ค์ •
  • ์—”ํ‹ฐํ‹ฐ์™€ ๋™์ผํ•˜๊ฒŒ @Column ๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    @Embeddable
    public class Address {
      private String city;
      private String district;
      private String detail;
      private String zipCode;
    }

โœ”๏ธ @Embedded

  • ์—”ํ‹ฐํ‹ฐ์˜ ๊ฐ’ํƒ€์ž… ํ•„๋“œ์— ์„ค์ •
    @Embedded
    private Address address;

๐Ÿ“Œ Converter (์ปค์Šคํ…€ ์ปจ๋ฒ„ํ„ฐ)

โœ”๏ธ ์—”ํ‹ฐํ‹ฐ ํ•„๋“œ์™€ DB ์นผ๋Ÿผ ๊ฐ„ ๋งคํ•‘(๋ณ€ํ™˜)์„ ์ง์ ‘ ๊ตฌํ˜„

  1. ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค ์ž‘์„ฑ
    AttributeConverter<X, Y>
  • X: Entity์˜ ํ•„๋“œ
  • Y: DB ์นผ๋Ÿผ ํ•„๋“œ
  1. ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ
    X convertToEntityAttribute(Y dbData;
  2. Y convertToDatabaseColumn(X attribute);
  3. converter ํด๋ž˜์Šค์ž„์„ ๋ช…์‹œ
  4. @Converter
  5. ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์ ์šฉํ•  ํ•„๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€
  6. @Convert(converter = CustomConverter.class)

โœ”๏ธ ์ปจ๋ฒ„ํ„ฐ ๊ตฌํ˜„์‹œ ์ฃผ์˜

  • ์–‘์ชฝ ์ปจ๋ฒ„ํŒ… ๋กœ์ง์„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์–ด๋А ํ•œ ์ชฝ์ด ๋ถˆ์™„์ „ํ•˜๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์„ ๋ฌผ๊ณ  ์žˆ์„ ๋•Œ ์กฐํšŒ์‹œ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐˆ์ˆ˜๋„ ์žˆ๋‹ค. (๋”ํ‹ฐ์ฒดํ‚น ๋•Œ๋ฌธ์—)

โœ”๏ธ autoApply

@Converter(autoApply = true)

(default = false)

  • AttributeConverter<X, Y> ์˜ X์— ์„ค์ •ํ•œ ์—”ํ‹ฐํ‹ฐ ํ•„๋“œ์— ์ž๋™ ์ ์šฉ๋œ๋‹ค.
  • @Convert(converter = CustomConvert.class) ์—†์–ด๋„ ๋œ๋‹ค.

๐Ÿ‘ ์ˆ˜๊ฐ•์ธ์ฆ

 

 

 

ํŒจ์ŠคํŠธ์บ ํผ์Šค [์ง์žฅ์ธ ์‹ค๋ฌด๊ต์œก]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์˜์ƒํŽธ์ง‘, UX/UI, ๋งˆ์ผ€ํŒ…, ๋ฐ์ดํ„ฐ ๋ถ„์„, ์—‘์…€๊ฐ•์˜, The RED, ๊ตญ๋น„์ง€์›, ๊ธฐ์—…๊ต์œก, ์„œ๋น„์Šค ์ œ๊ณต.

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.