์์ฑ์ injection์ ์ฐ๋๊ฒ ์ข๋ค
- ์์ฑ์ injection์ ํ๋ฉด setter๋ก entity๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค
- ์์ฑ์๊ฐ ํ๋๋ง ์๋๊ฒฝ์ฐ @Autowired๋ฅผ ์๋ตํด๋ ๋๋ค
- MemberRepository๋ ๋ณ๊ฒฝ๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ์
final
๋ก ํด์ฃผ๋๊ฒ ์ข๋ค - test case๋ฅผ ์์ฑํ ๋ ์ปดํ์ผ ๋จ๊ณ์์ injection์ ๋ช ํํ๊ฒ ์ ์ ์๋ค ( ์๋ ์ฝ๋์ ๊ฐ์ด )
@RequiredArgsConstructor
- final์ด ์๋ ํ๋๋ง์ ๊ฐ์ง๊ณ ์์ฑ์๋ฅผ ๋ง๋ค์ด ์ค๋ค
- ๊ฒฐ๊ตญ ์๋์ผ๋ก ์์ฑ์๋ฅผ ํ๋ ๋ง๋ค๊ณ injection์ ๋ฐ์ ์ ์์
@PersistenceContext -> @Autowired
@PersistenceContext
๋ฅผ@Autowired
๋ก ๋์ฒดํ ์ ์์ (SpringBoot๊ฐ ์ง์)- ๊ธฐ์กด ์ฝ๋
- ๊ฐ์ ํ ์ฝ๋
๊ฒฐ๊ตญ EntityManager๋ฅผ ์์ฑ์ injectionํ ๊ฒ
ํ ์คํธ์์ @Transactional
- ํ
์คํธ์์
@Transactional
์ ๋ถ์ฌ์ฃผ๊ฒ ๋๋ฉด ํน๋ณํ๊ฒ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐํ์ง ์๊ณ ๋กค๋ฐฑํจ - ๋ฐ๋ผ์ ํ ์คํธ๋ฅผ ์ฌ๋ฌ๋ฒ ์คํํด๋ ๋์ผํ ์ํฉ์์ ํ ์คํธ๋ฅผ ํ ์ ์๊ฒ ๋จ
Entity์ ๋น์ฆ๋์ค ๋ก์ง
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ entity์ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ ๊ฒ์ด ์์ง๋ ฅ ์ธก๋ฉด์์ ์ข๋ค
์์ฑ๋ฉ์๋
- ์์ฑ์์ ๋ฌ๋ฆฌ ์๋๋ฅผ ๋ ์ ๋๋ฌ๋ผ ์ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค
- ์๋์ ์ฝ๋์ Order๋ ์์ฑํ ๋ ์ฌ๋ฌ ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ํ๋ฉฐ ๋ณต์กํจ
- ์ด๋ฐ ๊ฒฝ์ฐ ๋ณ๋์ ์์ฑ๋ฉ์๋๊ฐ ์์ผ๋ฉด ์ข๋ค
LocalDateTime.now()
- ์๋ฐ์์ ํ์ฌ์๊ฐ์ ๋ฐํ
@ModelAttribute
- @ModelAttribute ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๊ฐ์ฒด๊ฐ ์๋์ผ๋ก Model ๊ฐ์ฒด์ ์ถ๊ฐ๋๊ณ ๋ทฐ๋จ์ผ๋ก ์ ๋ฌ๋๋ค.
- ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ ์ค ํ์
์ ์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.
- ์ด๋ @ModelAttribute๊ฐ ์ง์ ๋ ํด๋์ค๋ getter, setter๊ฐ ์๋ Beans ํด๋์ค์ฌ์ผ ํ๋ค
- formData๋ก ํ์ผ(์ด๋ฏธ์ง)์ ๋๊ธธ๋๋ @ModelAttribute๋ฅผ ์ฌ์ฉํด์ผ ํจ!
api ์คํ์ ์ํ ๋ณ๋์ dto๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค
- ์ ์ฝ๋์ ๊ฐ์ด entity์์ฒด๋ฅผ api ์คํ์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋๋ค.
- @Valid๋ฅผ ์ ์ฉํ์ง ์๊ณ ์ถ์ api๊ฐ ์์ ์๋ ์๊ณ , entity์ ๋ณ์๋ช ์ด ๋ฐ๋๋ฉด api ์คํ ์์ฒด๊ฐ ๋ฐ๋๊ฒ ๋๋ค. -> ์ถํ์ ์์ฒญ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์
- ๋ฐ๋ผ์ api๋ฅผ ์ํ ๋ณ๋์ dto๋ฅผ ์ฌ์ฉํ์!
- ๋ณ๋์ RequestDTO๋ฅผ ์ ์ฉํ ์ฝ๋ ๐
'๐๋ฐฑ์๋ : BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot] dto์ ์์น (0) | 2023.07.31 |
---|---|
[SpringBoot] 2.7.13 ์์ swagger ์ค๋ฅ (0) | 2023.07.31 |
Spring๊ณผ SpringBoot์ ์ฐจ์ด (0) | 2023.06.22 |
[Spring] @Autowired์ ์์น์ Required์ต์ (0) | 2023.06.19 |
[Spring] <context : annotation-config> vs <context : component-scan> (0) | 2023.06.19 |