์ค๋ ํ ์ผ
| 10:00 ~ 11:00 | ์๊ณ ๋ฆฌ์ฆ ์ฝ๋์นดํ 2๋ฌธ์ |
| 11:00 ~ 13:00 | Spring ์๋ จ์ฃผ์ฐจ(Entity ์ฐ๊ด๊ด๊ณ) ๊ฐ์ ๋ฃ๊ธฐ |
| 14:00 ~ 15:40 | Spring ์๋ จ์ฃผ์ฐจ(์ง์ฐ๋ก๋ฉ/์ฆ์๋ก๋ฉ, ์์์ฑ์ ์ด, ๊ณ ์ ์ํฐํฐ, My Select Shop ํ๋ก์ ํธ) ๊ฐ์ ๋ฃ๊ธฐ |
๋ฐฐ์ด์
1. Entity ์ฐ๊ด๊ด๊ณ
- DB์์๋ ํ ์ด๋ธ ์ฌ์ด์ ์ฐ๊ด ๊ด๊ณ๋ฅผ FK(์ธ๋ ํค)๋ก ๋งบ์ ์ ์๊ณ , ๋ฐฉํฅ ์๊ด์์ด ์กฐํ ๊ฐ๋ฅ(๋ฐฉํฅ ๊ฐ๋ X)
- Entity์์๋ ์๋ Entity๋ฅผ ์ฐธ์กฐํด Entity ์ฌ์ด์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐฉํฅ ๊ฐ๋ ์กด์ฌํจ
- 1๋ 1 ๊ด๊ณ → @OneToOne ์ด๋
ธํ
์ด์
์ฌ์ฉ
- ๋จ๋ฐฉํฅ
1) Entity์์ ์ธ๋ ํค์ ์ฃผ์ธ์ ์ผ๋ฐ์ ์ผ๋ก N(๋ค)์ ๊ด๊ณ์ธ Entity์ด์ง๋ง, 1๋ 1 ๊ด๊ณ์์๋ ์ธ๋ ํค์ ์ฃผ์ธ์ ์ง์ ์ง์ ํด์ผํจ2) @JoinColumn()์ ์ธ๋ ํค์ ์ฃผ์ธ์ด ํ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก, ์ธ๋ ํค ์ฃผ์ธ๋ง์ด ์ธ๋ ํค๋ฅผ ๋ฑ๋ก, ์์ , ์ญ์ ๊ฐ๋ฅํจ - ์๋ฐฉํฅ
1) ์ธ๋ ํค์ ์ฃผ์ธ์ ์ง์ ํด์ค ๋ mappedBy ์ต์ ์ฌ์ฉ → mappedBy ์์ฑ ๊ฐ์ ์ธ๋ ํค์ ์ฃผ์ธ์ธ ์๋ Entity์ ํ๋๋ช
2) ์ธ๋ ํค ์ฃผ์ธ์ ์๋ Entity ํ์ ์ ํ๋ ๊ฐ์ง๋ฉด์ @JoinColumn()์ ํ์ฉํด ์ธ๋ ํค์ ์์ฑ ์ค์
3) ์๋ Entity๋ ์ธ๋ ํค์ ์ฃผ์ธ Entity ํ์ ์ ํ๋๋ฅผ ๊ฐ์ง๋ฉด์ mappedBy ์ต์ ์ฌ์ฉํด ์์ฑ ๊ฐ์ผ๋ก ์ธ๋ ํค์ ์ฃผ์ธ Entity์ ์ ์ธ๋ ํ๋๋ช ๋ฃ์ด์ฃผ๋ฉด ๋จ
- ๋จ๋ฐฉํฅ
- N๋ 1 ๊ด๊ณ → @ManyToOne ์ด๋
ธํ
์ด์
์ฌ์ฉ
- ๋จ๋ฐฉํฅ
- ์๋ฐฉํฅ
1) ์๋ฐฉํฅ ์ฐธ์กฐ๋ฅผ ์ํด 1์ ํด๋นํ๋ Entity์์ Java ์ปฌ๋ ์ ์ฌ์ฉํด์ ์ฐธ์กฐ
- 1๋ N ๊ด๊ณ → @OneToMany ์ด๋
ธํ
์ด์
์ฌ์ฉ
- ๋จ๋ฐฉํฅ
1) 1 : N์์ N ๊ด๊ณ์ ํ ์ด๋ธ์ด ์ธ๋ ํค๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ ํค๋ N ๊ด๊ณ์ธ ํ ์ด๋ธ์ ์ปฌ๋ผ ๋ง๋ค์ด ์ถ๊ฐํ์ง๋ง, ์ธ๋ ํค์ ์ฃผ์ธ์ธ ์ํฐํฐ๋ฅผ ํตํด ๊ด๋ฆฌํจ
2) ์ถ๊ฐ์ ์ธ UPDATE ๋ฐ์ํ๋ ๋จ์ ์กด์ฌ - ์๋ฐฉํฅ
1) 1๋ N๊ด๊ณ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐฉํฅ ๊ด๊ณ ์กด์ฌ X
2) @ManyToOne ์ด๋ ธํ ์ด์ ์ mappedBy ์์ฑ ์ ๊ณต X
- ๋จ๋ฐฉํฅ
- N๋ M ๊ด๊ณ → @ManyToMany ์ด๋
ธํ
์ด์
์ฌ์ฉ
- N : M ๊ด๊ณ๋ฅผ ์ํด ์ค๊ฐ ํ ์ด๋ธ ์์ฑํด ์ฌ์ฉํจ- ๋จ๋ฐฉํฅ
1) ์์ฑ๋๋ ์ค๊ฐ ํ ์ด๋ธ์ PK๊ฐ ์กด์ฌํ์ง ์์ ์ปจํธ๋กคํ๊ธฐ ์ด๋ ค์ - ์๋ฐฉํฅ
1) ๋ฐ๋ ๋ฐฉํฅ์ธ Entity์ @ManyToMany๋ก ์ธ๋ ํค ์ฃผ์ธ์ธ Entity์ ์ฐ๊ฒฐํ๊ณ mappedBy ์ต์ ์ค์ ํด ์๋ฐฉํฅ ๊ด๊ณ ๋งบ์ - ์ค๊ฐ ํ
์ด๋ธ ๋ง๋ค๊ธฐ
1) ์ค๊ฐ ํ ์ด๋ธ์ ์ปจํธ๋กคํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ์ง์ ์ค๊ฐ ํ ์ด๋ธ ์์ฑํด ์ฌ์ฉ ๊ฐ๋ฅ
- ๋จ๋ฐฉํฅ
[๋ด์ผ๋ฐฐ์์บ ํ_Spring Boot ์๋ จ์ฃผ์ฐจ] JPA ํ ๊ฑธ์ ๋ ๋์๊ฐ๊ธฐ(Entity ์ฐ๊ด๊ด๊ณ, 1๋ 1, N๋ 1, 1๋ N, N๋
Entity ์ฐ๊ด ๊ด๊ณ์ฃผ๋ฌธ APP DB table ์ค๊ณ๊ณ ๊ฐ(users) ํ ์ด๋ธidname1Robbie2Robbertcreate table users( id bigint not null auto_increment, name varchar(255), primary key (id)); ์์(food) ํ ์ด๋ธidnameprice1ํ๋ผ์ด๋ ์นํจ150002์๋ ์นํจ2
basicconcept.tistory.com
2. ์ง์ฐ ๋ก๋ฉ๊ณผ ์ฆ์ ๋ก๋ฉ, ์์์ฑ ์ ์ด, ๊ณ ์ Entity
- JPA์์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์ค์ ๋ Entity์ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๊ฐ์ ธ์ฌ์ง ํน์ ํ์ํ ๋ ๊ฐ์ ธ์ฌ์ง ์ ํ ์ ์์ → FetchType
- ์ง์ฐ ๋ก๋ฉ(LAZY): ํ์ํ ์์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
- @?ToMany ํํ์ธ ๊ฒฝ์ฐ default๊ฐ LAZY์
- ์ง์ฐ ๋ก๋ฉ๋ Entity ์ ๋ณด๋ฅผ ์กฐํ(Select)ํ ๋๋ ๋ฐ๋์ ์์์ฑ ์ปจํ ์คํธ๊ฐ ์กด์ฌํด์ผ ํจ! ์ฆ, ํธ๋์ญ์ ์ด ์ ์ฉ๋์ด ์์ด์ผ ํจ! - ์ฆ์ ๋ก๋ฉ(EAGER): ์ฆ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
- @?ToOne ํํ์ธ ๊ฒฝ์ฐ default๊ฐ EAGER์
- ์ง์ฐ ๋ก๋ฉ(LAZY): ํ์ํ ์์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
- ์์์ฑ ์ ์ด(Cascade Persist)๋ ์์ ์ํ์ Entity์์ ์ํ๋๋ ์์
๋ค์ด ์ฐ๊ด๋ Entity ๊น์ง ์ ํ๋๋ ์ํฉ
- Casecade persist option ์ค์ → ex) @OneToMany(mappedBy = "", cascade = CascadeType.PERSIST)
- ์ญ์ : CascadeType.REMOVE
- ๊ณ ์ Entity(onphanRemoval): ์ฐ๊ด ๊ด๊ณ ์ ๊ฑฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ทธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ธ ์ ์๋ ๋ฐฉ๋ฒ
- orphanRemoval ์ต์ ๊ณผ Cascade.DELETE ์ต์ ์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋, ์ญ์ ํ๋ ค๊ณ ํ๋ ๊ทธ ์ฐ๊ด๋ Entity๋ฅผ ๋ค๋ฅธ ๊ณณ์์๋ ์ฐธ์กฐํ๊ณ ์๋์ง ์๋์ง๋ฅผ ๊ผญ ํ์ธํด์ผ ํจ!
[๋ด์ผ๋ฐฐ์์บ ํ_Spring Boot ์๋ จ์ฃผ์ฐจ] JPA ํ ๊ฑธ์ ๋ ๋์๊ฐ๊ธฐ(์ง์ฐ ๋ก๋ฉ๊ณผ ์ฆ์ ๋ก๋ฉ, ์์์ฑ ์ ์ด,
์ง์ฐ ๋ก๋ฉ(LAZY)๊ณผ ์ฆ์ ๋ก๋ฉ(EAGER)์์ ํ ์ด๋ธ๊ณผ ๊ณ ๊ฐ ํ ์ด๋ธ์ด N:1 ๊ด๊ณ๋ก ์ค์ ํ๊ณ ์์@Entity@Getter@Setter@Table(name = "food")public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; priva
basicconcept.tistory.com
3. My Select Shop ํ๋ก์ ํธ
- ๋ค์ด๋ฒ Open API ํ์ฉํด ์ํ ๊ฒ์ API ๊ตฌํ
- ๊ด์ฌ ์ํ ๋ฑ๋ก API ๊ตฌํ
- ๊ด์ฌ ์ํ ํฌ๋ง ์ต์ ๊ฐ ์์ API ๊ตฌํ
- ๊ด์ฌ ์ํ ์กฐํ API ๊ตฌํ
[๋ด์ผ๋ฐฐ์์บ ํ_Spring Boot ์๋ จ์ฃผ์ฐจ] My Select Shop(์ํ ๊ฒ์, ๊ด์ฌ ์ํ ๋ฑ๋ก, ๊ด์ฌ ์ํ ํฌ๋ง ์ต์ ๊ฐ
์ค๊ณ ๋ฐ ํ๋ก์ ํธ ์์ฑ/์ค์ ์๊ตฌ์ฌํญ ํ์ 1. ํค์๋๋ก ์ํ์ ์ ๋ณด ๊ฒ์๋ค์ด๋ฒ ์ผํ API ์ด์ฉ์ํ ์ด๋ฆ(title), ๋งํฌ URL(link), ์ด๋ฏธ์ง URL(image), ์ต์ ๊ฐ(price)2. ๊ด์ฌ ์ํ ๋ฑ๋กํ๊ธฐDB์ ์ํ์ ๋ณด ์ ๋ ฅ(I
basicconcept.tistory.com
๋ด์ผ ํ ์ผ
- [JAVA๋จ๊ธฐ์ฌํ] MSA(Microservice Architecture) ๊ฐ์ ๋ฃ๊ณ ์์ฝ ์ ๋ฆฌ
'๋ฐฑ์๋ > ๋ด์ผ๋ฐฐ์์บ ํ_Java๋จ๊ธฐ์ฌํ8๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [TIL] MSA ๊ฐ์(MSA, Spring Cloud ๋ฑ) (0) | 2026.07.01 |
|---|---|
| [TIL] Spring ์๋ จ์ฃผ์ฐจ 1์ฃผ์ฐจ(Spring Security, Validation) (0) | 2026.06.29 |
| [TIL] Spring ์๋ จ์ฃผ์ฐจ 1์ฃผ์ฐจ(Bean, ์ธ์ฆ๊ณผ ์ธ๊ฐ, ์ฟ ํค-์ธ์ , JWT) (0) | 2026.06.26 |
| [TIL] Spring ์ ๋ฌธ์ฃผ์ฐจ 2์ฃผ์ฐจ (0) | 2026.06.25 |
| [TIL] Spring ์ ๋ฌธ์ฃผ์ฐจ ๊ฐ์(๋ฉ๋ชจ์ฅ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ, Database) (0) | 2026.06.24 |