๋์ปค๋ฅผ ํตํด MySQL ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๋ก๊ทธ์ธ์ ํ๋ ค๊ณ ํ๋ 'Access denied for user'๋ผ๋ ์๋ฌ๊ฐ ๋จ๋ฉฐ ์คํจํ๋ ๋ฌธ์ ๋ฅผ ๊ฒช๊ฒ ๋์๋ค. ์ฒ์ ์ ์์ ์๋ํ ๋ localhost๋ฅผ ํตํด ์ ๊ทผ์ ํ์๋๋ฐ, ์๊ณ ๋ณด๋ ์ด๋ฌํ ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ์์๋ค.์ผ๋ฐ์ ์ผ๋ก ๋์ปค๋ ์ปจํ ์ด๋๋ฅผ ์ํ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ์ค์ ํ๊ณ , ๊ฐ ์ปจํ ์ด๋์๋ ๊ณ ์ ํ IP ์ฃผ์๊ฐ ํ ๋น๋๊ธฐ ๋๋ฌธ์ ๋จ์ํ localhost๋ฅผ ํตํ ์ ๊ทผ์ผ๋ก๋ ๋์ปค ๋ด ์ปจํ ์ด๋์ ์ ์ํ ์ ์๊ณ ๋์ปค๊ฐ ๋ถ์ฌํ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ์ฌ์ผ ํ๋ค. ์ด๋ฅผ ์ํด์๋ ๋์ปค ์ปจํ ์ด๋์ ํ ๋น๋ IP ์ฃผ์๋ฅผ ํ์ธํ์ฌ์ผ ํ๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก MySQL ์ปจํ ์ด๋์๋ 172.17.0.1์ด๋ผ๋ ์ฃผ์๊ฐ ๋ถ์ฌ๋๋ ๊ฒ ๊ฐ์ง๋ง ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ์ฃผ์๋ฅผ ํ์ธํ ์ ์๋ค.do..
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ค ์คํ์ ํ๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค.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...
์๋น์ค ๋๋ฉ์ธ ๋ชจ๋ธ์ ํ์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณตํ๋ ํต์ฌ ๊ธฐ๋ฅ ์ ๊ณต ํ ์คํธ ์ฝ๋ ์์ฑ 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..
์ปจํธ๋กค๋ฌ์ ์ญํ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ ์์ฒญ์ ๋ง๋ ์๋น์ค ์ปดํฌ๋ํธ๋ก ์์ฒญ์ ์ ๋ฌํ๊ณ ๊ทธ ๊ฒฐ๊ด๊ฐ์ ๊ฐ๊ณตํ์ฌ ์๋ต; ์น์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ๋ชจ๋ ํ ์คํธ ์ฝ๋ ์์ฑ @RestController @RequestMapping("/product") @RequiredArgsConstructor public class ProductController { private final ProductServiceImpl productService; @GetMapping() public ResponseEntity getProduct(Long number) { ProductResponseDto productResponseDto = productService.getProduct(number); return ResponseEn..
๋กฌ๋ณต(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..
Spring Data JPA๋ JpaRepository๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ฑ ์ฝ๊ฒ DB๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ์คํ๋ง ๋ถํธ๋ก JpaRepository๋ฅผ ์์๋ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ฉด ๊ธฐ์กด์ ๋ค์ํ ๋ฉ์๋๋ฅผ ์์ฝ๊ฒ ํ์ฉํ ์ ์๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค ์์ฑ ์ํฐํฐ๋ฅผ DB ํ ์ด๋ธ๊ณผ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ค๋ฉด, Spring Data JPA๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ธ ๋ฆฌํฌ์งํ ๋ฆฌ(Repository)๋ ์ํฐํฐ๊ฐ ์์ฑํ DB์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์ ๊ทผํ๋ ค๋ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ์ํฐํฐ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ , JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค. public interface ProductRepository extends JpaRepository { }..
์์์ฑ ์ปจํ ์คํธ์ ์ญํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ DB ์ฌ์ด์์ ์ํฐํฐ์ ๋ ์ฝ๋์ ๊ดด๋ฆฌ๋ฅผ ํด์ํ๋ ๊ธฐ๋ฅ ๊ฐ์ฒด๋ฅผ ๋ณด๊ดํ๋ ๊ธฐ๋ฅ ์ํฐํฐ ๊ฐ์ฒด๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ๋ค์ด์ค๋ฉด JPA๋ ์ํฐํฐ ๊ฐ์ฒด์ ๋งคํ ์ ๋ณด๋ฅผ DB์ ๋ฐ์ํ๋ ์์ ์ํ โ ์ํฐํฐ ๊ฐ์ฒด๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ๋ค์ด์ JPA์ ๊ด๋ฆฌ ๋์์ด ๋๋ ์์ ์ ๊ฐ์ฒด๋ฅผ ์์ ๊ฐ์ฒด(Persistence Object)๋ผ๊ณ ํจ. ์์์ฑ ์ปจํ ์คํธ์ ์๋ช ์ฃผ๊ธฐ ์ธ์ ๋จ์์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ฐ, ์ด๋ DB์ ์ ๊ทผํ๊ธฐ ์ํ ์ธ์ ์ด ์์ฑ๋๋ฉด ์์์ฑ ์ปจํ ์คํธ๊ฐ ๋ง๋ค์ด์ง๊ณ ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ์์์ฑ ์ปจํ ์คํธ๋ ์์ด์ง์ ์๋ฏธ ์ํฐํฐ ๋งค๋์ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ก, ์์์ฑ ์ปจํ ์คํธ์ DB๋ฅผ ๋น๊ตํ๋ฉด์ ์ค์ DB์ CRUD ์์ ์ํ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ์ถ๊ฐํด์ ์์ ๊ฐ์ฒด๋ก ๋ง๋๋ ์์ ์ํ..
๊ฒฐ๋ก ์ ์ผ๋ก๋ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๋ ๋ฌธ๋งฅ์์ ๋๋ค ํํ์์ ์ฌ์ฉํ ์ ์๋ค. ํจ์ํ ์ธํฐํ์ด์ค ํ๋์ ์ถ์ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ ์ธํฐํ์ด์ค์ด๋ค. public interface Predicate { boolean test(T t); } public interface Comparator { //java.util.Comparator int compare(T o1, T o2); } public interface Runnable { //java.lang.Runnable void run(); } ์ฐธ๊ณ ๋ก ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ ๋ํดํธ ๋ฉ์๋(์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์ ํด๋์ค๋ฅผ ๊ณ ๋ คํด์ ๊ธฐ๋ณธ ๊ตฌํ์ ์ ๊ณตํ๋ ๋ฐ๋๋ฅผ ํฌํจํ๋ ๋ฉ์๋)๋ฅผ ํฌํจํ ์ ์๋๋ฐ, ๋ง์ ๋ํดํธ ๋ฉ์๋๊ฐ ์๋๋ผ๋ ์ถ์ ๋ฉ์๋๊ฐ ์ค์ง ํ๋๋ฉด ํจ์ํ ์ธ..