λ°μν Spring23 Spring @RequestBody νλ λ°μΈλ©μ΄ λμ§ μλ μ΄μ (feat. Lombok, Jacksonμ λ€μ΄λ° μ°¨μ΄) κ°μ Springμμ ν΄λΌμ΄μΈνΈμ μμ²μ JSON νμμΌλ‘ λ°κ³ , @RequestBodyλ₯Ό μ¬μ©νμ¬ JSON bodyμ λ°μ΄ν°λ₯Ό Java Objectμ νλμ μμ§λ ¬ν(Deserialize)λ₯Ό ν΅ν΄ κ° λ°μ΄ν°κ° μ μμ μΌλ‘ λ°μΈλ©μ΄ μ΄λ£¨μ΄μ§κ² λ©λλ€. νμ§λ§, νλμ νΉμ λ€μ΄λ° + Lombokμ @Getterλ₯Ό μ¬μ©ν λ λ°μΈλ©μ΄ μ μμ μΌλ‘ λμ§ μλ μ΄μκ° μ‘΄μ¬νλλ°μ, μ΄μ κ΄λ ¨νμ¬ κ°λ΅ν μ΄ν΄λ³΄κ² μ΅λλ€. ### Send POST request with json body POST http://localhost:8080/api/v1/test Content-Type: application/json { "pId": "pId", "poId": "poId" } μλ₯Ό λ€μ΄, μμ κ°μ μλ² μ½λκ° μ‘΄μ¬νκ³ ν΄λΌ.. 2024. 3. 20. Spring @ComponentScan λμ κ³Όμ Springμμ ν΄λμ€μ @Configuration, @RestController, @Service λ±μ μ΄λ Έν μ΄μ μ μ μΈνλ©΄ μ€νλ§μ ν΄λΉ μ΄λ Έν μ΄μ λ€μ μ€μΊν΄μ λΉμΌλ‘ λ±λ‘μ ν΄μ£Όλλ°μ, μ΄λ¬ν μν μ νλ κ²μ΄ @ComponentScan μ΄λ Έν μ΄μ μ λλ€. @ComponentScan μ λ¨μ΄ κ·Έλλ‘ @Component μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ€μ μ€μΊνμ¬ μ€νλ§ λΉμΌλ‘ λ±λ‘νλλ°, μμ μΈκΈλ μ΄λ Έν μ΄μ λ€μ λͺ¨λ λ΄λΆμ @Component μ΄λ Έν μ΄μ μ κ°μ§κ³ μμ΅λλ€. μμ κ°μ μ΄λ Έν μ΄μ λ€μ μ€μ νλ©΄ μ€νλ§μμλ μ΄λ»κ² μ»΄ν¬λνΈλ€μ μ€μΊνκ³ , μ€νλ§ λΉμΌλ‘ λ±λ‘νλμ§ μ΄ν΄λ³΄κ² μ΅λλ€. @ComponentScan ComponentScan μ΄λ Έν μ΄μ μ μ‘΄μ¬νλ μ£ΌμμΌλ‘, λλ΅μ μΈ μλ―Έλ λ€μκ³Ό κ°μ΅λλ€.. 2023. 12. 9. Spring Bean μ΄ λ±λ‘λλ κ³Όμ μ€νλ§μ μ¬μ©νλ€ λ³΄λ©΄ @Configuration, @Component, @Bean λ±μ μ΄λ Έν μ΄μ μ ν΅ν΄ μ€νλ§ μ»¨ν μ΄λμ λΉμ λ±λ‘νλλ°μ, μ΄λ ν κ³Όμ μ ν΅ν΄ Bean μ΄ λ±λ‘λλμ§ μ΄ν΄λ³΄κ² μ΅λλ€. ν μ€νΈλ μμ κ°μ΄ @Configuration μ΄λ Έν μ΄μ μ μ€μ ν TestConfiguration ν΄λμ€κ° μ‘΄μ¬νκ³ , main λ©μλλ₯Ό ν¬ν¨ν Main ν΄λμ€μμ μ΄λ Έν μ΄μ κΈ°λ°μ AnnotationConfigApplicationContext κ°μ²΄λ₯Ό μμ±νκ³ , μ΄ μμ±μμλ TestConfiguration κ°μ²΄λ₯Ό μ£Όμ ν©λλ€. μ κ³Όμ μ ν΅ν΄ μ΄λ Έν μ΄μ κΈ°λ°μ Spring Bean μ΄ λ±λ‘λλ κ³Όμ μ μ΄ν΄λ³΄κ² μ΅λλ€. BeanFactory BeanFactory μΈν°νμ΄μ€λ μ€νλ§ νλ μμν¬μμ μ€νλ§ .. 2023. 12. 2. μ€νλ§μμ ν΄λΌμ΄μΈνΈλ‘ λ°μ΄ν° μ λ¬ μ νκΈμ΄ κΉ¨μ§λ μ΄μ (ISO-8859-1) μλ νμΈμ, μ΅κ·Ό ν΄λΌμ΄μΈνΈ(Vue) μ μλ²(Spring Boot) μ°λ μ μλ²μμ νκΈ λ°μ΄ν°λ₯Ό μ λ¬νλ©΄ ν΄λΌμ΄μΈνΈμμ νκΈμ΄ κΉ¨μ§λ μ΄μκ° λ°μνμλλ°μ, μ΄μ κ΄λ ¨νμ¬ κ°λ΅ν μ λ¦¬ν΄ λ³΄μμ΅λλ€. μμΈ HttpMessageConverter μΈν°νμ΄μ€λ Springμμ HTTP request, response λ₯Ό λ³νν΄ μ£Όλ μΈν°νμ΄μ€μΈλ°μ, ν΄λΉ ν¬μ€ν μ μ΄ν΄νλλ° νμν λ΄μ©μ΄λΌ κ°λ΅νκ²λ§ μ€λͺ νκ³ λμ΄κ°κ² μ΅λλ€. μ€νλ§μμ νν μ¬μ©νλ @RestController μ΄λ Έν μ΄μ μ ν¬ν¨λμ΄ μλ @ResponseBody μ΄λ Έν μ΄μ μ μ¬μ©ν κ²½μ°, HttpMessageConverter μ΄ λμνκ³ λ°ν νμ μ λ°λΌ μ μ ν ꡬνμ²΄κ° μ¬μ©μ΄ λ©λλ€. λνμ μΌλ‘λ ByteArrayHttpMessageC.. 2023. 11. 20. λ§λ€λ©΄μ λ°°μ°λ νλ‘ νΈ μ»¨νΈλ‘€λ¬(Front Controller) ν¨ν΄ μλ νμΈμ, μ΄λ² ν¬μ€ν μμλ κΈ°μ‘΄ Servlet κΈ°λ°μ MVC νλ μμν¬λ₯Ό μ€νλ§μ νλ‘ νΈ μ»¨νΈλ‘€λ¬ ν¨ν΄μ μ§μ λ§λ€μ΄λ³΄λ©΄μ μ μ§μ μΌλ‘ κ°μ νλ κ³Όμ μ΄ν΄λ³΄κ² μ΅λλ€. ν΄λΉ ν¬μ€ν μ μλ κ°μλ₯Ό μ°Έκ³ νμ¬ μμ±νμ΅λλ€! https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard μ€νλ§ MVC 1νΈ - λ°±μλ μΉ κ°λ° ν΅μ¬ κΈ°μ - μΈνλ° | κ°μ μΉ μ ν리μΌμ΄μ μ κ°λ°ν λ νμν λͺ¨λ μΉ κΈ°μ μ κΈ°μ΄λΆν° μ΄ν΄νκ³ , μμ±ν μ μμ΅λλ€. μ€νλ§ MVCμ ν΅μ¬ μ리μ ꡬ쑰λ₯Ό μ΄ν΄νκ³ , λ κΉμ΄μλ λ°±μλ κ°λ°μλ‘ μ±μ₯ν μ μμ΅λλ€., μ www.inflearn.com μ€νλ§μμ νλ‘ νΈ μ»¨νΈλ‘€λ¬λΌκ³ λΆλ¦¬λ ν¨ν΄μ λͺ¨λ HTTP μμ².. 2023. 8. 16. μ’μμ κΈ°λ₯μ ν΅ν΄ μ΄ν΄λ³΄λ λμμ± μ΄μ (synchronized) μλ νμΈμ, μ΄λ² ν¬μ€ν μμλ λμμ±(Concurrency)μ λν΄ μ΄ν΄λ³΄κ² μ΅λλ€. (μμ μ½λλ κΉνλΈμμ νμΈνμ€ μ μμ΅λλ€.) λμμ±(Concurrency) κ°λ λ€μ΄λ² μ¬μ μ κ²μν΄λ³Έ λμμ±μ λ€μκ³Ό κ°μ΅λλ€. μ΄λ€ λ μ¬κ±΄μ΄ κ°μ μκ°μ μΌμ΄λλ κ²μ μ΄λ₯΄λ λ§ λλΆλΆμ μΉ μλ²λ μ¬λ¬ κ°μ μμ²(ν΄λΌμ΄μΈνΈ)μ λμμ μνν μ μκ³ , μ΄λ μμ±ν μ½λκ° λμμ μνλ μ μλ€λ μλ―Έμ λμΌν λ§₯λ½μ λλ€. μ΄λ¬ν λμμ± λ¬Έμ λ₯Ό μ΄ν΄λ³΄κΈ° μν΄ κ²μκΈμμ ν΄λΌμ΄μΈνΈκ° λμμ μ’μμλ₯Ό νμ λ λ°μν μ μλ λ¬Έμ μ λν΄ μ΄ν΄λ³΄κ² μ΅λλ€. μ κ·Έλ¦Όμ λν μ€λͺ μ λ€μκ³Ό κ°μ΅λλ€. User Aκ° κ²μκΈ 1μ μ’μμλ₯Ό ν΄λ¦νμ λ likeCount μ‘°ν (likeCount = 0) User Bλ κ²μκΈ .. 2023. 2. 26. Spring DispatcherServlet(λμ€ν¨μ²μλΈλ¦Ώ) κ°λ λΆν° λμ κ³Όμ κΉμ§ π DispatcherServlet μλ νμΈμ, μ΄λ² ν¬μ€ν μμλ Springμμ HTTP μμ² λ° μλ΅κ³Ό κ΄λ ¨νμ¬ κ°μ₯ ν΅μ¬ κΈ°μ μΈ DispatcherServletμ λν΄ μ΄ν΄λ³΄κ³ μ ν©λλ€. νμμ κ°λ μ λν΄μλ μ΄λ μ λ μκ³ μμμ§λ§ μ΄λ ν κ³Όμ μ ν΅ν΄ λμ€ν¨μ² μλΈλ¦Ώμ΄ ν΄λΌμ΄μΈνΈμ μμ²μ λ°κ³ , λ©μλμ νλΌλ―Έν° μ 보λ₯Ό μ²λ¦¬νκ³ μλ΅μ λ°ννλμ§ λ΄λΆ λμμ μ λͺ°λμλλ°μ, μ΄λ² κΈ°νμ μ λ¦¬ν΄ λ³΄μμ΅λλ€. (νλ¦° λ΄μ©μ΄ μ‘΄μ¬ν μ μμΌλ λ§μν΄ μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€. π) | DispatcherServlet κ°λ νλ‘ νΈ μ»¨νΈλ‘€λ¬(Front Controller)λΌκ³ λ λΆλ¦¬λ DispatcherServletμ HTTP νλ‘ν μ½λ‘ λ€μ΄μ€λ λͺ¨λ μμ²μ λ¨Όμ λ°μμ μ ν©ν 컨νΈλ‘€λ¬μ μμ(Delega.. 2023. 2. 11. Spring AOPλ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈμ μμ² μ 보 λ‘κΉ νκΈ° μλΉμ€μμ ν΄λΌμ΄μΈνΈμ λͺ¨λ νΈμΆμ λν΄ μ μ₯νμ¬ κ΄λ¦¬λ₯Ό ν μ μμ΅λλ€. μ΄ λ, λ¨μν λ‘κ·Έλ‘ λ¨κΈΈμλ μκ³ νΉμ λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ μμ² μ 보λ₯Ό μ μ₯νμ¬ κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ² ν¬μ€ν μμλ ν΄λΌμ΄μΈνΈμ μμ² μ 보(URI, Http Method, payload λ±λ±)λ€μ λ‘κΉ λ° λ°μ΄ν°λ² μ΄μ€μ μ μ₯νμ¬ κ΄λ¦¬νλ λ°©λ²μ λν΄ κ°λ΅ν μ΄ν΄λ΄ λλ€. μμ μ½λλ GitHubμμ νμΈν μ μμ΅λλ€ :) π ApiRequestEntity ApiRequestEntity ν΄λμ€λ λ°μ΄ν°λ² μ΄μ€μ μ μ₯ν ν΄λΌμ΄μΈνΈμ μμ² λ°μ΄ν°μ μΌλ‘ κ° νλμ μν μ λ€μκ³Ό κ°μ΅λλ€. id : PK methodValue : Http Method apiUri : Request URI payload : Request Body req.. 2023. 1. 14. Spring + MyBatisμμ 쿼리μ κ²°κ³Όμ κ°μ²΄κ° λ§€νμ΄ λλ κ³Όμ π§· Spring + MyBatisμμ 쿼리μ κ²°κ³Όμ κ°μ²΄κ° λ§€νμ΄ λλ κ³Όμ μ€νλ§μμ λ§μ΄λ°ν°μ€λ₯Ό μ¬μ©ν λ, Select 쿼리μ κ²°κ³Όμ κ°μ²΄(Dto)κ° μ΄λ ν μμ μ ν΅ν΄ λ§€νμ΄ λλμ§ μ ννκ² νμ νκ³ κ³΅μ νκΈ° μν΄ λ§€ν κ³Όμ μ λν΄ μ λ¦¬ν΄ λ³΄μμ΅λλ€. (λΉμ°ν νλ¦° λ΄μ©μ΄ μ‘΄μ¬ν μ μμΌλ νΌλλ°± μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€. π) π κ°μ Springκ³Ό MyBatisμμ 쿼리 κ²°κ³Όμ κ°μ²΄μ λ§€νμ΄ μ΄λ£¨μ΄μ§λ κ³Όμ μ λν΄ μ΄ν΄λ΄ λλ€. μ΄μ κ΄λ ¨νμ¬ μ΄λ ν λ°©μμΌλ‘ λ§€νμ μ§ννλμ§, μ’μ λ°©λ²μ΄ 무μμΈμ§ λ±μ λν΄ μ΄ν΄λ³΄κ² μ΅λλ€. π κ²°λ‘ ν¬μ€ν μ΄ κ½€λ μ₯λ¬Έμ΄κΈ°μ,, λ§€ν κ³Όμ μ λν΄ κ²°λ‘ λΆν° λ§μλ리면 λ€μκ³Ό κ°μ΅λλ€. κΈ°λ³Έ μμ±μ(NoArgs)λ§ μ‘΄μ¬ν κ²½μ°, 쿼리 κ²°κ³Όμ κ°μ²΄μ λ§€νμ΄ μ μμ μΌλ‘ μ§.. 2022. 10. 3. Spring Thread, Transaction, Connection κ΄κ³ π Spring Thread, Transaction, Connection κ΄κ³ μλ νμΈμ, μ΅κ·Ό ν λΉμ μ€νλ§ λμλ‘ μ€ν°λ μ€ μλμ λΉμ·ν μ§λ¬Έμ΄ μμμ΅λλ€. "νΈλμμ μ΄ μλ‘ μμ±λ λ μ€λ λκ° μλ‘ μμ±λ κΉμ?" μ΄μ κ΄λ ¨νμ¬ μλμ κ΄κ³λ€μ λν΄ κ°λ΅ν μ 리ν΄λ³΄κ³ μ ν©λλ€. (κ΄λ ¨ μ½λλ GitHubμμ νμΈν μ μμ΅λλ€. π ) Thread per transaction vs One thread for serveral transaction Thread per connection vs One thread for all connections νλ¦° λ΄μ©μ΄ μ‘΄μ¬ν μ μμΌλ μ΄λ¬ν λΆλΆμμλ νΌλλ°± μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€. π (β» ν΄λΉ ν¬μ€ν μ https://truehong.tistory.com/14.. 2022. 9. 3. μ΄μ 1 2 3 λ€μ λ°μν