๊ด๊ณํ DB๊ฐ ์๋ฌด๋๋ NoSQL๋ณด๋ค๋ ๋ฉ์ธ! JPA-> ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํ(๊ฐ์ฒด์งํฅ๊ณผ ๊ด๊ณํ DB์ฌ์ด) -> SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ -> ์์ฐ์ฑ (CRUD ๊ฐ๋จ) - ์ ์ฅ(persist) ์กฐํ(find) ์์ (set) ์ญ์ (remove) - DB์ ๋ค์ ์ง์ด๋ฃ๋ ์์ ์ ํ์ง ์์๋ ๋จ -> ์ ์ง๋ณด์ -> ํจ๋ฌ๋ค์์ ๋ถ์ผ์น ํด๊ฒฐ -> ์ฑ๋ฅ -> ๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋ ๋ฆฝ์ฑ -> ํ์ค
๋ณ๊ฒฝ๋ฐฉ๋ฒ 1. ๋ณํฉ(merge) -> ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์์ ์ํ์ ์ํฐํฐ ํ๋๊ฐ์ผ๋ก ๋ชจ๋ ํ๋๋ฅผ ๋ณ๊ฒฝ -> ์ธํ ํด์ฃผ์ง ์์ ํ๋๊ฐ์ null๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ต์ฅํ ์ํ 2. ๋ณ๊ฒฝ๊ฐ์ง -> ํจ์ฌ ๋์ ๋ฐฉ๋ฒ -> ๊ฐ์งํ DB์์ ์์์ ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ ํด์ค / ์ํ๋ ์์ฑ๋ง ์ ํํด์ ๋ณ๊ฒฝ ๊ฐ๋ฅ -> ์ปจํธ๋กค๋ฌ์์ ํธ์ถํ ์๋น์ค ์์ญ ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ํจ์๋ฅผ ๋ง๋ ๋ค. +) ์ํฐํฐ ์์ญ์์์ ์ ๋ฐ์ดํธํจ์ ๋ง๋ค๊ณ ์๋น์ค์์ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ํด๋น ํจ์ ๋ถ๋ฅด๋ ๊ฒ์ด ๋ซ๋ค. (์ ์ง๋ณด์,์ถ์ ์ํด) ์ํฐํฐ ํด๋์ค๋ด์์ ๊ฐ์ฒด ์์ฑ, ๋ณ๊ฒฝ, ์กฐํ๋ฑ์ ๋น์ฆ๋์ค ๋ก์ง ์์ฑํ๋ค. -> ์๋น์ค์์ ํธ์ถ -> ์ปจํธ๋กค๋ฌ๊ฐ ์๋น์ค ํธ์ถ
- ํ ์คํธ๋ ๋ฐ๋ก application.yml ์ค์ ํ์ผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด ์ข์ -๊ฐ ํ ์คํธ ํจ์์๋ @Test ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉฐ ๋ง์ฝ ์์ธ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ @Test(expected = IllegalStateException.class) ์ ๊ฐ์ด ํด๋น ์์ธ์ ๋ํ ์ด๋ ธํ ์ด์ ์ ๋ง๋ค์ด์ค๋ค. - ํ ์คํธ ์ฝ๋ ํ ์์ @RunWith(SpringRunner.class) @SpringBootTest @Transactional // ํ ์คํธ ๋๋ ๋ ๋ค์ rollback ํด๋ฒ๋ฆผ public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test..
-์์กด๊ด๊ณ ์ฃผ์ ์ ๊ฒฝ์ฐ ์์ฑ์ ์ฃผ์ ์ ์งํฅ ํ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ์์ ํ ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ. - ์์ฑ์๊ฐ ํ๋๋ฉด @Autowired ์๋ต ๊ฐ๋ฅ - ๋ณ์์ final ๋ถ์ฌ์ ํ์ ์์ ๋ถ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ - Repository์์ ์ฌ์ฉํ๋ EntityManager๋ @PersistenceContext๋ฅผ ํตํด ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง SpringBoot์์๋ @Autowired๋ ๊ฐ๋ฅ - final์ ๋ถ์ธ ๋ณ์๋ฅผ Lombok์ @RequiredArgsConstructor ๋ฅผ ํตํด ์์ฑ์ ์์ฑ/์ฃผ์ ํด์ฃผ๋ฉด ์ผ๊ด์ฑ์๊ณ ๊น๋ํ๊ฒ ์ฝ๋ ์ ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์์ฑ์ ์ฃผ์ ์ ์ ์ฉํ Repository ์์) @Repository @RequiredArgsConstructor public class MemberReposi..
1. ๊ฐ๊ธ์ ์ด๋ฉด setter ์ฌ์ฉํ์ง ๋ง์. - ๋ณ๊ฒฝ ํฌ์ธํธ๊ฐ ๋ง์์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง 2. ๋ชจ๋ ์ฐ๊ด๊ด๊ณ๋ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ค์ - LAZY๋ก ์ค์ !!! EX) @ManyToOne(fetch = FetchType.LAZY) 3. ์ปฌ๋ ์ ๋ฐ๋ก๋ฐ๋ก ์ธํ (์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ) - null ๋ฌธ์ ๋ฐฉ์ง ์ํด 4. ์๋ฐฉํฅ ์ฐ๊ด์ผ๋๋ ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋๋ฅผ ํตํด ๊ฐ ์ธํ - ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง ๊ฐ์ ๊ฐ์ง๊ณ ์์ ์๋ ์์ผ๋ฏ๋ก (DB์๋ ์ฃผ์ธ๋ง ๊ฐ์ ธ๋ ok) 5. ์ต๋ํ ์ด๋์์ dependency์์ด ์์ํ๊ฒ ๋๋๊ธฐ(ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๋ง! ํ๋ฉด ๊ด๋ จ ๋ก์ง์ Form ๊ฐ์ฒด ๋๋ DTO ์ฌ์ฉ) +) manytomany๋ ์ ๋งํ๋ฉด ์ฌ์ฉx, ์ผ๋๋ค, ๋ค๋์ผ๋ก ๋๋๊ธฐ +) API ๋ง๋ค๋์๋ ์ ๋ ์ํฐํฐ๋ฅผ ์ธ๋ถ๋ก ๋ฐํ(๋ ธ์ถ)..
(Mac) getter/setter ์์ฑ -control + enter ์ธ๋ฏธ์ฝ๋ก ์๋์์ฑ command + shift + enter ๋ผ์ด๋ธ๋ฌ๋ฆฌ import option + enter ํ ์คํธ ํด๋์ค ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ - ํด๋น ํด๋์ค์์ command + shift + t ์ด์ ๋์ ๋ค์ ์คํ - control + R ์ด์ ์ ๋ค์ด๊ฐ๋ ํ์ผ ๋ชฉ๋ก - command + e ๊ฐ์ฒด ์๋์์ฑ - command + option + v ๋ฉ์๋ ์ถ์ถ - ๋ฉ์๋๋ก ๋ง๋ค๊ณ ์ถ์ ๋ถ๋ถ ๋๋๊ทธ ํ command + option + M ์ํ๋ ์ฝ๋ ํ ๋ณต์ฌ + ๋ถ์ฌ๋ฃ๊ธฐ - ๋ณต์ฌ์ํ๋ ํ ์ปค์ ์ฌ๋ฆฐ ํ , command + d
dependencies { ... //lombok implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' ... } dependencies ๋ด๋ถ์ ์ ์ฝ๋๋ฅผ ๋ฐ๋์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. (+ intellij lombok ํ๋ฌ๊ทธ์ธ ์ค์น) ๋์ค ์ ๋ถ ๊ผญ ์จ์ฃผ์ด์ผํ๋ค. ํนํ ๋๋ฒ์งธ ์ค ์ฝ๋๋ฅผ ๋นผ๋จน์ผ๋ฉด ์๋๋ค. ์ฒซ ์ค๋ง ์ ์ด๋ import๋ ๊ฐ๋ฅํ์ง๋ง ์ด๋ ธํ ์ด์ ์ ์ ๋๋ก ์ฌ์ฉํ ์ ์๋ค. (์ด๊ฒ๋๋ฌธ์ cannot find symbol ์๋ฌ๋์ ํ์ฐธ ํค๋งธ๋ค.)
์ผ๋จ ๋ gradle project๋ก ์งํํ์๋ค. https://start.spring.io/ ๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํ, build.gradle์์ implementation('org.springframework.boot:spring-boot-starter-data-mongodb') ๋ฅผ ์ถ๊ฐํด์ค๋ค. ๋ํ swagger์ swagger ui๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด //swagger //https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' implementation group: 'io.spr..