Framework37 @RequestBody, @RequestParam, @PathVariable, @ModelAttribute์ ์ฐจ์ด ์คํ๋ง ํ๋ ์์ํฌ์์ HTTP ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ก ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค. ๊ฐ๊ฐ์ ์ ๋ ธํ ์ด์ ์ ๋ค๋ฅธ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๋ค์์ @RequestBody, @RequestParam, @PathVariable, @ModelAttribute์ ์ฐจ์ด์ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ๋ด๋ถ์ ์๋ ๋ฐฉ์์ ๋ํด์ ๋ค๋ค๋ณด์๋ค.@RequestBody์ค๋ช @RequestBody๋ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ๊ฐ์ฒด์ ๋งคํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.์ฃผ๋ก JSON, XML ๋ฑ์ ํฌ๋งท์ผ๋ก ์ ์ก๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํ ๋ ์ฌ์ฉ๋๋ค. JSON ๋ฐ์ดํฐ ๊ฒฝ์ฐ HttpMessageConverter ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด MappingJackson2HttpMessageConverter ํด๋์ค๋ฅผ ํตํด ์์ฒญ ๋ณธ๋ฌธ์ ์ฝ๊ณ , ํด๋น ๊ฐ์ฒด๋ก ๋ณํํ๋ค. .. Framework/Spring Framework 2024. 6. 30. JPA ์ํฐํฐ ์ํ (์๋ช ์ฃผ๊ธฐ) JPA์ ์ํฐํฐ ์ํTransient: ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ๊ด๋ฆฌ๋์ง ์๋ ์ํ์ด๋ค. ์๋ก์ด ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง ์์ง ์์์ฑ ์ปจํ ์คํธ์ ์ถ๊ฐ๋์ง ์์๋ค.User user = new User();user.setName("John Doe");// user๋ transient ์ํPersistent: ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์ํด ๊ด๋ฆฌ๋๋ ์ํ์ด๋ค. ์ด ์ํ์์๋ ์ํฐํฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ฑ ์ปจํ ์คํธ์ ์ํด ์ถ์ ๋๊ณ , ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋๋ค.entityManager.persist(user);// user๋ persistent ์ํDetached: ์ํฐํฐ๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์ํด ๋ ์ด์ ๊ด๋ฆฌ๋์ง ์๋ ์ํ์ด๋ค. ์ฃผ๋ก ํธ๋์ญ์ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ์ํฐํฐ ๋งค๋์ ๊ฐ ๋ซํ ๋ ๋ฐ์ํ๋ค.en.. Framework/Spring Framework 2024. 6. 6. ํํฐ์ ์ธํฐ์ ํฐ์ ์ฐจ์ด ํํฐ์ ์ธํฐ์ ํฐ๋ ๋ ๋ค ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์๋ฐ ํํฐ์ ์คํ๋ง ์ธํฐ์ ํฐ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ปจํธ๋กค๋ฌ์ ๋๋ฌํ๊ธฐ ์ ์ด๋ ์๋ต์ด ํด๋ผ์ด์ธํธ์ ๋๋ฌํ๊ธฐ ์ ์ ๊ฐ๋ก์ฑ์ ์ฒ๋ฆฌํ ์ ์๋ค.๋ํ ๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ฌ์ ์ฒ๋ฆฌ(pre-processing)์ ์ฌํ ์ฒ๋ฆฌ(post-processing)๋ฅผ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์์ฒญ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋ ์๋ต ํค๋๋ฅผ ์์ ํ ์ ์๋ค.ํํฐ์ ์ธํฐ์ ํฐ๋ ๋ชจ๋ ์ฒด์ธ(chain)์ ํํ๋ก ์ฌ๋ฌ ๊ฐ๊ฐ ์ฐ์์ ์ผ๋ก ์คํ๋ ์ ์๋ค. ํ๋์ ํํฐ๋ ์ธํฐ์ ํฐ๊ฐ ๋ค์ ํํฐ๋ ์ธํฐ์ ํฐ๋ฅผ ํธ์ถํ๋๋ก ์ค๊ณํ ์ ์๋ค.์ด๋ ๊ฒ ํํฐ์ ์ธํฐ์ ํฐ๋ ๋ชจ๋ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ๋์ ๋ฐฉ์๊ณผ ์ ์ฉ.. Framework/Spring Framework 2024. 3. 4. Spring Boot 3.X migration ์ด์ (feat. ์คํ๋ง ์ํ๋ฆฌํฐ, JWT ๋ณ๊ฒฝ์ ) ์คํ๋ง ๋ถํธ 2 ๋ฒ์ ์ ์ฌ์ฉํ๋ค๊ฐ 3๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ฒ ๋๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ด์๊ฐ ์๊ธฐ๊ฒ ๋๋ค. ํนํ๋ JDK17 ๊น์ง ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ๊ธฐ์กด์ ์๋ ํจํค์ง ๊ฒฝ๋ก๋ฅผ ๋ชป ์ฐ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ ๋ํด์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ ๋์์ผ๊ฒ ๋ค. ๊ธฐ์กด ๋ณ๊ฒฝ ํ ์คํ๋ง ๋ถํธ ๋ฒ์ 2.7.17 3.0.11 ์๋ฐ ๋ฒ์ 8 17 JWT ๋ฒ์ 0.9.1 0.11.5 Spring Security ๋ ๋ชจ๋ 6๋ฒ์ (6:3.1.1.RELEASE) ์ ์ฌ์ฉํ์๋ค. thymeleaf์์ Spring Security๋ฅผ ์ฐ๋ ค๋ฉด springsecurity6๋ฅผ ์จ์ผ ํ๋ค. ๐ build.gradle ๋ณ๊ฒฝ ํ dependencies { implementation 'org.springframework.boot:spring-.. Framework/Spring Framework 2023. 11. 9. JPA ์ Spring data JPA ์ฐจ์ด์ (+ ํ์ด๋ฒ๋ค์ดํธ) JPA, JPA, JPA ๋ง์ ์ฌ๋๋ค์ด ๋งํ์ง๋ง, JPA ์ Spring data JPA๋ฅผ ํผ์ฉํด์, ์ฐฉ๊ฐํด์ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง์ ๊ฒ ๊ฐ๋ค.๋ฌผ๋ก ๋๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. JPA๋ EntityManager ๋ฅผ ์ด์ฉํ์ฌ, EntityManager ์ ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ CRUD ํ๋ ๊ฑธ๋ก ์๊ณ ์์ง๋ง, ์ค์ ํ๋ก์ ํธ๋ฅผ ํด๋ณด๋ฉด EntityManager ๋ฅผ ์ฌ์ฉํ๋๊ฒ ์๋๋ผ Repository ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ์ฌ์ฉํ๊ณ ์๋ค. ๋ฌด์จ ์ฐจ์ด ์ผ๊น?์ด์ฐธ์ JPA์ Spring data JPA ๊ฐ๋ ์ ๋ค์ก์ ๋ณด๋ ค๊ณ ํ๋ค. JPA (Java Persistence API)JPA๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์ค API๋ค. JPA๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ๊ณ , CRU.. Framework/Spring Framework 2023. 11. 8. ์์ฒญ์ด ์์ ๋ ์คํ๋ง MVC ๋ด๋ถ์ ํ๋ฆ ๊ณผ์ (DispatcherServlet ์ค์ฌ) Spring MVC ๊ตฌ์กฐ ํ๋ฆ์คํ๋ง MVC๋ Model-View-Controller ๋์์ธ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์น ํ๋ ์์ํฌ๋ก, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํ์ฌ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ธ๋ค.๊ธฐ๋ฅ๊ณผ ์ญํ ๋ณ๋ก ๋ชจ๋์ ๋๋๊ณ ๊ฐ ๋ชจ๋๋ค์ด ํ๋ ฅํ์ฌ ํด๋ผ์ด์ธํธํํ ์จ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ณด๋ด์ฃผ๊ฒ ๋๋ค.๊ทธ ์ค DispatcherServlet์ ์คํ๋ง ํ๋ ์์ํฌ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก, ์คํ๋ง MVC์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ์ญํ ์ ํ๋ค. ๋ชจ๋ HTTP ์์ฒญ์ ๋จผ์ DispatcherServlet์ ํตํด ์ฒ๋ฆฌ๋๋ฉฐ, ์ด๊ณณ์์ ์์ฒญ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ทฐ๋ก ๋ผ์ฐํ ํ๋ค. DispatcherServlet์ ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ ์ด ์ง์ ์ผ๋ก, ์์ฒญ์ ์ฒ๋ฆฌ ํ๋ฆ์.. Framework/Spring Framework 2023. 10. 31. (23.03.03) Flask ํ๋ก๊ทธ๋๋ฐ: Java(Spring)์์ Flask์ JSON๋ฌธ์์ด ์ ๋ฌํ๊ณ ๋ฐ๊ธฐ, SQLAlchemy(Flask module) ํ์ต๋ ML ๋ชจ๋ธ์ Flask ์น์์ ์๋น์คํ๊ธฐ - Logistic Regression ํ๊ท๋ชจ๋ธ ์์ฑ ๋ฐ ํ์ต - Pickle์ ์ฌ์ฉํ ๋ชจ๋ธ์ ํ์ผ ์ ์ฅ - Flask ์น์์ ๋ชจ๋ธ์ ๋ก๋ํ์ฌ ์๋น์คํ๊ธฐ Flask์์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ค๋ฃจ๊ธฐ - Java(Spring)์์ Flask์ JSON๋ฌธ์์ด ์ ๋ฌํ๊ณ ๋ฐ๊ธฐ - SQLAlchemy(Flask module) CRUD(Oracle) ์ ์ -->ํผ--> ์๋ฐ -->json(json์ฌํ ์ด์ฉ, ํฌ์คํธ ๋ฐฉ์์ผ๋ก ๋ณด๋ด๊ธฐ)--> ํ๋ผ์คํฌ(request.get_json ๊ฐ์ฒด๋ฅผ ์จ์ ๋์ด์จ json๋ฌธ์์ด ๋ฐ๊ธฐ) Flask -->์๋ฐ๋ก json ๋ฌธ์์ด์ ๋ณด๋ผ๋ jsonify ์จ์ ๋ณด๋ธ๋ค. ์คํ ๊ฒฐ๊ณผ : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .. Framework/Flask Framework 2023. 3. 6. (23.03.02.) Flask ํ๋ก๊ทธ๋๋ฐ: ํ๋ผ์คํฌ ์น ์๋น์ค (GET,POST) ํ์ด์ฌ - ์คํ๋ง ์ฐ๋ํ๊ธฐ - Web Server : Spring(Java Web Framework) - AI Server : Flask(Python Web Framework) W/B -์์ฒญ-> Framework/Flask Framework 2023. 3. 6. (23.01.26.) React ํ๋ ์์ํฌ : ๋ฆฌ์กํธ์์ JSON ํ์ผ ๋ค๋ฃจ๊ธฐ ๋ฐ ํํฐ๊ธฐ๋ฅ ๋ฆฌ์กํธ์์ JSON ํ์ผ ๋ค๋ฃจ๊ธฐ List.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import emps from "./emps.json"; function List() { return( ํ ์ด๋ธ์ ๋ฐ์ดํฐ ํ์ํ๊ธฐ ๋ฒํธ์ด๋ฆ์ ํ { emps.list.map((emp)=> {emp.num}{emp.name}{emp.phone} ) } ); } export default List; //emps ์ ์ด์จ ์ด๋ ์ด emp๋ ๋ฆฌ์คํธ์ ํ๋์ ์์(์ต๋ช ํจ์์ ํ๋ผ๋ฏธํฐ) Colored by Color Scripter cs 1. jsx์์ ํ ์ด๋ธ์ ํค๋์ ๋ฐ๋๊ฐ ๊ผญ์์ด์ผ ํ๋ค. 2. return๋ฌธ์ฅ ์์์๋ 1๊ฐ์ ํ๊ทธ๋ง ์ฌ์ฉํ ์ ์๋ค... Framework/React Framework 2023. 1. 28. (23.01.25)React ํ๋ ์์ํฌ : ๋ฆฌ์กํธ ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ ๋ฆฌ์กํธ ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ Component ์ ์ธ, ์ฌ์ฌ์ฉ ์์คํ ์ํํธ์จ์ด - ์ด์์ฒด์ ๋ฅผ ๋ง๋ค๊ฑฐ๋ ํ๋.... SPA(Single Page Application) - ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฑฐ๋ ํ๋....(๋ฆฌ์กํธ๋ ์ฌ๊ธฐ์ ํด๋น) ๋น ๋ฅธ ํน์ง์ด ์๋ค. ๋ฐ์ดํฐ ๋น์ฉ ์ ๊ฐ ํด๋ฆญํ๋ฉด ์๋ฒ์ ๋ํ ์์ฒญ์ด ์๋๋ผ ์ปดํฌ๋ํธ๋ง ๋ฐ๋๊ฒ๋ ์๋ฒ์ธก ๋ฐ์ดํฐ๋ฅผ ์ฉ์ฒญํ ๋๋ ajax ์ฌ์ฉ ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ -๋ก์ปฌ์ ์ ์ธ๋ ๋ฐฐ์ด -back end ์์ ์ ๋ฌํ ๋ฐฐ์ด (๋ฆฌ์คํธ) 1 2 3 4 5 list.map(f); *f๋ list ์ ์์ ๊ฐ๊ฐ์ ๋ฐ์์ ๊ฐ๊ณตํ๊ณ ๋ค์ ๋ฐฐ์ด๋ก ๋ฆฌํด (v) => {v} list.map( (v) => {v} ) Colored by Color Scripter cs -list.map(f); /* f๋ list์ ์์ ๊ฐ.. Framework/React Framework 2023. 1. 25. (23.01.20)React ํ๋ ์์ํฌ : ๋ฒํผ ์ด๋ฒคํธ๋ฆฌ์ค๋ ๋ง๋ค๊ธฐ ๋ฒํธ์ ๋๋ฅด๋ฉด ๋์ ์ผ๋ก ์ซ์๊ฐ ์ฌ๋ผ๊ฐ๋ ์ด๋ฒคํธ ๋ง๋ค๊ธฐ ํฐ๋ฏธ๋์ ํตํด์ react-router-dom ์ค์นํ๊ธฐ App.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import { useState } from 'react'; import { Route, Routes, Link } from 'react-router-dom'; import './App.css'; import Hello from './comp/Hello.js'; import Test from './comp/Test'; function App() { //์ํ ๋ณ์ const [num, setNum] = useState(0); //let num =0; //.. Framework/React Framework 2023. 1. 24. (23.01.19) React ํ๋ ์์ํฌ - ๋ค์ด๋ก๋ ๋ฐ ์ค์น React Framework Front-End SPA(Single Page Application) > ๋ฐ์ดํฐ ๋น์ฉ์ ๊ฐ, ๋ฐ์์๋ ํฅ์ ๋ฐ๋ณต ์ฌ์ฉ๋๋ ํ์ด์ง์ ์ผ๋ถ๋ถ์ ๋ชจ๋คํ(์ปดํฌํดํธ)ํ์ฌ ์ฌ์ฌ์ฉ > ๊ฐ๋ฐ์๊ฐ ๋จ์ธก, ์ ์ง๋ณด์์ ํจ์จ์ฑ ํฅ์jQuery๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฉด์ ๋ถ๋ถ๋ถ๋ถ์ ๋ฐ๊ฟ ๋๋ง๋ค ํ๊ทธ๋ฅผ ํ๋ํ๋ ๋ค ๋ฃ์ด์ค์ผํ๋๋ฐ react๋ฅผ ์ฐ๋ฉด ๋ง๋ ํ ์ปดํฌ๋ํธ๋ฅผ ๋ผ์ ๋ฃ์ ์ ์๋ค. html, css, javascript ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด Nodejs ๊ธฐ๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์ฌ์ฉ Node.js: Server side Javascript JSX ์คํฌ๋ฆฝํธ : Javascript + XML - ํ๋ก์ ํธ ์์ฑ์ ๋ก์ปฌ ์น์๋ฒ๋ ๋ด์ฅ(ํฌํธ 3000) ๊ฐ๋ฐ์๋ฃ > Build > ์นํ์ค ํ์ผ ์์ฑ > ๊ฐ๋ฐํ๊ฒฝ ์ด์ธ์์ ์ฌ์ฉ JSP.. Framework/React Framework 2023. 1. 24. ์ด์ 1 2 3 4 ๋ค์