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

JPA

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 3์ผ์ฐจ - Entity, ๊ด€๊ณ„

๐Ÿ“Œ Entity

โœ”๏ธ GenerationType
@GeneratedValue(strategy = GenerationType.)

  • IDENTITY
    • MySQL์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต (AUTO_INCREASEMENT)
  • SEQUENCE
    • ORACLE, PostgreSQL, H2์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต
  • TABLE
    • DB ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด ID๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์—ฌ ID๋ฅผ ๊ด€๋ฆฌ
  • AUTO (default)
    • ๊ฐ DB์— ์•Œ๋งž๋Š” ์ „๋žต์„ ์„ ํƒ

โœ”๏ธ @Table
name: ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์ง€์ •
ex)
@Table(name = TBL_USER)

indexes = {@Index(columnList = "name")}
uniqueConstraints = {@@UniqueConstraint(columnName={"email"})}

  • ์ธ๋ฑ์Šค, ์ œ์•ฝ์‚ฌํ•ญ์„ ์ฝ”๋“œ๋ ˆ๋ฒจ์—์„œ ์ •์˜
    but, DB์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š์Œ.
  • DB์— ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ (์—”ํ‹ฐํ‹ฐ์—๋Š” ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ)

โœ”๏ธ @Column

  • insertable
    • default: true
    • false๋กœ ์„ค์ •์‹œ ํ•ด๋‹น ์นผ๋Ÿผ์œผ๋กœ์˜ ์‚ฝ์ž… ๋ถˆ๊ฐ€
  • updatable
    • default: true
    • false๋กœ ์„ค์ •์‹œ ํ•ด๋‹น ์นผ๋Ÿผ์œผ๋กœ ์ˆ˜์ • ๋ถˆ๊ฐ€

โœ”๏ธ @Transient

  • ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•˜์ง€ ์•Š๊ณ ์ž ํ•˜๋Š” ํ•„๋“œ์— ์ •์˜
  • ๊ฐ์ฒด์™€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ™์ดํ•จ

โœ”๏ธ @Enumerated

  • Enum ํƒ€์ž…์„ ๋งคํ•‘์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜
    • EnumType.STRING, EnumType.ORDINAL (defualt)
      ex) @Enumerated(EnumType.STRING)
  • EnumType.ORDINAL: ์ˆœ์„œ(์ˆซ์ž)
    • default ์„ค์ • ๊ฐ’์ด์ง€๋งŒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ
    • ์ˆœ์„œ(์ˆซ์ž)๋ฅผ DB์— ์ €์žฅ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„ ์ค‘๊ฐ„์— Enunํƒ€์ž…์ด ์‚ฝ์ž…๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ ํ›„ ์‚ฝ์ž…๋œ๋‹ค๋ฉด ๊ฐ™์€ ์ˆœ์„œ(์ˆซ์ž)๋ฅผ ๊ฐ–์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์—๋Ÿฌ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ
  • EnumType.STRING: ๋ฌธ์ž๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
    • Enumํƒ€์ž…์˜ ์ˆœ์„œ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ DB์— ์ €์žฅ
    • ์ˆœ์„œ์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ORDINAL์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Œ


๐Ÿ“Œ ๊ด€๊ณ„

โœ”๏ธ @ManyToOne ๋‹จ๋ฐฉํ–ฅ

  • One์ชฝ์—์„œ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์œผ๋กœ ํ•„๋“œ๋ฅผ ์„ ์–ธ
  • @JoinColumn์„ ์ด์šฉํ•ด์„œ ๋ฐ˜๋Œ€ํŽธ์— FK์™€ ๋งคํ•‘
    ex) @JoinColumn(name = "user_id")
  • One์ชฝ์˜ ์ปฌ๋ ‰์…˜์€ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ˆ˜์ •๋˜์ง€ ์•Š๋„๋ก ํ•ด์ค˜์•ผ ํ•จ
    ex) @JoinColumn(insertable=false, updatable=false)

โœ”๏ธ @ManyToMany
๊ธฐ๋ณธ์ „๋žต

  • ์ค‘๊ฐ„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
  • author : book => author_book_table
  • 1:N์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ @JoinColumn์„ ์ด์šฉํ•ด์„œ
    N์ชฝ์— FK๊ฐ€ ์ƒ๊ธฐ๋„๋ก ํ•ด์ฃผ์—ˆ์Œ
  • M:N์€ FK๊ฐ€ ์นผ๋Ÿผ๋‹น ํ•˜๋‚˜๋งŒ ์ƒ๊ธฐ๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ชฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅ
  • ๋งค์šฐ ๋ณต์žกํ•˜๋ฏ€๋กœ ํ˜„์—…์—์„œ ์ž˜ ์“ฐ์ด์ง€ ์•Š์Œ
  • 1:M , M:1๋กœ ํ’€์–ด์„œ ์ค‘๊ฐ„ํ…Œ์ด๋ธ”์„ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•ด์„œ M:N์„ ํ’€์–ด๋‚ด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
    (์ค‘๊ฐ„ํ…Œ์ด๋ธ”์„ ์—”ํ‹ฐํ‹ฐ๋กœ ์Šน๊ฒฉ)

โœ”๏ธ @ManyToOne vs @OneToMany

  • ์—”ํ‹ฐํ‹ฐ์˜ ์กฐํšŒ ๋นˆ๋„์— ๋”ฐ๋ผ ์„ค๊ณ„๋ฅผ ํ•ด์•ผํ•จ
  • User์™€ UserHistory์˜ ๊ด€๊ณ„์—์„œ UserHistory ์ฆ‰ ๋ณ€๊ฒฝ์ด๋ ฅ์—์„œ
    ํ˜„์žฌ User์˜ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋นˆ๋„๋Š” ์ ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐ๋จ.
  • User์—์„œ User์˜ ๋ณ€๊ฒฝ์ด๋ ฅ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์€ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ๋ณด๋‹ค
    ๋นˆ๋ฒˆํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋จ
  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ User(One)์ชฝ์— ์กฐํšŒ์ „์šฉ ์ปฌ๋ ‰์…˜์„ ๋‘๊ณ  @OneToMany์™€
    @JoinColumn(insertable, updatable) ๋ฅผ ์ด์šฉํ•ด์„œ ๊ด€๊ณ„์„ค์ •
  • User๊ฐ์ฒด์—์„œ ๋ฐ”๋กœ getUserHistories()๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์กฐํšŒ๊ฐ€๋Šฅ

@ManyToOne์ด๋ผ๋ฉด ?

  • UserHistory์— @ManyToOne User user๋กœ ๊ด€๊ณ„์„ค์ •

โœ”๏ธ mappedBy

  • ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด ์•„๋‹˜์„ ํ‘œ์‹œ
  • ํ•ด๋‹น ํ•„๋“œ๋Š” DB์— ๋งคํ•‘๋˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋กœ ํƒ์ƒ‰๋งŒ ๊ฐ€๋Šฅ
  • ๋˜๋„๋ก ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
    (side-effect๊ฐ€ ๋งŽ์Œ)

โœ”๏ธ @ToString์œผ๋กœ ์ธํ•ด ์ˆœํ™˜์ฐธ์กฐ ๋ฐœ์ƒ ๋ฌธ์ œ

@ToString.Exclude

  • ์„ค์ •ํ•œ ํ•„๋“œ๋Š” ToString ๋Œ€์ƒ์—์„œ ์ œ์™ธ

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

 

 

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

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

fastcampus.co.kr

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