Home
>
Spring
>
๐[Spring] ๋จ๋ฐฉํฅ ๊ด๊ณ๋ ๋ฌด์์ผ๊น์?
Spring
Framework
๐[Spring] ๋จ๋ฐฉํฅ ๊ด๊ณ๋ ๋ฌด์์ผ๊น์?
-
๋จ๋ฐฉํฅ ๊ด๊ณ๋ ๋ ์ํฐํฐ ๊ฐ์ ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์ค์ ๋ ๊ด๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ฆ, ํ ์ํฐํฐ๋ ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์ง๋ง, ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก๋ ์ฐธ์กฐ๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๋จ๋ฐฉํฅ ๊ด๊ณ์์๋ ๊ด๊ณ์ ๋ฐฉํฅ์ด ํ์ชฝ์ผ๋ก๋ง ์ค์ ๋๊ธฐ ๋๋ฌธ์ ํ ์ํฐํฐ๋ง ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ํ์ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด์ ์์๋ ์ธ๋ ํค(Foregin Key)๊ฐ ํ์ชฝ ํ
์ด๋ธ์๋ง ์กด์ฌํ๋ฉฐ, ๋ฐ๋์ชฝ ๊ด๊ณ ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
1๏ธโฃ ํน์ง.
1๏ธโฃ ๋จ๋ฐฉํฅ ์ฐธ์กฐ.
- ํ์ชฝ ์ํฐํฐ์์๋ง ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- ๋ฐ๋ ๋ฐฉํฅ์ ํ์์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
2๏ธโฃ ์ค๊ณ๊ฐ ๊ฐ๋จ.
- ๊ด๊ณ ๋ฐฉํฅ์ด ๋จ์ํ๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ฝ์ต๋๋ค.
- ํ์ ์ด์์ผ๋ก ๋ณต์กํ ๊ด๊ณ๋ฅผ ๋ง๋ค์ง ์์๋ ๋ฉ๋๋ค.
3๏ธโฃ ์ธ๋ ํค(Foregin Key)
- ์ธ๋ ํค(Foregin Key)๋ ๊ด๊ณ๋ฅผ ์ฐธ์กฐํ๋ ์ํฐํฐ(์ฐธ์กฐํ๋ ์ชฝ)์๋ง ์กด์ฌํฉ๋๋ค.
2๏ธโฃ ๋จ๋ฐฉํฅ ๊ด๊ณ์ ์ข
๋ฅ.
1๏ธโฃ @ManyToOne
-
์์ ์ํฐํฐ(N)๊ฐ ๋ถ๋ชจ ์ํฐํฐ(1)๋ฅผ ์ฐธ์กฐํ๋ ๋จ๋ฐฉํฅ ๊ด๊ณ.
- ์ธ๋ ํค(Foreign Key)๋ ์์ ํ
์ด๋ธ์ ์กด์ฌ.
๐ ์์
-
Order์ Customer ๊ด๊ณ : ์ฌ๋ฌ ์ฃผ๋ฌธ(Order)์ด ํ๋์ ๊ณ ๊ฐ(Customer)์ ์ฐธ์กฐ.
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "customer_id") // ์ธ๋ ํค
private Customer customer;
// ๊ธฐํ ํ๋ ๋ฐ ๋ฉ์๋
}
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Order ํ
์ด๋ธ์ customer_id ์ปฌ๋ผ์ ์ธ๋ ํค(Foreign Key)๋ก ๊ฐ์ง๋๋ค.
2๏ธโฃ @OneToMany
-
๋ถ๋ชจ ์ํฐํฐ(1)๊ฐ ์์ ์ํฐํฐ(N)์ ์ปฌ๋ ์
์ ์ฐธ์กฐํ๋ ๋จ๋ฐฉํฅ ๊ด๊ณ.
- ์ธ๋ ํค(Foreign Key)๋ ์์ ํ
์ด๋ธ์ ์กด์ฌํ๋ฉฐ, ๋ถ๋ชจ ํ
์ด๋ธ์๋ ์ปฌ๋ ์
๋ง ๊ด๋ฆฌ.
๐ ์์
-
Customer์ Order ๊ด๊ณ : ํ ๊ณ ๊ฐ(Customer)์ด ์ฌ๋ฌ ์ฃผ๋ฌธ(Order)์ ๊ฐ์ง.
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany
@JoinColumn(name = "customer_id") // ์ธ๋ ํค๋ฅผ ์์ ํ
์ด๋ธ์ ์ค์
private List<Order> orders = new ArrayList<>();
// ๊ธฐํ ํ๋ ๋ฐ ๋ฉ์๋.
}
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ธ๋ ํค๊ฐ ์ฌ์ ํ Order ํ
์ด๋ธ์ ์กด์ฌ.
3๏ธโฃ @OneToOne
- ํ ์ํฐํฐ๊ฐ ๋ค๋ฅธ ์ํฐํฐ์ 1:1๋ก ๋งคํ๋๋ ๋จ๋ฐฉํฅ ๊ด๊ณ.
- ์ธ๋ ํค๋ ์ฐธ์กฐํ๋ ์ชฝ์๋ง ์กด์ฌ.
๐ ์์ .
-
Passport์ Person ๊ด๊ณ : ํ ์ฌ๋(Person)์ด ํ๋์ ์ฌ๊ถ(Passport)์ ๊ฐ์ง.
@Entity
public class Passport {
@Id
@GeneratedValue(stratege = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name = "person_id") // ์ธ๋ ํค
private Person person;
// ๊ธฐํ ํ๋ ๋ฐ ๋ฉ์๋
}
4๏ธโฃ @ManyToMany
- ๋ ์ํฐํฐ๊ฐ ์๋ก ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๋จ๋ฐฉํฅ ๊ด๊ณ.
- ์ค๊ฐ ํ
์ด๋ธ์ ํตํด ์ฐ๊ฒฐ๋๋ฉฐ, ํ์ชฝ์์๋ง ๋ค๋ฅธ ์ชฝ์ ์ฐธ์กฐ.
๐ ์์ .
-
Student์ Course ๊ด๊ณ : ํ ํ์(Student)์ด ์ฌ๋ฌ ์์
(Course)์ ๋ฃ๋ ๊ฒฝ์ฐ.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "courser_id")
)
private List<Course> courses = new ArrayList<>();
// ๊ธฐํ ํ๋ ๋ฐ ๋ฉ์๋
}
3๏ธโฃ ๋จ๋ฐฉํฅ ๊ด๊ณ์ ์ฅ๋จ์ .
1๏ธโฃ ์ฅ์ .
1๏ธโฃ ์ค๊ณ ๋ฐ ์ ์ง๋ณด์๊ฐ ๊ฐ๋จ.
- ๊ด๊ณ๊ฐ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์ค์ ๋๋ฏ๋ก ๋ณต์ก๋๊ฐ ์ค์ด๋ญ๋๋ค.
2๏ธโฃ ์ฑ๋ฅ ์ต์ ํ.
- ์๋ฐฉํฅ ๊ด๊ณ๋ณด๋ค ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ๊ด๋ฆฌ ๋น์ฉ์ด ๋ฎ์ต๋๋ค.
- ๋ถํ์ํ ์ฐ๊ด ๋ฐ์ดํฐ ๋ก๋ฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
3๏ธโฃ ์์กด์ฑ ๊ฐ์.
- ๋ ์ํฐํฐ ๊ฐ์ ์์กด์ฑ์ด ๋ฎ์์ ธ ์ค๊ณ๊ฐ ์ ์ฐํฉ๋๋ค.
2๏ธโฃ ๋จ์ .
1๏ธโฃ ํ์ ๋ฐฉํฅ ์ ํ.
- ๊ด๊ณ์ ๋ฐฉํฅ์ด ํ์ชฝ์ผ๋ก๋ง ์ค์ ๋๋ฏ๋ก, ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ค๋ฉด ๋ณ๋์ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ์: Order์์ Customer๋ ์ฐธ์กฐ ๊ฐ๋ฅํ์ง๋ง, Customer์์ Order๋ ์ฐธ์กฐ ๋ถ๊ฐ๋ฅ.
2๏ธโฃ ์ถ๊ฐ ์๊ตฌ์ฌํญ์ ๋ํ ํ์ฅ์ฑ ์ ํ.
- ๋จ๋ฐฉํฅ ๊ด๊ณ๋ง์ผ๋ก ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ, ์ถ๊ฐ์ ์ผ๋ก ์๋ฐฉํฅ ๊ด๊ณ๋ฅผ ์ค์ ํด์ผ ํ ์ ์์ต๋๋ค.
4๏ธโฃ ๋จ๋ฐฉํฅ ๊ด๊ณ ์ฌ์ฉ ์์ .
1๏ธโฃ ๋ฐ์ดํฐ ํ์ ๋ฐฉํฅ์ด ํ์ชฝ์ผ๋ก๋ง ํ์ํ ๊ฒฝ์ฐ.
- ์: ์์ -> ๋ถ๋ชจ(์ฃผ๋ฌธ์์ ๊ณ ๊ฐ์ ์ฐธ์กฐ)
2๏ธโฃ ์๋ฐฉํฅ ๊ด๊ณ๊ฐ ๋ถํ์ํ ๊ฒฝ์ฐ.
- ๋ฐ๋ ๋ฐฉํฅ ํ์์ด ์๊ตฌ๋์ง ์์ผ๋ฉฐ, ๊ฐ๋จํ ์ค๊ณ๋ฅผ ์ํ ๋.
3๏ธโฃ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ ๊ฒฝ์ฐ,
- ๋ถํ์ํ ์ฐ๊ด ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ๋ณต์กํ ๊ด๊ณ๋ฅผ ์ค์ด๊ณ ์ถ์ ๊ฒฝ์ฐ.
5๏ธโฃ ๋จ๋ฐฉํฅ ๊ด๊ณ์ ์๋ฐฉํฅ ๊ด๊ณ ๋น๊ต.
ํน์ง |
๋จ๋ฐฉํฅ ๊ด๊ณ |
์๋ฐฉํฅ ๊ด๊ณ |
์ฐธ์กฐ ๋ฐฉํฅ |
ํ์ชฝ์์๋ง ์ฐธ์กฐ ๊ฐ๋ฅ |
์์ชฝ์์ ์ฐธ์กฐ ๊ฐ๋ฅ |
์ค๊ณ ๋ณต์ก์ฑ |
๊ฐ๋จ |
๋ณต์ก |
์ฌ์ฉ ์ฌ๋ก |
๋จ์ํ ๊ด๊ณ์์ ์ฌ์ฉ |
๋ถ๋ชจ์ ์์ ๋ชจ๋ ํ์์ด ํ์ํ ๊ฒฝ์ฐ |
์ธ๋ ํค ๊ด๋ฆฌ |
์ธ๋ ํค๋ ๊ด๊ณ ์ค์ ๋ ์ชฝ์์๋ง ๊ด๋ฆฌ |
์ธ๋ ํค๋ ๊ด๊ณ ์ฃผ์ธ์ด ๊ด๋ฆฌ |
์ฑ๋ฅ |
๋ฎ์ ์ฐ์ฐ ๋น์ฉ |
์ถ๊ฐ ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ด ๋ฐ์ดํฐ ๋ก๋ฉ ๋น์ฉ ์ฆ๊ฐ |
6๏ธโฃ ๊ฒฐ๋ก .
-
๋จ๋ฐฉํฅ ๊ด๊ณ๋ ์ค๊ณ๊ฐ ๊ฐ๋จํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ฐ๋ฉฐ, ํ์ ๋ฐฉํฅ์ด ํ์ชฝ์ผ๋ก๋ง ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
- JPA์์๋
@ManyToOne
, @OneToMany
, @OneToOne
, @ManyToMany
์ด๋
ธํ
์ด์
์ ํ์ฉํ์ฌ ๋จ๋ฐฉํฅ ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
- ์๋ฐฉํฅ ๊ด๊ณ๋ณด๋ค ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ฏ๋ก, ํ์ํ ๊ฒฝ์ฐ์๋ง ์๋ฐฉํฅ ๊ด๊ณ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.