[ํ๋ก์ ํธ ์ผ์ง] 4๋ฒ์งธ ํ๋ก์ ํธ - 1. ์๋ฒ ์ค๊ณํ๊ธฐ
[ํ๋ก์ ํธ ์ผ์ง] 4๋ฒ์งธ ํ๋ก์ ํธ - 2. ์คํ๋ง ํ๋ก์ ํธ ์์ฑ, ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ฑ
์ ๋ฒ์ฃผ์ ์งํํ ๋ด์ฉ์ด์ง๋ง ์ด์ ์์ผ ๊ธฐ๋กํ๋ JPA Entity ๊ด๊ณ ์ค์ ํ ์ด์ผ๊ธฐ!
๊ธฐ์กด์ ๋ค๋ฅธ DB(Firebase)์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฅผ RDB๋ก ์ด๊ดํ๊ณ , ์์ผ๋ก ๊ฐ๋ฐ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ธฐ์กด์ ๊ธฐ๋ฅ๊ณผ ์ฐ๊ณํด ๊ตฌํํด์ผ ํ๋ ์ํฉ์ด๋ค. ์ถ๊ฐ๋ก ๊ตฌํํด์ผ ํ๋ ๊ธฐ๋ฅ์ ๋๋ต์ ์ธ ๊ธฐํ์ ๋ง๊ฒ DB๋ฅผ ์ค๊ณํ์๋ค. ์์ง ๊ธฐํ์ ์ธ๋ถ์ ์ธ ๋ด์ฉ์ด ํฝ์ค๋๊ฒ ์๋๋ผ์ ํ์ํ ํ ์ด๋ธ์ ๋์ดํด๋ณด๊ณ , ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ง ๋ฐ์ ธ๋ดค์๋ค.
ํ์ ๋๋์ ์ธ ๋ณ๊ฒฝ์ด ์์ ๊ฒ ๊ฐ์ง๋ง, ๋๋ต ์ค๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์คํ๋ง์์ DB์ ๋งคํํ๊ธฐ ์ํด JPA ๊ฐ์ฒด์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ์ค์ ํด๋ณด๊ธฐ๋ก ํ๋ค.
JPA ์ฐ๊ด ๊ด๊ณ ๋งคํ
ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ์๋ ์ผ๋์ผ, ์ผ๋๋ค, ๋ค๋์ผ, ๋ค๋๋ค๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ '๋ค'์์ ์ธ๋ํค(FK)๋ฅผ ๊ฐ๋๋ค. ํ ์ด๋ธ์ ์ธ๋ํค๋ก ์๋ฐฉํฅ์ผ๋ก ์กฐ์ธํ ์ ์๋ค. ๊ฐ์ฒด๋ ๋จ๋ฐํฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง์ง๋ง, ์๋ก ์ฐธ์กฐ๋ฅผ ํ๋๋ก ํ ์ ์๋ค. ๋ฐ๋ผ์, ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋จ๋ฐฉํฅ ๋๋ ์๋ฐฉํฅ(์ค์ ๋จ๋ฐฉํฅ 2๊ฐ)๋ก ๋งคํํ ์ ์๋ค.
๋จ๋ฐฉํฅ? ์๋ฐฉํฅ?
์ด๋ป๊ฒ ๋งคํํ๋์ง์ ๋ฐ๋ผ ์ฐธ์กฐํ ์ ์๋ ๊ฐ์ฒด๋ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๊ด๊ณ๋ฅผ ์ ์ค์ ํด์ผ ํ๋ค.
1) ์๋ฐฉํฅ์ธ๊ฐ ๋จ๋ฐํฅ์ธ๊ฐ?
2) ์๋ฐฉํฅ์ด๋ผ๋ฉด ์ฐ๊ด ๊ด๊ณ์ ์ฃผ์ธ์ ๋๊ตฌ์ธ๊ฐ?
์ด๋์ ๋ณด๊ธฐ๋ก๋ ๋ฌด์กฐ๊ฑด ์๋ฐฉํฅ ๊ด๊ณ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋๋ฐ, ํนํ ์ผ๋๋ค ๋จ๋ฐฉํฅ ๋งคํ์ ๊ฒฝ์ฐ์๋ ๋ค๋์ผ ์๋ฐฉํฅ ๋งคํ์ ์ฐ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค. ์ผ๋๋ค ๋จ๋ฐฉํฅ์ ๊ฒฝ์ฐ์๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์๋ฐฉํฅ ๋งคํ์ ๊ฒฝ์ฐ, ๊ทธ๋งํผ ๋ณต์ก๋๋ ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ ์๋ฐฉํฅ์ด ๊ตณ์ด ํ์ํ์ง ์์ ๊ฒ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋จ๋ฐฉํฅ์ผ๋ก ์ค์ ํ๋๋ก ํ๋ค. ์ผ๋จ ๋จ๋ฐฉํฅ์ผ๋ก ์ค์ ํ๊ณ ํ์ํ๋ฉด ์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ ๊ณํ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๊ด ๊ด๊ณ์ ์ฃผ์ธ์ ์ธ๋ํค(FK)๋ฅผ ๊ฐ๊ณ ์๋ ๊ณณ์ผ๋ก ์ค์ ํ๋ค.
์ ์ ๋ฅผ ์ค์ฌ์ผ๋ก ๊ด๊ณ ์ค์ ํ๊ธฐ
์ผ๋จ ์ค์ฌ์ด ๋๋ ์ ์ ํ ์ด๋ธ์ ์ฐ๊ฒฐ๋์ด ์๋ ํ ์ด๋ธ๋ค์ด ๋ง์๋ค. ๊ทธ๋์ ๋จผ์ ์ ์ ๋ฅผ ์ค์ฌ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ด๊ณ๋ฅผ ๋งบ์ด ๋๊ฐ๋ค.
์๋ฐฉํฅ ๋งคํํ๊ธฐ
ํ๋์ ๊ณต์ฌ์ ์ฌ๋ฌ ๋ช ์ ์ ์ ๊ฐ ์ฐธ์ฌํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ ๋ ์ฌ๋ฌ ๊ณต์ฌ์ ์ฐธ์ฌํ ์ ์๋ค.
N : M์ ๊ด๊ณ์ง๋ง, ์ค๊ฐ ํ ์ด๋ธ์ ๋์ด ์ธ๋ํค(FK)๋ฅผ ์ ์ฅํ๋๋กํด 1 : N, N : 1 ๊ด๊ณ๋ฅผ ๋์๋ค.
์ค๊ฐ ๊ฐ์ฒด(N)์ ์ฐ๊ด ๊ด๊ณ์ ์ฃผ์ธ์ผ๋ก ์ค์ ํ๊ณ , ์์ชฝ์์ ์๋ก ์ฐธ์กฐ๋ฅผ ํ๋๋ก ์๋ฐฉํฅ์ผ๋ก ๋งคํ์ ํ๋ค.
N ๊ฐ์ฒด (์ฐ๊ด ๊ด๊ณ ์ฃผ์ธ)
@Entity
public class ConstructionUser {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "construction_user_id")
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "construction_id")
private Construction construction;
}
`@ManyToOne`์ ์ถ๊ฐํด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ `@JoinColumn`์ผ๋ก ์๋ํค(FK)๋ก ๋งคํํ๋๋ก ํ๋ค.
1 ๊ฐ์ฒด
@Entity
public class User {
@Id
@Column(name = "user_id")
private String id;
...
@OneToMany(mappedBy = "user")
private List<ConstructionUser> constructionUserList = new ArrayList<>();
...
}
@Entity
public class Construction {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "construction_id")
private Long id;
...
@OneToMany(mappedBy = "construction")
private List<ConstructionUser> constructionUserList = new ArrayList<>();
}
`@OneToMany`์ ์ถ๊ฐํด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ `mappedBy`๋ก ์์ ์ด ์ฐ๊ด ๊ด๊ณ์ ์ฃผ์ธ์ด ์๋์ ์ค์ ํ๋ค.
fetch๋ cascade ๋ฑ ๋ค๋ฅธ ์ต์ ๋ค์ ๋์ค์ ์ค์ ํ ๊ฒ์ด๋ค.
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Project/4th] ๋ฒ์ ๋, ์ขํ๊ฐ ๋ฐ์ดํฐ DB์ ์ ์ฅํ๊ธฐ(1) (0) | 2024.06.01 |
---|---|
[Project/4th] 4. ํ ์คํธ ์๋ฒ ์ธํ๋ผ ๊ตฌ์ถ - SSH ์ ์, Docker๋ก ์๋๋ฐฐํฌ (0) | 2024.04.05 |
[Project/4th] 2. ์คํ๋ง ํ๋ก์ ํธ ์์ฑ, ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ฑ (0) | 2024.03.26 |
[Project/4th] 1. ์๋ฒ ์ค๊ณํ๊ธฐ (0) | 2024.03.18 |
[ํ๋ก์ ํธ ํ๊ณ ] 2์ฐจ ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ (0) | 2023.04.09 |