๐Ÿ’ป ๊ฐœ๋ฐœ ์ผ์ง€/SpringBoot

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..
์ ์ด
'๐Ÿ’ป ๊ฐœ๋ฐœ ์ผ์ง€/SpringBoot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)