์ ์ฒด ๊ธ193 [Spring Boot] AOP๋ฅผ ํ์ฉํ ์ปค์คํ ์ ๋ ธํ ์ด์ ๋ง๋ค๊ธฐ 2024.11.17 - [BE/๐ Spring] - [Spring Boot] AOP ๊ฐ๋ ์ ๋ฆฌ2024.11.18 - [BE/๐ Spring] - [Spring Boot] AOP ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์์์ฝ๋ ํ์ฌ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์ ์ผ๋ถ API์์ ์์ฒญ/์๋ต ๋ฐ์ดํฐ๋ฅผ End-to-End ์ํธํ ํด์ ํต์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ Controller ํน์ ์๋ณตํธํ์ ๊ด๋ จ ์๋ ๋ก์ง์ ์ํธํ ๊ด๋ จ ์ฝ๋๊ฐ ๋ค์ด๊ฐ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ์๋ณตํธํ๋ฅผ ์ํํ๋ static object๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ์ ํด์์๋๋ฐ, AOP๋ฅผ ์ด์ฉํด์ ์ด๋ฅผ ๊ฐ์ ํด ๋ณด๋ฉด ์ด๋จ๊น ์ถ์์ต๋๋ค. ์์ฒญ ๊ฐ์ฒด ์์ฒด๋ฅผ ๊ฐ๋ก์ฑ ๋ณตํธํ ํด์ ํ๋ฌธ๊ฐ์ ๋ฐ๋ก Controller์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ณ , ์๋ต์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๊ธฐ ์ ์ ์๋ต ๊ฐ์ .. 2024. 11. 19. [Spring Boot] AOP ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์์์ฝ๋ ์์กด์ฑ ์ถ๊ฐdependencies { implementation 'org.springframework.boot:spring-boot-starter-aop'} ์ฌ์ฉ ๋ฐฉ์Aspect ์ ์ : @Aspect ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด์ Aspect ํด๋์ค๋ฅผ ์ ์ํ๋คAdvice ์ ์ฉ : @Before, @After, @Around ๋ฑ ๋ค์ํ Advice๋ฅผ ๋ฉ์๋์ ์ ์ฉํ๋ค. ํน์ ์์ ์ ์ด๋ค ์คํ ๋ก์ง์ ์คํํ ์ง ์ ์ํ๋ค.Pointcut ์ค์ : execution ํํ์ ๋ฑ์ ํตํด ํน์ ๋ฉ์๋, ํจํค์ง ๋ฑ์๋ง Aspect๊ฐ ์ ์ฉ๋๋๋ก ์ค์ ํ๋คAOP ํ์ฑํ : @EnableAspectJAuotProxy ์ ๋ํ ์ด์ ์ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ค์ ์ถ๊ฐํด AOP๋ฅผ ํ์ฑํ ํ๋ค @EnableAspectJA.. 2024. 11. 18. [Spring Boot] AOP ๊ฐ๋ ์ ๋ฆฌ ์์ ์ฝ๋์ ์์ธํ ์ฌ์ฉ๋ฒ์ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃน๋๋ค. AOP๋Aspect-Orineted Programing, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋์์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํน์ ๊ด์ฌ์ฌ(๊ธฐ๋ฅ)์ ๋ถ๋ฆฌํ ํ์ฌ ์บก์ํ๋ชจ๋ํ ํฅ์cross-cutting concerns (ํก๋จ ๊ด์ฌ์ฌ) ์ฒ๋ฆฌ์ ์ ์ฉ๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ์ธ์ฆ/๊ถํ ๋ถ์ฌ, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๊ตฌํ๊ณผ ๊ฐ์ ํน์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ์ฌ์ฉ๋ ์ ์์ AOP๋ ์ ํ์ํ ๊น?๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํน์ ๊ธฐ๋ฅ์ธ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํด์คํก๋จ ๊ด์ฌ์ฌํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ๊ด์ฌ์ฌํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ฉ์๋ ๋ง๋ค ์ถ๊ฐํ๊ฒ ๋๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ก ์ธํด ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ณ , ๋ณ๊ฒฝ์ ์ฌ๋ฌ ๊ณณ์ ๋ณ๊ฒฝํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์.. 2024. 11. 17. [MQTT] Spring Boot ์์ MQTT(mosquitto) ์ฌ์ฉํ๊ธฐ ํ๋ก ํธ์์ ํน์ api๋ฅผ ํธ์ถํ๋ฉด ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ mqtt๋ฅผ ์ฌ์ฉํด์ ์๋์ฐ PC๋ ํค์ค์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค. ์์ ์์ ๋ฐ์ดํฐ ์๊ณ , ์ด์ ์ ๋น์ทํ ํ๋ก์ ํธ์์ mosquitto๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ๋ ํผ๋ฐ์ค๊ฐ ์์ด MQTT๋ก ์ด๋ฅผ ๊ตฌํํ๋ค.๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ Spring Boot ์น ์๋ฒ๋ publisher๋ผ๊ณ ํ ์ ์๊ณ , ์๋์ฐ PC๋ subscriber, mosquitto๋ broker ์ญํ ์ ํ๋ค MQTT ํน์ง๊ฒฝ๋ ํ๋กํ ์ฝ ์ต์ํ ๋ ํค๋2๋ฐ์ดํธ ์ ๋์ ์ ์ ์ฉ๋ ๋ฉ์ธ์ง -> ์ ํ๋ ๋์ญํญ ํ๊ฒฝ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ Publish/Subscribe ๋ชจ๋ธPublisher (๋ฐํ ์ฃผ์ฒด) Broker (์ค๊ฐ์๋ฒ) Subscriber (๊ตฌ๋ ์ฃผ์ฒด)Publisher๋ ํน์ topic์ ๋ฉ.. 2024. 11. 13. [Spring Boot] Custom Validation annotation Intro์ฌ์ฉ์ ํน์ ํ๋ก ํธ์๋์์ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ ์ค์Spring Boot์ ๊ฐ์ ํ๋ ์์ํฌ์์๋ @Valid, @Validated, validation ๊ด๋ จ ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด์ ์ ํจ์ฑ ๊ฒ์ฆ์ด ๊ฐ๋ฅํจ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ํน์ ์๊ตฌ์ฌํญ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ฆ ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ์ ์์Spring Boot์์๋ ์ฌ์ฉ์ ์ ์์ validation์ ์์ฑํ ์ ์์์์ ์ฝ๋@Getter@ToString@JsonNaming(value = PropertyNamingStrategies.SnakeCaseStrategy.class)public class RegistUserRequest { @Pattern(regexp = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-].. 2024. 11. 10. [Spring Boot] RestControllerAdvice๋ก Validation Exception ํธ๋ค๋งํ๊ธฐ request ๋ฐ์ดํฐ ๊ฒ์ฆ์ ์ํด Valid, Validation, Spring Boot์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ผ๋ ์๋ฌด๋ฐ ์๋ด ์์ด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์๋ฌ์ ์์ธ์ ์ ์ ์๋ค. Response์ ์๋ฌ์ ์์ธ์ ์ ํด์ง ๊ท๊ฒฉ์ ๋ง๊ฒ ์ ๊ณตํ์ฌ ํด๋ผ์ด์ธํธ ์์ ์ ๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ์ฌ ์ฌ์ฉํ ์ ์๋ค. RestControllerAdviceSpring MVC์์ ์ ์ญ์ ์ผ๋ก ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ ๋ํ ์ด์ @ControllerAdvice์ ๋ค๋ฅธ ์ ์ @ResponseBody๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ JSON ํ์์ response๋ฅผ ๋ฐํํจ๊ธ๋ก๋ฒ ์์ธ์ฒ๋ฆฌ, ์ฌ์ฉ์ ์ ์ ํ์์ JSON ๊ตฌ์กฐ ๋ฐํํ๋๋ฐ ์ฌ์ฉbasePackages, basePackage.. 2024. 11. 9. [Spring Boot] Validation์ ๋ฐ์ํ ์ ์๋ ์๋ฌ ์์๋ณด๊ธฐ ์ด์ ๊ธ : 2024.11.07 - [BE/๐ Spring] - [Validation] spring boot validation ์ฌ์ฉ๋ฒ๊ณผ ์ข ๋ฅ :: Spring Boot :: v3.3.5 @Valid์ @ValidatedValid์ Validated ๊ฒ์ฆ ์คํจ์ exception ๋ฐ์ @Valid @Valid๋ jakarta.validation.Valid์ ์ํด ์๊ณ RequestBody๋ก ์ ๋ฌ๋ ์์ฒญ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฆํ๋๋ฐ ์ฌ์ฉ๋จ @Validated @Validated๋ org.springframework.validation.annotation.Validated์ ์ํด ์๊ณ , AOP ๊ธฐ๋ฐ์ผ๋ก ๋์@RequestParam, @PathVariable์์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆController๊ฐ ์.. 2024. 11. 8. [Validation] spring boot validation ์ฌ์ฉ๋ฒ๊ณผ ์ข ๋ฅ ValidationSpring Boot์์๋ Validation์ ํตํด ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ ์ ์กํ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค. ์ Validation์ ์ฌ์ฉํ ๊น์ฃผ๋ก Controller์์ ํด๋ผ์ด์ธํธ๋ก ๋ถํฐ ์ ์ก๋ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํจ์ ํจ์ฑ ๊ฒ์ฆ ์ฝ๋๋ฅผ ์ง์ ๊ตฌํํ ์ ์์ผ๋, request์ ๋ค์ด์ค๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ํ ๊ฒ์ฆ ์ฝ๋๋ก ์ธํด ์ฝ๋์ ์์ด ๋ง์ ์ง ์ ์์ผ๋ฉฐ ์๋น์ค ๋ก์ง์ ๋ฐฉํด๋ ์ ์์์์ฒญ ํญ๋ชฉ์ด ๋ง์์ง ์๋ก ๊ฒ์ฆ ๊ณผ์ ์ด ๊ธธ์ด์ง์ฌ๋ฌ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๊ฒ์ฆ ๋ก์ง์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ์ผ๊ด์ฑ์ด ์์ด์ง ์ ์์Validation์ ์ฌ์ฉํ๋ฉด ๊ฒ์ฆ ๋ก์ง์ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌํํ ์ ์์Validation์ ์ฌ์ฉํด์ ๊ฒ์ฆ ๋ก์ง์ ๋จ์ํ ์ํฌ ์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ถ๊ฐimplement.. 2024. 11. 7. [Spring Boot] jakarta.servlet.ServletException: No adapter for handler [Controller@] The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler [Spring Boot] jakarta.servlet.ServletException: No adapter for handler [Controller@] The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler ServletException์ Spring MVC์์ ํธ์ถํ Controller ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์ ํ HandlerAdapter๋ฅผ ์ฐพ์ ์ ์์ ๋ ๋ฐ์์ฃผ๋ก ์ปจํธ๋กค๋ฌ ์ค์ ์ ์ค์๊ฐ ์์ ๋ ์์ฃผ ๋ฐ์๋ฌธ์ ํด๊ฒฐํ๊ธฐController ์์ ํ์๋ก ํ๋ annotation์ ๋นผ๋จน์ง ์์๋์ง ํ์ธ@RestController, @Controller, @RequestMapping, @GetMa.. 2024. 10. 29. [Spring Boot] Controller์ RestController ์ฐจ์ด์ ResponseBody @Controller Vs. @RestControllerRestController๋ Spring Boot 4.0 ๋ถํฐ Restful ์๋น์ค ๊ฐ๋ฐ์ ์ํด ์ถ๊ฐ๋จRestController๋ Controller + ResponseBody ์ฆ, Controller์์ ์๋ฏธํ๋ฉด์ ResponseBody์ธ RestApi์์ ์๋ฏธํ๋ค @Controller@RestController์ฌ์ฉํ๋ ๊ณณWeb Application ๊ฐ๋ฐ์ ์ฌ์ฉ๋จRestful Web Service ๊ฐ๋ฐ์ ์ฌ์ฉ๋จ๋ฐํ ํ์ html๊ณผ ๊ฐ์ View๋ฅผ ๋ฐํjson, XML๊ณผ ๊ฐ์ Response ๋ฐํ @Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@Re.. 2024. 9. 22. [Spring Boot] ํ๊ธ์ด ??? ๋ก ๋์ฌ ๋, ํ๊ธ ๊นจ์ง ์ด์ ๋ฌธ์ ์ํฉ์คํ ์ด์ง ์๋ฒ์์ ๋ฌธ์ ์๋ ๊ฒ ํ์ธํ๊ณ ์ด์์๋ฒ ๋ฐฐํฌํ๋ค์ฑ์์ request์ ๋ณด๋ด์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๊ทธ๋ก ํ์ธํ๋ํ๊ตญ์ด๋ง ? ๋ก ๋์ค๋ ์ด์๊ฐ ์์๋ค. ์์ด๋ ์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฐํ๋ ๊ฑธ ํ์ธํ๋ค. ๋ฐ๋ก ํ์ ํ๊ธฐ ์ด๋ ค์ ๋๊ฑด request, response ๋ชจ๋ ์ํธํ ํด์ ์ฃผ๊ณ ๋ฐ๊ณ ์๊ณ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ Base64 utf-8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค.์คํ ์ด์ง ์๋ฒ์์ ๋์ํ๋ ๊ฒ์ด ์ด์์๋ฒ์์ ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ ํ๊ฒฝ์ ์ฐจ์ด์ ์ ๋จผ์ ์ดํด๋ณด๋ ๊ฒ์ด ๋ง์๋ค ํด๊ฒฐ๋ฐฉ๋ฒ-Dfile.encoding=UTF-8 jvm ์ต์ ์์ file.encoding ์ต์ ์ ์ถ๊ฐํ๋ค "java", "-Dspring.profiles.active=prod", "-Dfile.encoding=UTF-8", "-jar" ์์น.. 2024. 8. 23. [Spring Boot] ์๋ฌ ํด๊ฒฐํ๊ธฐ - Attribute was annotated as enumerated, but its java type is not an enum Attribute [com..xxxx.xxx.xxx.domain.faceinfo.domain.Score.type] was annotated as enumerated, but its java type is not an enum [java.lang.String] @Id @Enumerated(EnumType.STRING) private String type; varchar ๋ก ์ง์ ํ type์ด๋ผ๋ column์ jpa๋ก ์ํฐํฐ ๋งคํํ ๋ ์๊ธด ์ค๋ฅ์ด๋ค. Enummerated ์ด๋ ธํ ์ด์ ์ด ์๋ชป๋ ํ์ ์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋คString์ด ์๋ Enum ํ์ ์ผ๋ก ๋ณ๊ฒฝํด์ค์ผ ํ๋ค. 2024. 8. 22. ์ด์ 1 2 3 4 ยทยทยท 17 ๋ค์