ํด๋น ๊ธ์ 1ํ 2ํ(https://wonit.tistory.com/128?category=738059)๋ก ๋๋์ด์ ธ ์์ต๋๋ค. ์์ธํ ํ์ต์ ์ํด ๋ชจ๋ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ ค์ :)
CRUD๋?
CRUD๋ ์กด์ฌํ๋ ๊ฑฐ์ ๋๋ถ๋ถ์ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ณธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๋ปํ๋ค. ์ด๋ ๊ฒ๋ง ์ค๋ช ํ๋ฉด ๋ง์ด ๋๋ฌด ์ด๋ ค์ฐ๋ฏ๋ก ์ฝ๊ฒ ๋ง ํด์ ๋ก๊ทธ์ธํ๊ณ , ๊ธ์ ์ฌ๋ฆฌ๊ณ , ํ์๊ฐ์ ์ ํ๋ฉฐ, ๋ด๊ฐ ์ฐํ ๋ชฉ๋ก์ ์ญ์ ํ๋ ๋ฑ ์ด๋ฌํ ๋ชจ๋ ๋ฐ์ดํฐ ๊ด๋ จ ์ฒ๋ฆฌ์ ๊ฐ์ฅ ๊ธฐ์ด๊ฐ ๋๋ ์ด์์ ๋ปํ๋ค.
C
- Create
- ๋ฐ์ดํฐ๋ฅผ ์์ฑ ๋๋ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
- SQL์
insert
์ ํด๋นํ๋ค.
R
- Read
- ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ธฐ๋ฅ์ ํ๋ค.
- SQL์
select
์ ํด๋นํ๋ค.
U
- Update
- ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ฐ์ ์๋กญ๊ฒ ๊ฐฑ์ ์ํค๋ ๊ธฐ๋ฅ์ ํ๋ค.
- SQL์
update
์ ํด๋นํ๋ค.
D
- Delete
- ์์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
- SQL์
delete
์ ํด๋นํ๋ค.
MVC์ Model๊ณผ Entity
JPA๋ฅผ ์ฌ์ฉํ์ฌ Data๋ฅผ ์ด์ฉํ๋ ค๋ฉด, Model๊ณผ Entity์ JpaRepository์ ๋ํด์ ์์์ผ ํ๋ค.
Model of MVC
MVC ๋์์ธ ํจํด์์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ถ๋ถ์ผ๋ก ์๋น์ค์ ์ ๋ณด, ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ฉฐ ์ ๋ณด์ ๊ฐ๊ณต์ ์ํ ์ปดํฌ๋ํธ๋ผ๊ณ ์๊ฐํ๋ฉด๋๋ค.
์์ผ๋ก ์ฐ๋ฆฌ๋ ์ด model
์์์ JPA๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌํ ๊ฒ์ด๋ค.
Entity of JPA
JPA๋ ์ด Entity๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ธํ์ฌ ํด๋น Entity๋ฅผ ํ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ์ฒ๋ฆฌ ๋ฐ ๊ฐ๊ณตํ๋ค. ์ฝ๊ฒ ๋ง ํด์ Entity๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Table ๋ช ์ ๋ปํ๋ค.
์ํฐํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ํด๋์ค๊ฐ Entity๋ผ๋ ๊ฒ์์ Spring์๊ฒ ์๋ ค์ค์ผ ํ๋๋ฐ ๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก @Entity
์ด๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋ธ ํด๋์ค๊ฐ ์กด์ฌํ๋ค๊ณ ํด๋ณด์. ํด๋น ๋ชจ๋ธ ํด๋์ค์๋ ์ฌ์ฉ์์๋ํ ๊ธฐ๋ณธ์ ์ ๋ณด๊ฐ ๋ํ๋ ๊ฒ์ด๋ค.
public class User {
private Long id;
private String account;
private String password;
private String name;
}
๊ฐ๋จํ๊ฒ ์ด๋ฌํ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ด ํด๋์ค์ ์ ๋ณด๋ Mysql์๋ ๋๊ฐ์ด ์กด์ฌํด์ผ ํ๋ค.
๊ทธ๋ผ ์ด์ Entity๋ก ๋ฑ๋ก์ ํด๋ณด์.
ํด๋์ค๋ฅผ ์ํฐํฐ๋ก ๋ฑ๋ก์ ํ๊ธฐ ์ํด์ ์ธ ๊ฐ์ง๋ง ํ์ธํด๋ณด์.
- DB ํ ์ด๋ธ ์ด๋ฆ๊ณผ Entity ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์๊ฐ?
๊ผญ ๊ฐ์์ผ๋ง ํ๋ ๊ฒ์ ์๋๋ค. ๋ง์ฝ ๊ฐ๋ค๋ฉด
@Entity(name="user")
์์ name ๋ถ๋ถ์ ๋นผ๊ณ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.@Entity
- Primary Key๊ฐ ์กด์ฌํ๋๊ฐ?
primary key๊ฐ ์๋ค๋ฉด (์๋ง๋ id ๊ฐ์ผํ ๋ฐ), ํด๋น ํ๋์
@Id
์ด๋ ธํ ์ด์ ๊ณผ@GeneratedValue(strategy = GenerationType.IDENTITY)
์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํด์ Mysql ์ ๋ต์ ์ฌ์ฉํ ๊ฒ์ ์๋ ค์ฃผ์.
- DB ํ ์ด๋ธ์ ํ๋ ๋ช ๊ณผ Entity ํด๋์ค์ ํ๋ ๋ช ์ด ๊ฐ์๊ฐ?
๋ง์ฝ ๋ค๋ฅด๋ค๋ฉด
@Column(name = DB์ ์๋ ํ๋ ์ด๋ฆ)
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ง์ถฐ์ฃผ๊ณ ์์ผ๋ฉด ์๋ตํ์.
์ด์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋๋ฐ ๋ง์ง๋ง์ผ๋ก ๋ฑ ํ๋. getter/setter์ ์ํด์ ๋กฌ๋ณต์ ์ฌ์ฉํ์. (@Data
์ด๋
ธํ
์ด์
๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
@Entity
@Data
public class User {
private Long id;
private String account;
private String password;
private String name;
}
CRUD๋ฅผ ์ํ ์ค๋น๋ฅผ ๋ง์ณ๋ณด์.
์๊น ๋ด๊ฐ JPA๋ฅผ ์ํด์ ์ธ ๊ฐ์ง๋ฅผ ์์์ผ ํ๋ค ํ๋ค.
- Model
- Entity
- JpaRepository
1๋ฒ๊ณผ 2๋ฒ์ ํ๊ณ ๋ง์ง๋ง Repository์ ๋ํด์๋ง ์๋ฉด ์ง์ง Jpa๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์กฐ๊ธ๋ง ์ฐธ์๋ณด์..
Repository์ ์ ํํ ์ฌ์ฉ์ DAO๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ธ๋ฐ JpaRepository๋ JPA์ ๊ตฌํ์ฒด๋ผ๊ณ ํ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น?
๋ฐ๋ก ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ์ ์ฅ๊ณผ ์ฒ๋ฆฌ ๋ฐ ๊ฐ๊ณต์ด๋ผ๊ณ ์๊น ์ด์ผ๊ธฐ ํ๋ค. ๊ทธ๋ฐ ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด์ Jpa๋ ๊ธฐ๋ณธ์ ์ธ CRUD๊ฐ ์ ์๋์ด ์๋ JpaRepository๋ฅผ ๊ตฌํํ์๊ณ ์ฌ์ฉ์๋ค์ ๊ทธ ๊ตฌํ์ฒด๋ฅผ ์์ํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ ๋ง ๋ณ๊ฒ ์๋ค.
๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ repository ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ํด๋น ์ํฐํฐ๊ฐ ์ฌ์ฉํ Repository ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ฃผ๋ฉด ๋๋ค. ๋ช ์ฌํ์! ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
UserRepository
๋ฅผ ๋ง๋ค๊ณ ์ด ์ธํฐํ์ด์ค๊ฐ Repository์์ ์๋ฆฌ๊ธฐ ์ํด์@Repository
์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๋ค.
- ์์์ ๊ตฌํํ๋๋ฐ, Generic ํ์ ์ผ๋ก๋ ํด๋น ์ํฐํฐ์ ์ํฐํฐ์ PK์ ์๋ฃํ์ ์ ์ด์ค๋ค.
์ด์ ์ค๋น๊ฐ ๋๋ฌ๋ค. ๋ค์ ํธ์์๋ ์ด๋ฒ์ ํ๋ ๊ฒ๋ค์ ์ด์ฉํด์ ์ค์ ์๋น์ค๋ฅผ ๋ง๋ค์ด ๋ณผ ์์ ์ด๋ค.
๋๊ธ