๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿฆ• ๊ณต๋ฃก์ด ๋˜์ž!

Spring boot Study...1 ๋ณธ๋ฌธ

Development/Spring

Spring boot Study...1

Kirok Kim 2022. 1. 11. 19:53

JPA

๊ฐ์ฒด - ํ…Œ์ด๋ธ” ๋งตํ•‘ : @Entity, @Table

ํ•„๋“œ - ์ปฌ๋Ÿผ์˜ ํŒนํ•‘ : @Column

๊ธฐ๋ณธํ‚ค์˜ ๋งตํ•‘ : @Id

์กฐ์ธ ๋งตํ•‘ : @ManyToOne, @JoinColumn

@Entity

@Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— ์„ ์–ธํ•˜๋ฉด ๊ทธ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ DB์˜ ํ…Œ์ด๋ธ”๊ณผ Class(VO, DTO)์™€ ๋งตํ•‘ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ @Entity๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

@Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค์—๋Š” ๋‹ค์Œ ์ œ์•ฝ์‚ฌํ•ญ์ด ํ•„์š”ํ•˜๋‹ค.

  1. ํ•„๋“œ์— final, enum, interface, class๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  2. ์ƒ์„ฑ์ž์ค‘ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

@Entity์˜ ์†์„ฑ1. name : ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

@Table

@Table ์–ด๋…ธํ…Œ์ด์…˜์€ ๋งตํ•‘ํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•œ๋‹ค.

@Table์˜ ์†์„ฑ1. name : ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •2. catalog : DB์˜ catalog๋ฅผ ๋งตํ•‘3. schema : DB ์Šคํ‚ค๋งˆ์™€ ๋งตํ•‘4. uniqueConstraint : DDL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ƒ์„ฑ

@Column

@Column ์–ด๋…ธํ…Œ์ด์…˜์€ ๊ฐ์ฒด ํ•„๋“œ์™€ DB ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์„ ๋งตํ•‘ํ•œ๋‹ค.

@Column์˜ ์†์„ฑ1. name : ๋งตํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •2. insertable : ์—”ํ‹ฐํ‹ฐ ์ €์žฅ์‹œ ์„ ์–ธ๋œ ํ•„๋“œ๋„ ๊ฐ™์ด ์ €์žฅ3. updateable : ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •์‹œ ์ด ํ•„๋“œ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •4. table : ์ง€์ •ํ•œ ํ•„๋“œ๋ฅผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ๋งตํ•‘5. nullable : NULL์„ ํ—ˆ์šฉํ• ์ง€, ํ—ˆ์šฉํ•˜์ง€ ์•Š์„์ง€ ๊ฒฐ์ •6. unique : ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ ๋•Œ ์‚ฌ์šฉ7. columnDefinition : DB ์ปฌ๋Ÿผ ์ •๋ณด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ8. length : varchar์˜ ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 255๊ฐ€ ์ž…๋ ฅ9. precsion, scale : BigInteger, BigDecimal ํƒ€์ž…์—์„œ ์‚ฌ์šฉ, ๊ฐ๊ฐ ์†Œ์ˆ˜์  ํฌํ•จ ์ž๋ฆฌ์ˆ˜, ์†Œ์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ์˜๋ฏธ

@Id

JPA๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‹๋ณ„ํ•  ๊ธฐ๋ณธํ‚ค๋ฅผ ์ง€์ •ํ•œ๋‹ค.

Lombok

๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” VO ๊ฐ์ฒด๋Š” , DB ํ…Œ์ด๋ธ”์˜ column ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ private ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ , getter setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•œ ํ›„ toString ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์œ„์— ๋งํ•œ ๋ณ€์ˆ˜ , ๋ฉ”์†Œ๋“œ๋“ค์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๊ณ , ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚  ์ˆ˜๋ก ์ถ”๊ฐ€๋„ ๊ท€์ฐฎ์„ ๋ฟ๋”๋Ÿฌ ๊ด€๋ฆฌ๋„ ํž˜๋“ค์–ด์ ธ ๊ฒฐ๊ตญ์—๋Š” ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง„๋‹ค.์œ„์˜ ๋ฌธ์ œ๋ฅผ ํƒ€ํŒŒํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Lombok์ด๋‹ค.

  • @ToString
    • toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. @ToString(exclude={“์ œ์™ธ๊ฐ’”})์œผ๋กœ ์ œ์™ธ์‹œํ‚ค๊ณ  ์‹ถ์€ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • @Getter , @Settergetter()
    • setter() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @EqualsAndHashCodeequals(), hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @RequiredArgsConstructor๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ค๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @Data์œ„์— ์–ธ๊ธ‰ํ•œ 5๊ฐ€์ง€ ์–ด๋…ธํ…Œ์ด์…˜ ์„ค์ •์„ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

์šฐ์„ , @Getter ์™€ @Setter๋Š” ๊ฐ๊ฐ ์ ‘๊ทผ์ž์™€ ์„ค์ •์ž ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š” Lombok ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์œ ๋ช…ํ•˜๋‹ค. ๋˜ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋Š” Lombok ์–ด๋…ธํ…Œ์ด์…˜์—๋Š”

  • @NorgsConstructor : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ
  • @AllArgsConstructor : ๋ชจ๋“  ํ•„๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  • @RequiredArgsConstructor : final์ด๋‚˜ @NonNull ์ธ ํ•„๋“œ ๊ฐ’๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

@EqualsAndHashCodeequals, hashCode ์ž๋™ ์ƒ์„ฑ

  • equals : ๋‘ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™์€์ง€, ๋™๋“ฑ์„ฑ(equality) ๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž
  • hashCode : ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€, ๋™์ผ์„ฑ(identity) ๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž

์ž๋ฐ” bean์—์„œ ๋™๋“ฑ์„ฑ ๋น„๊ต๋ฅผ ์œ„ํ•ด equals์™€ hashcode ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ,

@EqualsAndHashCode์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. callSuper ์†์„ฑ์„ ํ†ตํ•ด eqauls์™€ hashCode ๋ฉ”์†Œ๋“œ ์ž๋™ ์ƒ์„ฑ ์‹œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ๊นŒ์ง€ ๊ฐ์•ˆํ• ์ง€์˜ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. @EqualsAndHashCode(callSuper = true)๋กœ ์„ค์ •์‹œ ๋ถ€๋ชจ ํด๋ž˜์Šค ํ•„๋“œ ๊ฐ’๋“ค๋„ ๋™์ผํ•œ์ง€ ์ฒดํฌํ•˜๋ฉฐ, false(๊ธฐ๋ณธ๊ฐ’)์ผ ๊ฒฝ์šฐ ์ž์‹  ํด๋ž˜์Šค์˜ ํ•„๋“œ ๊ฐ’๋งŒ ๊ณ ๋ คํ•œ๋‹ค.

 

์ถœ์ฒ˜:

https://deveric.tistory.com/54
https://medium.com/@dlaudtjr07/spring-boot-lombok-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%84%A4%EC%B9%98-71f9dbbc2f42
https://n1tjrgns.tistory.com/164

 

@Data, @EqualsAndHashCode ์–ด๋…ธํ…Œ์ด์…˜

Spring @Data , @EqualsAndHashCode ์ด๋ฒˆ์— ํ™•์ธํ•ด๋ณผ ๋ถ€๋ถ„์€ Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. @Data, @EqualsAndHashCode๋ฅผ ๋ณด๊ธฐ์ „์— ์šฐ์„ , @Getter ์™€ @Setter๋Š” ๊ฐ๊ฐ ์ ‘๊ทผ์ž์™€ ์„ค์ •์ž ๋ฉ”์†Œ๋“œ๋ฅผ..

n1tjrgns.tistory.com

 

[Spring-boot JPA] ๋งตํ•‘ ์–ด๋…ธํ…Œ์ด์…˜ @Entity, @Table, @Column, @Id ์†์„ฑ๊ณผ ๊ฐœ๋… ์ •๋ฆฌ

๊ฐ์ฒด - ํ…Œ์ด๋ธ” ๋งตํ•‘ : @Entity, @Table ํ•„๋“œ - ์ปฌ๋Ÿผ์˜ ํŒนํ•‘ : @Column ๊ธฐ๋ณธํ‚ค์˜ ๋งตํ•‘ : @Id ์กฐ์ธ ๋งตํ•‘ : @ManyToOne, @JoinColumn @Entity @Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— ์„ ์–ธํ•˜๋ฉด ๊ทธ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค...

deveric.tistory.com

 

๋ฐ˜์‘ํ˜•
Comments