๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SpringMVC26

[Vue.js] ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ, localStorage๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ๋ฉ”์ธํ™”๋ฉด์— ๋ณด์ด๋„๋ก ์„ค์ •ํ•˜๊ธฐ! ๋กœ๊ทธ์ธ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๊ฒŒ๋˜๋ฉด๋ฉ”์ธํ™”๋ฉด์— ์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ๋ณด์ด๋„๋ก์„ค์ •ํ•ด๋ณด์ž! [ ๋กœ๊ทธ์ธ ๋งŒ๋“ค๊ธฐ ]๋ธ”๋กœ๊ทธ์— ์ ์—ˆ๋˜ vue์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค [SpringBoot, Vue.js] ๋กœ๊ทธ์ธ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ, passwordEncoder.matches๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ.ํšŒ์›๊ฐ€์ž…๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์ด์ œ ํšŒ์›๊ฐ€์ž…ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด์ž! [ ํšŒ์›๊ฐ€์ž… 1ํŽธ + 2ํŽธ ] [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 1ํŽธ : dto ๋งŒ๋“ค๊ณ  ์ด๋ฆ„, ํŒจ์Šค์›Œ๋“œ, ์ „ํ™”post-this.tistory.com โ€ป์ด ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ์—ฐ์Šต์šฉ์œผ๋กœ ๊ฒ‰๋ชจ์Šต๋งŒ ๋กœ๊ทธ์ธ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ์— ์‹ค์ œ๋กœ ๋กœ๊ทธ์ธ๋œ ํ™”๋ฉด์ด๋ผ๊ณ  ๋ณด๊ธด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.๋งŒ์•ฝ ์ œ๋Œ€๋กœ.. 2025. 9. 2.
[SpringBoot, Vue.js] ๋กœ๊ทธ์ธ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ, passwordEncoder.matches๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ. ํšŒ์›๊ฐ€์ž…๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์ด์ œ ํšŒ์›๊ฐ€์ž…ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด์ž! [ ํšŒ์›๊ฐ€์ž… 1ํŽธ + 2ํŽธ ] [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 1ํŽธ : dto ๋งŒ๋“ค๊ณ  ์ด๋ฆ„, ํŒจ์Šค์›Œ๋“œ, ์ „ํ™”๋ฒˆํ˜ธ ํŒจ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ๋Š”ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.๊ทธ ์ค‘ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด์ž! 1. ํ™”๋ฉด ๋™์ž‘๊ณผ ์ „์ฒด์ฝ”๋“œํšŒ์›๊ฐ€์ž… ์˜์ƒ ํšŒ์›๊ฐ€์ž… ์ค‘๋ณต ๋””๋ ‰ํ† ๋ฆฌ์™€ ํด๋ž˜์Šค Vue์™€ Spring์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” dtopost-this.tistory.com [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 2ํŽธ : ์•„์ด๋””, ์ด๋ฉ”์ผ ์ค‘๋ณต์ฒดํฌ ๋งŒ๋“ค๊ธฐ.์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ๋ฅผํŒจํ„ด ์ฒดํฌ๋ฅผ ํ–ˆ์—ˆ๋‹ค.์ด๋ฒˆ์—๋Š” ์•„์ด๋””์™€ ์ด๋ฉ”์ผ์„์ค‘๋ณต ์ฒดํฌ ํ•ด๋ณด์ž! [ ํšŒ์›.. 2025. 8. 31.
[SpringSecurity] Vue์™€ Spring์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ.(CORS ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ) vue์™€ spring์€์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์„ ๊ฐ€์ ธ ์ƒ๊ธฐ๋Š”CORS ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž. 1. ๋ฌธ์ œ ์‚ดํ”ผ๊ธฐ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” Vue๋กœ ํ”„๋ก ํŠธ๋ฅผ ๋งก๊ณ  ์žˆ๊ณ , Spring์œผ๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ๋งก๊ณ  ์žˆ๋‹ค. Vue์—์„œ ํšŒ์›๊ฐ€์ž…์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ Spring์—” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋„ ๋„์ฐฉํ•˜์ง€ ์•Š์•˜๋‹ค. ์™œ ๊ทธ๋Ÿฐ๊ฑธ๊นŒ? Vue๋Š” http://localhost:5173/๋ฅผ ๊ธฐ๋ณธ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  Spring์€ http://localhost:8080/์„ ๊ธฐ๋ณธ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. Spring์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ์˜จ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Vue์—์„œ ์˜จ ์š”์ฒญ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Spring ๋‚ด๋ถ€์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. 2. ์ฝ”๋“œ ์‚ดํ”ผ๊ธฐ@CrossOrigin + http.c.. 2025. 8. 30.
[SpringSecurity] @EnableWebSecurity, SecurityFilterChain ๊ฐœ๋…๊ณผ ์˜ˆ์‹œ @EnableWebSecurity๋Š”์–ธ์ œ ์“ฐ๋Š”๊ฑธ๊นŒ? @EnableWebSecurity์–ด๋…ธํ…Œ์ด์…˜์„ ๋“ฑ๋กํ•˜์—ฌ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์›น ๋ณด์•ˆ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.์ฆ‰, ๋“ฑ๋กํ•˜๋ฉด ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ๋นˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.@EnableWebSercurity๋Š” ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์„ ์ƒ์„ฑํ•˜๊ณ  ์›น ๋ณด์•ˆ์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.๋ณดํ†ต @Configuration๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.์˜ˆ์ „์—๋Š” WebSecurityConfigurerAdapter์™€ @EnableWebSecurity ์กฐํ•ฉ์ด ๊ธฐ๋ณธ์ด์—ˆ๋‹ค.์ง€๊ธˆ์€ WebSecurityconfigurerAdapter๋ฅผ ์“ฐ์ง€ ์•Š๊ฒŒ๋˜๋ฉด์„œ SecurityFilterChain ๋นˆ์„ ์ง์ ‘ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ์‹์ด ํ‘œ์ค€์ด ๋˜์—ˆ๋‹ค. SecurityFilterChain์‹ค์ œ ๋ณด์•ˆ ๊ทœ์น™(์ธ๊ฐ€/.. 2025. 8. 28.
[Spring] @RequestMapping์ด๋ž€? @RequestMapping์–ธ์ œ ์“ฐ๋Š”๊ฑธ๊นŒ? @RequestMapping์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, DispatcherServlet์ด ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ์„ ์ฐพ๊ณ  ๋…ผ๋ฆฌ์  ์ฃผ์†Œ๊ฐ€ ๋งคํ•‘๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ @Controller์™€ @RequsetMapping์„ ์ž‘์„ฑํ•œ๋‹ค.๋“ค์–ด์˜จ ์š”์ฒญ์„ ํŠน์ • ๋ฉ”์„œ๋“œ์™€ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.@RequestMapping์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์€ value์™€ method์ด๋‹ค.value๋Š” ์š”์ฒญ ๋ฐ›์„ url์„ ์„ค์ •ํ•˜๊ณ , method๋Š” ์–ด๋–ค ์š”์ฒญ์„ ๋ฐ›์„์ง€ ์ •์˜(GET,POST, PUT ๋“ฑ)ํ•œ๋‹ค. @RequestMapping ์ฝ”๋“œ ์˜ˆ์‹œ@RequestMapping ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ์š”์ฒญ@RestController@RequestMapping(value = "/hello", met.. 2025. 8. 20.
[Spring] CORS์™€ SOP์˜ ์˜๋ฏธ, @CrossOrigin์™€ WebMvcConfigurer ์ฝ”๋“œ ์˜ˆ์‹œ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๋ฅผ๋”ฐ๋กœ ์ž‘์„ฑํ•  ๋•Œ,@CrossOrigin์„ ๋ถ™์˜€๋‹ค. @CrossOriginCORS๋ฅผ ์Šคํ”„๋ง์„ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.๋ชจ๋“  ๋„๋ฉ”์ธ๊ณผ ๋ชจ๋“  ์š”์ฒญ๋ฐฉ์‹์— ๋Œ€ํ•ด ํ•˜์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.์Šคํ”„๋ง 4.2๋ถ€ํ„ฐ ์ง€์›ํ•œ๋‹ค. CORS์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์›น ํŽ˜์ด์ง€์˜ ์ œํ•œ๋œ ์ž์›์„ ์™ธ๋ถ€ ๋„๋ฉ”์ธ์—์„œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•ด์ฃผ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ฒ˜์Œ ์ „์†ก๋˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋„๋ฉ”์ธ๊ณผ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ์š”์ฒญ๋  ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋Š” cross-origin HTTP ์š”์ฒญํ•œ๋‹ค.Same Origin Policy์™€ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์˜ˆ์‹œ๋กœ, ๋‹ค๋ฅธ ์ง‘์—์„œ ๋‚ด ์ง‘์— ์žˆ๋Š” ๊ธˆ๊ณ (๋ฐ์ดํ„ฐ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง‘์ฃผ์ธ(์„œ๋ฒ„)์ด ํ—ˆ๊ฐ€์ฆ(ํŠน์ • ์‘๋‹ต ํ—ค๋”)์„ ์จ์ฃผ๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค. SOPSame Origin Policy์˜ ์•ฝ์ž์ด๋ฉฐ.. 2025. 8. 19.