Unit Test ? ๋จ์ ํ
์คํธ๋ Service Layer์ ๋น์ฆ๋์ค ๋ก์ง๋ง์ ๊ฒ์ฆํ๋ ๊ฒ์ด๋ฏ๋ก, Repository์ Controller์ ์ํฅ์ ๋ฐ์ง ์๋ ํ๊ฒฝ์์ ํ
์คํธ๋ฅผ ์งํํ์ฌ์ผ ํ๋ค. ํ
์คํธ์ F.I.R.S.T ์์น F - Fast: ํ
์คํธ๋ฅผ ์๋ํ๋ ๊ฒ์ ์์ด์ ์ฃผ์ถค๋์ง ์์ ๋งํผ ๋นจ๋ผ์ผ ํ๋ค. I - Independent: ๊ฐ์ฒด์ ์ํ, ๋ฉ์๋, ์ด์ ํ
์คํธ ์ํ, ๋ค๋ฅธ ๋ฉ์๋์ ๊ฒฐ๊ณผ์ ์์กดํด์๋ ์๋๋ค. R - Repeatable: ์ด๋ค ํ๊ฒฝ์์๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋๋ก ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค. S - Self-Validating: ๋ชจ๋ ํ
์คํธ๋ pass ํน์ fail์ ๊ฒฐ๊ณผ๋ง ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. T - Timely: ์ค์ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ํ
์คํธ ๋์ด์ผ ํ๋ค. ์ค์ ์ฝ๋๋ฅผ ๊ตฌ..
[ ์ ์ ] ์ ์ ํ์
์ ์ด์ฉํด์ SQL๋ฑ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ๋ ํ๋ ์์ํฌ → ์ฟผ๋ฆฌ๋ฅผ ์๋ฐ์ฝ๋๋ก ์์ฑํ ์ ์๊ฒ ๋์์ค Spring Data JPA๋ก ํด๊ฒฐํ์ง ๋ชปํ๋ ์ฟผ๋ฆฌ ํด๊ฒฐ ๊ฐ๋ฅ ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํจ์ผ๋ก์จ, ์ปดํ์ผ ์์ ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ํ์ธ ๊ฒฐ๊ณผ์ ์ผ๋ก, QueryDsl๋ก ์์ฑํ ์ฝ๋๋ JPQL์ด ๋จ [ QueryDSL Config ์ค์ ] @Configuration public class QueryDslConfig { @Bean public JPAQueryFactory jpaQueryFactory(EntityManager em){ return new JPAQueryFactory(em); } } JPAQueryFactory๋น์ ๋ฑ๋ก → QueryRepository์์ ์ฌ์ฉ [ Query Reposit..
[ Controller ์์ฑ ] ์์ฒญ์ ๋ฐ๋ฅธ ์ ์ ํ ์๋ต์ ๋ณด๋ @RequiredArgsConstructor ํ๋ ์ฃผ์
(@Autowired) ๋์ ์ฌ์ฉํ๋ ์์ฑ์ ์ฃผ์
! ์ํ ์ฐธ์กฐ ๋ฐฉ์ง ํ
์คํธ ์ฝ๋ ์์ฑ ์ฉ์ด ๊ฐ์ฒด ๋ณ์ด ๋ฐฉ์ง ( final ํค์๋ ์ฌ์ฉ ) More: https://zorba91.tistory.com/238 @RequestBody ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ๋ Json ํํ์ HTTP Body ๋ด์ฉ์ Java Object๋ก ๋ณํ ๋ฉ์ธ์ง๋ฅผ ๋ณํํ๋ ๊ณผ์ ์์ ๊ฐ์ฒด์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ด๋ถ์ ์ผ๋ก Reflection์ ์ฌ์ฉํด ๊ฐ์ ํ ๋น → ๊ธฐ๋ณธ ์์ฑ์๋ ํ์ํ๊ณ Setter๋ ํ์ํ์ง ์์ ์ด์ ! @PathVariable URI ๊ฒฝ๋ก์ ์ผ๋ถ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉ @RequestP..
1. Entity ์์ฑ ๋ฏธ๋ฆฌ ์์ฑ๋ ERD๋ฅผ ๋ฐํ์ผ๋ก ๋๋ฉ์ธ ์์ฑ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Todo extends BaseEntity { @Id @GeneratedValue private Long seq; @Builder public Todo(String name, String content, TodoStatus status, Integer predictedPomo, Integer realPomo, WorkProficiency workProficiency, WorkType workType, WorkImportance workImportance) { this.name = name; this..