BackEnd๐ฑ/Spring44 [Spring] nested exception is java.lang.NullPointerException ์๋ก spring boot 2.6.7์ ์ฌ์ฉ ์ค์ด๊ณ swagger 3.0.0 ๋ฒ์ ์ ์ด์ฉํ๊ธฐ ์ํด ์งํํ๋ ์ค ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException ํ์ฌ gradle์ ์ฌ์ฉ์ค์ด๊ธฐ์ ์๋์ ๊ฐ์ด dependencies์๋ ์๋์ ๊ฐ์ด ์ถ๊ฐํด ์ฃผ์์ต๋๋ค. implementation 'io.springfox:springfox-boot-starter:3.0.0' maven์ผ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. io.springfox springfox-swagger2 3.0.0 io.springfox springfox-swag.. 2022. 5. 15. [Spring] ๊ฐ์ฒด๋ณต์ฌ BeanUtils.copyProperties ์๋ก ์คํ๋ง์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๊ฐ์ฒด์ ๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ด ๋ Setter ๋ฉ์๋๋ก ์ผ์ผ์ด ๋ชจ๋ ์์ฑํ๋ ๊ฒ์ ์ฝ๋์ ๊ธธ์ด์ ์์ฑ ์๊ฐ์ด ๋์ด๋๊ณ , ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ BeanUtils.copyProperties๋ฅผ ํตํด ํ ์ค๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ํ, ์ํ์ง ์๋ ๊ฐ๋ค์ ์ถ๋ ค๋ด์ด ์ํ๋ ๊ฐ๋ค๋ง ๋ณต์ฌํ ์๋ ์์ต๋๋ค. BeanUtils.copyProperties copyProperties์ Spring์์ ์ ๊ณตํ๋ BeanUtils ํด๋์ค์ ๋ฉ์๋์ ๋๋ค. ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค. BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) source: ์๋ณธ ๊ฐ์ฒด targe.. 2022. 5. 15. [Spring] properties encoding ํ๊ธฐ(๊ตญ์ ํ ํ๊ธ๊นจ์ง) ์๋ก ์คํ๋ง ํ์ต ์ค ๋ค๊ตญ์ด ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ๊ตญ์ ํ(Internationalization) ์ฒ๋ฆฌ๋ฅผ ํ๋ค๊ฐ ์ด์ํ๊ฒ ํ๊ธ๋ง ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋์ง ์์์ต๋๋ค. ์๋์ ๊ฐ์ด ์ ์์ ์ผ๋ก Bean ๋ฑ๋ก๋ ํด์ฃผ์๊ณ , Controller, yml ์ค์ , message ๋ฒ๋ค๊น์ง ์๋ฒฝํ๊ฒ ๊ตฌ์ฑํ๋๋ฐ๋ ์ค์ง ํ๊ธ ๋ถ๋ถ๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. main @SpringBootApplication public class ApiPracticeApplication { public static void main(String[] args) { SpringApplication.run(ApiPracticeApplication.class, args); } @Bean public LocaleResolver localeResolver() {.. 2022. 4. 27. [Spring] DAO์ DTO์ ์ฐจ์ด ๊ทธ๋ฆฌ๊ณ VO ์๋ก DAO์ DTO์ ํค์๋์ ๋ํด์ ์์๋ณด๋ ์ค DTO์ ๋ํด์๋ ์๊ณ ์์ง๋ง DAO๋ ์๋ฌด๋ฆฌ ๋ด๋ Repository ๊ฐ์๋ฐ ๊ฐ์ ๊ฐ๋ ์ธ์ง ๊ถ๊ธํด์ ์ ๋ฆฌํด ๋ณด๊ฒ ๋์์ต๋๋ค. ๊ฒฐ๋ก ์ ๋จผ์ ๋ง์๋๋ฆฌ๋ฉด Repository ํจํค์ง๊ฐ DAO์ ๋๋ค. 1. DAO(Data Access Object) DAO๋ ์ค์ ๋ก DB์ data์ ์ ๊ทผํ๊ธฐ ์ํ ๊ฐ์ฒด์ ๋๋ค. ์ค์ ๋ก DB์ ์ ๊ทผํ์ฌ data๋ฅผ ์ฝ์ , ์ญ์ , ์กฐํ, ์์ ๋ฑ CRUD ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. Service์ DB๋ฅผ ์ฐ๊ฒฐํ๋ ๊ณ ๋ฆฌ ์ญํ ์ ํฉ๋๋ค. Repository package๊ฐ ๋ฐ๋ก DAO์ ๋๋ค. @Repository @RequiredArgsConstructor public class MemberRepository { private final Enti.. 2022. 4. 14. [Spring] @NoArgsConstructor, @RequiredArgsConstructor, @RequiredArgsConstructor ์๋ก @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor ์ ๋ค Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. ๊ฐ๊ฐ์ ์๋ฏธ์ ์ธ์ ์ฌ์ฉํ๋์ง์ ๋ํด ํ๋ฒ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ธํ ์ด์ ์๋ฏธ @NoArgsConstructor ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์์ฑํฉ๋๋ค. @AllArgsConstructor ๋ชจ๋ ํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์์ฑํฉ๋๋ค. @RequiredArgsConstructor final์ด๋ @NonNull์ธ ํ๋ ๊ฐ๋ง ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์์ฑํฉ๋๋ค. 1. @NoArgsConstructor @NoArgsConstructor์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์์ฑํฉ๋๋ค. ์๋ ์ฝ๋๋ก ํ๋ฒ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. i.. 2022. 3. 30. [Spring] @RequestParam, @RequestBody, @ModelAttribute์ ์ฐจ์ด ์๋ก @ModelAttribute๋ฅผ ์ฌ์ฉํ์ ๋ parameter์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์ ๋ฐ์์ค์ง๋ง body์ ๊ฐ์ ๋ด์ ์ ์กํ๋ฉด null๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ์ด๋ด ๋ @RequestBody๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ฅด๊ฒ ๊ฐ์ด ์ ๋ด์์ง๋๋ฐ ์ ๊ทธ๋ฐ์ง, ๊ทธ๋ฆฌ๊ณ @ModelAttribute์ @RequestBody์ ์ฐจ์ด๋ ๋ฌด์์ธ์ง์ ๋ํด ๊ถ๊ธํ์ฌ ํ๋ฒ ์ ๋ฆฌ๋ฅผ ํด๋ณผ๊น ํฉ๋๋ค. ๋จผ์ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ ์์ฒญ์ ๊ฐ์ฒด๋ก ๋ฐ์ธ๋ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ @RequestParam, @RequestBody, @ModelAttribute ์ด ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๊ณตํต์ ์ธ ์๋์ ๊ฐ์ DTO๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฒ ๊ฐ๊ฐ์ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. import lombok.Data; @Data public class TestData { Str.. 2022. 3. 28. [Spring] logging ์ ๋ํด ์์๋ณด์ ์๋ก ์ค๋ฌด์์๋ System.out.println()๊ณผ ๊ฐ์ ์์คํ ์ฝ์์ ์ฌ์ฉํด์ ํ์ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ๋๋ฒ๊น ํ์ง ์๊ณ , ๋ณ๋์ logging ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฒ๊น ์ด๋ ํ์์คํฌํ ๋ฑ ์ ํด์ง ์์์ ๋ง์ถ์ด ํ๋ฉด ์์ด๋ ํ์ผ ๋ก๊ทธ๋ฅผ ๋จ๊ธธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ฒ ๊ฒ์๊ธ์ ๋ชฉ์ฐจ๋ ์๋์ ๊ฐ์ต๋๋ค. ๋ชฉ์ฐจ 1. logging์ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์์๋ณธ๋ค. 2. Spring Boot์์ logging์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค. 3. logging๊ณผ System.out.println()์ ๋น๊ตํด ๋ณธ๋ค. 1. logging์ ์ข ๋ฅ logging ๊ด๋ จ ํ๋ ์์ํฌ๋ ๋ํ์ ์ผ๋ก log4j, logback, log4j2, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ํตํฉํด์ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํ๋ SLF4J ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋.. 2022. 3. 21. [Spring] JUnit5์์์ Exception ์ฒ๋ฆฌ ์๋ก JUnit5์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์ค์ JUnit4์ Exception์ ์์ธ์ฒ๋ฆฌ ๊ณผ์ ์ด ๋ค๋ฅธ ์ ์ด ์์ด์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ๊ฐ๋จํ ์ค๋ณต ํ์์ธ์ง๋ฅผ ๊ฒ์ฆํ๋ ์๋ ๋ฉ์๋๋ก ํ ์คํธ๋ฅผ ์งํํด ๋ณด๊ฒ ์ต๋๋ค. private void validateDuplicateMember(Member member) { List findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()) { throw new IllegalStateException("์ด๋ฏธ ์กด์ฌํ๋ ํ์์ ๋๋ค."); } } ์ ์ฝ๋๋ ์ค๋ณต ํ์์ผ ๋์ IllegalStateException ์์ธ๋ฅผ ๋์ ธ์ค๋๋ค. 1. JUnit4์์์ Exception.. 2022. 3. 19. ์ด์ 1 2 3 4 5 ๋ค์