@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 ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
'๐ฅ๏ธ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์ธ์ (Session), ์ฟ ํค(Cookie), ์บ์(Cache) (0) | 2023.07.05 |
---|---|
[Spring] ์คํ๋ง ๋น(Bean)์ด๋? (0) | 2023.07.05 |
[Spring] Spring ์๋ ธํ ์ด์ ์ ๋ฆฌ (0) | 2023.07.05 |
[Spring] DTO์ Entity, ์ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ๊น? (0) | 2023.06.29 |
[Spring] SpringToolSuite4 ํ๋ก๊ทธ๋จ ์คํ ์๋ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.06.03 |