๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Spring

[Spring] JPA ๋ž€?

by HanaV 2023. 7. 5.
728x90

@Component๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ํด๋ž˜์Šค๋Š” ์ž๋™์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด ๊ธฐ์–ต์—๋Š” Entity ํด๋ž˜์Šค์—์„œ @Component๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์“ฐ์ง€ ์•Š์•˜๋Š”๋ฐ ์˜์•„ํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ, ๋ถ€๋„๋Ÿฝ๊ฒŒ๋„ ๋‚ด๊ฐ€ JPA์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์–ด๋…ธํ…Œ์ด์…˜์„ ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ๋’ค๋Šฆ๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

 

JPA๋ž€?

 JPA๋Š” Java Persistence API์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. JPA๋Š” ์ž๋ฐ”๋กœ RDBMS๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๋˜ํ•œ, JPA๋Š” ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์ฒด๋กœ๋Š” Hibernate, EclipseLink, Spring Data JPA ๋“ฑ์ด ์žˆ๋‹ค.

 JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†๋˜์ง€ ์•Š๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค!)

JPA ์–ด๋…ธํ…Œ์ด์…˜

@Entity: @Entity ์–ด๋…ธํ…Œ์ด์…˜์€ JPA์—์„œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— ์ ์šฉํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์ž„์„ JPA์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

@Table: @Table ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋งคํ•‘๋  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•œ๋‹ค. ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

@Column: @Column ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ์˜ ํ•„๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ด(Column)๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฒƒ์„ ์ง€์ •ํ•œ๋‹ค. ์—ด์˜ ์ด๋ฆ„, ๊ธธ์ด, NULL ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋“ฑ์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

@Id: @Id ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค(Primary Key)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฃผ๋กœ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ ํ•„๋“œ์— ์ ์šฉํ•˜๋ฉฐ, ๊ธฐ๋ณธ ํ‚ค๋กœ ์‚ฌ์šฉ๋  ํ•„๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

@GeneratedValue: @GeneratedValue ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ์˜ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์˜ ์ž๋™ ์ƒ์„ฑ ์ „๋žต์„ ์ง€์ •ํ•œ๋‹ค. ์ฃผ๋กœ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ž๋™ ์ƒ์„ฑ ์ „๋žต์œผ๋กœ๋Š” AUTO, IDENTITY, SEQUENCE, TABLE ๋“ฑ์ด ์žˆ๋‹ค.

@OneToMany์™€ @ManyToOne: ์ด๋“ค ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ์ผ๋Œ€๋‹ค(OneToMany) ๋ฐ ๋‹ค๋Œ€์ผ(ManyToOne) ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํ•œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

@ManyToMany: @ManyToMany ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๋‹ค๋Œ€๋‹ค(ManyToMany) ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํ•œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค์™€ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

๊ทธ๋Ÿผ ์œ„์—์„œ @Component๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜์—ˆ๋˜ ์ด์œ ๋ฅผ ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.

Entity ํด๋ž˜์Šค๋Š” ์ฃผ๋กœ @Entity ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๊ฐ™์€ JPA ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋œ๋‹ค. ์ด๋Ÿฌํ•œ JPA ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ Entity ํด๋ž˜์Šค๋ฅผ JPA์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ JPA ์–ด๋…ธํ…Œ์ด์…˜๋“ค์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด, ์Šคํ”„๋ง์—์„œ JPA ๊ด€๋ฆฌ ๋Œ€์ƒ์œผ๋กœ ์ž๋™์œผ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Entity ํด๋ž˜์Šค๋Š” ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค. Entity์˜ ๊ฒฝ์šฐ์—๋Š” @Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

728x90

"); wcs_do();