Language & Framework/Spring2024. 5. 17. 14:10[JUnit 5] No ParameterResolver registered for parameter ์—๋Ÿฌ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ์‹คํ–‰์„ ํ•˜๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.No ParameterResolver registered for parameter [repository.SolutionWriteRepository arg0] in constructor [public SolutionRepositoryTest(repository.SolutionWriteRepository,repository.EducatorWriteRepository,repository.LearnerWriteRepository)].org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [repository...

Language & Framework/Spring2023. 3. 22. 15:07[์Šคํ„ฐ๋””][์Šคํ”„๋ง ๋ถ€ํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ] ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ์ฒด ํ…Œ์ŠคํŠธ

์„œ๋น„์Šค ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ํ™œ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ œ๊ณต ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ class ProductServiceTest { private ProductRepository productRepository = Mockito.mock(ProductRepository.class); private ProductServiceImpl productService; @BeforeEach public void setUpTest() { productService = new ProductServiceImpl(productRepository); } @Test void saveProduct() { Mockito.when(productRepository.save(any(Product.class))) .then(retu..

Language & Framework/Spring2023. 3. 22. 10:08[์Šคํ„ฐ๋””][์Šคํ”„๋ง ๋ถ€ํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ] ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด ํ…Œ์ŠคํŠธ

์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ•  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•„ ์š”์ฒญ์— ๋งž๋Š” ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ด๊ฐ’์„ ๊ฐ€๊ณตํ•˜์—ฌ ์‘๋‹ต; ์›น์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๋ชจ๋“ˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ @RestController @RequestMapping("/product") @RequiredArgsConstructor public class ProductController { private final ProductServiceImpl productService; @GetMapping() public ResponseEntity getProduct(Long number) { ProductResponseDto productResponseDto = productService.getProduct(number); return ResponseEn..

Language & Framework/Spring2023. 3. 22. 10:06[์Šคํ„ฐ๋””][์Šคํ”„๋ง ๋ถ€ํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ] ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ์˜ ์ž‘์„ฑ์„ ์ƒ๋žตํ•˜๋Š” ๋ฐฉ๋ฒ• - ๋กฌ๋ณต

๋กฌ๋ณต(Lombok)์€ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋ฏ€๋กœ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋กฌ๋ณต ์ ์šฉ @Data @NoArgsConstructor @AllArgsConstructor public class Member { private String memberId; private int money; } public class Member { private String memberId; private int money; public Member(String memberId, int money) { this.memberId = memberId; this.money = mo..

Language & Framework/Spring2023. 3. 22. 10:04[์Šคํ„ฐ๋””][์Šคํ”„๋ง ๋ถ€ํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ] ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„

Spring Data JPA๋Š” JpaRepository๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋”์šฑ ์‰ฝ๊ฒŒ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ JpaRepository๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ์กด์˜ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์†์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ ์—”ํ‹ฐํ‹ฐ๋ฅผ DB ํ…Œ์ด๋ธ”๊ณผ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, Spring Data JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Repository)๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ƒ์„ฑํ•œ DB์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ‘๊ทผํ•˜๋ ค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , JpaRepository๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ๋œ๋‹ค. public interface ProductRepository extends JpaRepository { }..

Language & Framework/Spring2023. 3. 15. 09:10[์Šคํ„ฐ๋””][์Šคํ”„๋ง ๋ถ€ํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์—ญํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์‚ฌ์ด์—์„œ ์—”ํ‹ฐํ‹ฐ์™€ ๋ ˆ์ฝ”๋“œ์˜ ๊ดด๋ฆฌ๋ฅผ ํ•ด์†Œํ•˜๋Š” ๊ธฐ๋Šฅ ๊ฐ์ฒด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ธฐ๋Šฅ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋“ค์–ด์˜ค๋ฉด JPA๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ DB์— ๋ฐ˜์˜ํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰ → ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋“ค์–ด์™€ JPA์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์ด ๋˜๋Š” ์‹œ์ ์˜ ๊ฐ์ฒด๋ฅผ ์˜์† ๊ฐ์ฒด(Persistence Object)๋ผ๊ณ  ํ•จ. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ์„ธ์…˜ ๋‹จ์œ„์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋Š” DB์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋„ ์—†์–ด์ง์„ ์˜๋ฏธ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋กœ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ DB๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ์‹ค์ œ DB์— CRUD ์ž‘์—… ์ˆ˜ํ–‰ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์„œ ์˜์† ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—… ์ˆ˜ํ–‰..

Language & Framework/Spring2023. 3. 6. 08:44[์Šคํ”„๋ง MVC] ํŒŒ์ผ ์—…๋กœ๋“œ

์Šคํ”„๋ง MVC 2ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์—…๋กœ๋“œ HTML ํผ์„ ์ด์šฉํ•ด ํŒŒ์ผ์„ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. application/x-www-form-urlencoded ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ํผ ํƒœ๊ทธ์— ๋ณ„๋„์˜ ์˜ต์…˜์ด ์—†์œผ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ HTTP ๋ฉ”์‹œ์ง€ ํ—ค๋”์— Content-Type: application/x-www-form-urlencoded์ด๋ผ๋Š” ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. multipart/form-data application/x-www-form-urlencoded์€ ์ „์†ก ํ•ญ๋ชฉ์„ ๋ฌธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ˜๋ฉด ํŒŒ์ผ์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค. ๋ฌธ์ž๋ฅผ ์ „์†กํ•˜๋Š” ์œ„์˜ ๋ฐฉ์‹์œผ๋กœ๋Š” ํŒŒ์ผ์„ ์ „์†กํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๋ณดํ†ต ํผ์„ ์ „์†กํ•  ๋•Œ ํŒŒ์ผ๋งŒ ..

Language & Framework/Spring2023. 3. 5. 12:25[์Šคํ”„๋ง MVC] ์Šคํ”„๋ง ํƒ€์ž… ์ปจ๋ฒ„ํ„ฐ

์Šคํ”„๋ง MVC 2ํŽธ์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ํƒ€์ž… ์ปจ๋ฒ„ํ„ฐ ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. HTTP ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ž์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  @RequestParam์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž๋ฅผ Integer ํƒ€์ž…์œผ๋กœ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ์Šคํ”„๋ง์ด ์ค‘๊ฐ„์—์„œ ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ, ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์™ธ์—๋„ ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ Boolean ํƒ€์ž…์„ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ์Šคํ”„๋ง์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ปจ๋ฒ„ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๋“ฑ๋กํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค. Converter ํƒ€์ž… ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ..

image