JPA๋??
Java ์ธ์ด๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์์ ๊ณ์ธต์ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ์คํ
ORM๊ณผ JPA
ORM
- ๊ฐ์ฒด์งํฅ๊ณผ ๊ด๋ จ์ด ์์
- ‘๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด์กดํ๋ ๊ธฐ์ ’
- ‘๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๊ด๊ณํ ํจ๋ฌ๋ค์์ผ๋ก ๋งคํํด์ฃผ๋ ๊ฐ๋ ’
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์ ์ค๊ณํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ํ์ ๋ง๋ ๋ค๋ ์๋ฏธ์์ ํด๋์ค์ ์๋นํ ์ ์ฌํจ
1 2 3 4 5
public class Member{ private String id; private String pw; private String name; }
1 2 3 4
Member id -> varchar2(50) pw -> varchar2(50) name -> varchar2(100)
- ํด๋์ค์ ํ
์ด๋ธ์ด ์ ์ฌํ๋ฏ์ด ‘์ธ์คํด์ค’์ ‘Row’๋ ์๋นํ ์ ์ฌํจ
- ๊ฐ์ฒด์งํฅ์์๋ ํด๋์ค์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ธ์คํด์ค์ ๋ณด๊ด
- ํ ์ด๋ธ์์๋ ํ๋์ ‘Row’์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๊ด๊ณ์ ์ฐธ์กฐ๋ผ๋ ์๋ฏธ๋ ๋งค์ฐ ์ ์ฌํจ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํตํ์ฌ ๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ํํ
- ๊ฐ์ฒด์งํฅ์์๋ ์ฐธ์กฐ๋ฅผ ํตํ์ฌ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ์ด๋ค ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋์ง๋ฅผ ํํ
JPA
- ‘Java Persistence API"์ ์ฝ์ด
- ORM์ Java์ธ์ด์ ๋ง๊ฒ ์ฌ์ฉํ๋ ์คํ
- ORM์ด ๋ ์์์ ๊ฐ๋ ์ด๋ค.
- JPA๋ ๋จ์ํ ์คํ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ์คํ์ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ง๋ค ํ์ฌ์ ์ด๋ฆ์ด๋ ํ๋ ์์ํฌ์ ์ด๋ฆ์ด ๋ค๋ฅด๊ฒ ๋๋ค.
- ๊ทธ์ค์์ ๊ฐ์ฅ ์ ๋ช ํ ๊ฒ์ด Hibernate
์ํฐํฐ ํด๋์ค์ JpaRepository
Spring Data JPA๊ฐ ๊ฐ๋ฐ์ ํ์ํ ๊ฒ์ ๋จ์ง ๋ ์ข ๋ฅ์ ์ฝ๋์ด๋ค.
- JPA๋ฅผ ํตํด์ ๊ด๋ฆฌํ๊ฒ ๋๋ ๊ฐ์ฒด(์ดํ ์ํฐํฐ ๊ฐ์ฒด)๋ฅผ ์ํ ์ํฐํฐ ํด๋์ค
- ์ํฐํฐ ๊ฐ์ฒด๋ค์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง Repository
- repository๋ Spring Data JPA์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก ์ค๊ณํ๋๋ฐ ์คํ๋ง ๋ด๋ถ์์ ์๋์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๊ตฌ์กฐ์ด๋ค.
์ํฐํฐ ํด๋์ค
|
|
-
@Entity
- ์ํฐํฐ ํด๋์ค๋ ๋ฐ๋์ @Entity๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํด์ผํ๋ค.
- ํด๋น ํด๋์ค๊ฐ ์ํฐํฐ๋ฅผ ์ํ ํด๋์ค๋ผ๋ ๊ฒ์ ์๋ฏธ
- ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ค์ด JPA๋ก ๊ด๋ฆฌ๋๋ ์ํฐํฐ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ์๋ฏธ
-
@Table
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ์ํฐํฐ ํด๋์ค๋ฅผ ์ด๋ ํ ํ ์ด๋ธ๋ก ์์ฑํ ๊ฒ์ธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- @Table(name = “") ์ด๋ฐ ํ์์ผ๋ก ์ด๋ฆ๋ ์ ํ ์ ์๋ค.
- ๋จ์ํ ํ ์ด๋ธ์ ์ด๋ฆ ๋ฟ๋ง ์๋๋ผ ์ธ๋ฑ์ค ๋ฑ์ ์์ฑํ๋ ์ค์ ๋ ๊ฐ๋ฅํ๋ค.
-
@Id, @GeneratedValue
- @Entity๊ฐ ๋ถ์ ํด๋์ค๋ PK์ ํด๋นํ๋ ํน์ ํ๋๋ฅผ @Id๋ก ์ง์ ํด์ผ๋ง ํ๋ค.
- @Id๊ฐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ๋ฒํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด @GeneratedValue๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
- (strategy = GenerationType.IDENTITY) ํค ์์ฑ ์ ๋ต์ด๋ผ๊ณ ๋ ํ๋ค.
- AUTO - JPA ๊ตฌํ์ฒด๊ฐ ์์ฑ ๋ฐฉ์์ ๊ฒจ๋
- IDENTITY - ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํค ์์ฑ์ ๊ฒฐ์
- SEQUENCE - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ sequence๋ฅผ ์ด์ฉํ์ฌ ํค๋ฅผ ์์ฑ, @SequenceGenerator์ ๊ฐ์ด ์ฌ์ฉ
- TABLE - ํค ์์ฑ ์ ์ฉ ํ ์ด๋ธ์ ์์ฑํด์ ํค ์์ฑ, @TableGenerator์ ํจ๊ป ์ฌ์ฉ
-
@Coulmn
- ์ถ๊ฐ์ ์ธ ํ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ ธํ ์ด์ ์ ํ์ฉํ๋ค.
- nullable, name, length ๋ฑ์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์นผ๋ผ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณต
- columnDefinition์ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ๊ฐ๋ ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
-
@Builder
- ๊ฐ์ฒด ์์ฑํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- @AllArgsConstructor์ @NoArgsConstructor๋ฅผ ๊ฐ์ด ์ฌ์ฉํด์ผ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์
JpaRepository ์ธํฐํ์ด์ค
Sprin Date JPA์๋ ์ฌ๋ฌ ์ข
๋ฅ์ ์ธํฐํ์ด์ค์ ๊ธฐ๋ฅ์ ํตํด์ JPA ๊ด๋ จ ์์
์ ๋ณ๋์ ์ฝ๋ ์์ด ์ฒ๋ฆฌํ ์ ์๊ฒ ์ง์ํ๋ค. ๊ทธ ์ค์ ํ๋๊ฐ JpaRepository ์ธํฐํ์ด์ค์ด๋ค.
์ผ๋ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ CrudRepository๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ณ , ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด JpaRepository๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ JpaRepository๋ฅผ ์ฌ์ฉํ๋ค.
|
|
- JpaRepository๋ฅผ ์ฌ์ฉํ ๋๋ ์ํฐํฐ์ ํ์ ์ ๋ณด(Memo ํด๋์ค ํ์ )์ @Id์ ํ์ ์ ์ง์ ํ๋ค.
- ์ ์ฒ๋ผ ์ธํฐํ์ด์ค์ ์ ์ธ๋ง์ผ๋ก๋ ์๋์ผ๋ก ์คํ๋ง์ bean์ผ๋ก ๋ฑ๋ก๋๋ค.
- CRUD
- insert ์์ : save(์ํฐํฐ ๊ฐ์ฒด)
- select ์์ : findById(ํค ํ์ ), getOne(ํค ํ์ )
- update ์์ : save(์ํฐํฐ ๊ฐ์ฒด)
- delete ์์ : deleteById(ํค ํ์ ), delete(์ํฐํฐ ๊ฐ์ฒด)
- save -> JPA์ ๊ตฌํ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์์ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๊ณ ์๋ค๋ฉด insert, ์กด์ฌํ๋ค๋ฉด update๋ฅผ ๋์์ํค๋ ๋ฐฉ์์ผ๋ก ๋์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ธ(dialect)
- JPA๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ์์ ์ด์ง ์์ ๊ธฐ์
- ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ๊ณตํ๋ SQL ๋ฌธ๋ฒ๊ณผ ํจ์๋ ์กฐ๊ธ์ฉ ๋ค๋ฅด๋
- ๊ฐ๋ณ ๋ฌธ์ : MySQL์ VARCHAR, ORACLE์ VARCHAR2
- ๋ฌธ์์ด์ ์๋ฅด๋ ํจ์ : SQLํ์ค์ SUBSTRING(), ORACLE์ SUBSTR()
- ํ์ด์ง : MySQL์ LIMIT, ORACLE์ ROWNUM
- ๋ฐฉ์ธ : SQL ํ์ค์ ์งํค์ง ์๊ฑฐ๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง์ ๊ณ ์ ํ ๊ธฐ๋ฅ
- JPA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฐฉ์ธ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ORACLE -> MYSQL ์ด๋ ๊ทธ๋ฐ๋๋ก ์ ํ์ด ์์ฒญ ๋น ๋ฅด๋ค…