๐Ÿ“’ BackEnd

320x100
๐Ÿ“’ BackEnd/๐Ÿ“ spring

[spring] build.gradle ์˜์กด์„ฑ ๊ด€๋ฆฌ compile, runtime

gradle 7 ๋ฒ„์ „ ์ด์ƒ๋ถ€ํ„ฐ๋Š” compile, runtime ์‚ฌ์šฉ ๋ถˆ๊ฐ€ compile ๋Š” implementation์œผ๋กœ runtime ์€ runtimOnly๋กœ ๋Œ€์ฒด * ์ฐธ๊ณ  https://github.com/jwtk/jjwt/pull/664 Update installation in gradle 7+ by wkdalsgh192 · Pull Request #664 · jwtk/jjwt The compile and runtime dependency has been deprecated and finally not supported from Gradle 7+. So, I updated the installation part in readme.md for the users with the latest versio..

๐Ÿ“’ BackEnd/๐Ÿ“ spring

[spring + vue.js] SPA ์ƒˆ๋กœ๊ณ ์นจ 404์—๋Ÿฌ

๋ฌธ์ œ์ƒํ™ฉ SPA(Single Page Application)๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋‹จ์ผ ํŽ˜์ด์ง€์— ๋™์ ์œผ๋กœ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. SPA์˜ ๋ชจ๋“  ๊ฒฝ๋กœ๋Š” ๊ฒฐ๊ตญ ๋‹จ์ผ ํŽ˜์ด์ง€(index.html)๋กœ ํ–ฅํ•˜๊ฒŒ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฒฝ๋กœ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•œ๋‹ค๋ฉด ๊ทธ ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— 404 ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฆ‰, vue.js์—์„œ ๋ผ์šฐํŒ…์„ ํ†ตํ•ด ํŽ˜์ด์ง€ ์ด๋™์„ ํ•˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ ์ฐฝ์— ์ง์ ‘ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด http://localhost:8080/host๊ฒฝ๋กœ๋ฅผ ๋ทฐ์˜ ๋ผ์šฐํŒ… ๊ธฐ๋ฒ•์„ ์“ฐ๋ฉด /host์— ๋งคํ•‘๋˜๋Š” ์ปดํฌ๋„ŒํŠธ(ํŽ˜์ด์ง€)๋ฅผ ๊ฐ€์ ธ์™€ ํ™”๋ฉด์— ๋„์šด๋‹ค. ํ•˜์ง€๋งŒ ์œ„์˜ ๊ฒฝ๋กœ๋ฅผ ์ฃผ์†Œ์ฐฝ์— ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ € ๊ฒฝ๋กœ์—์„œ ..

๐Ÿ“’ BackEnd/๐Ÿ“ spring

[spring MVC] ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘(HandlerMapping)๊ณผ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ(HandlerAdapter)

Spring MVC ๊ตฌ์กฐ์—์„œ๋Š” DispatcherServlet์ด ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๋กœ ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ๋ทฐ๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์ „์— ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ๋ทฐ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ธ๋“ค๋Ÿฌ๋Š” ModelAndView ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, DispatcherServlet์€ ModelAndViewํƒ€์ž…์„ ํ•ธ๋“ค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ธ๋“ค๋Ÿฌ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋‹ค. spring์—์„œ๋Š” @controller๋ฅผ ์ ์šฉํ•œ ๊ฐ์ฒด ๋˜๋Š” controller์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ•ธ๋“ค๋Ÿฌ๋Š” ๊ฐ์ฒด ํƒ€์ž…์— ๋”ฐ๋ผ ModelAndViewํƒ€์ž…์„ ๋ฆฌํ„ดํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ..

๐Ÿ“’ BackEnd/๐Ÿ“ HTTP

[HTTP] HTTP ์‘๋‹ต๋ฉ”์‹œ์ง€ ์ƒํƒœ์ฝ”๋“œ, ์ƒํƒœ๋ฌธ๊ตฌ

HTTP ์ƒํƒœ์ฝ”๋“œ HTTP ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์–ด๋– ํ•œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ํ›„, ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋‚ด์ค€๋‹ค. ์ด ์ƒํƒœ๋ฅผ ์ˆซ์ž๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— '์ƒํƒœ ์ฝ”๋“œ'๋ผ๊ณ  ํ•œ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ์˜ ํ˜•์‹์€ 3์ž๋ฆฌ ์ˆซ์ž๋กœ ๋งจ ์•ž์˜ ๋ฐฑ์˜ ์ž๋ฆฌ ์ˆซ์ž์— ๋”ฐ๋ผ ์˜๋ฏธ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ ์‹œ, ๋ชจ๋ฅด๋Š” ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ ‘ํ•˜๋ฉด ๋งจ ์•ž์ž๋ฆฌ ์ˆซ์ž๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์˜๋ฏธ์˜ ์ฝ”๋“œ์ธ์ง€ ๋Œ€๋žต ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ƒํƒœ์ฝ”๋“œ ์˜๋ฏธ 1xx (informational) ์š”์ฒญ ์ˆ˜์‹ , ์ฒ˜๋ฆฌ ์ค‘ 2xx (successful) ์š”์ฒญ ์ •์ƒ ์ฒ˜๋ฆฌ 3xx (redirection) ์š”์ฒญ ์™„๋ฃŒ ์œ„ํ•ด ์ถ”๊ฐ€ ํ–‰๋™ ํ•„์š” 4xx (client error) ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜ 5xx (serve..

๐Ÿ“’ BackEnd/๐Ÿ“ HTTP

[HTTP] HTTP ๋ฉ”์„œ๋“œ

HTTP ๋ฉ”์„œ๋“œ HTTP ๋ฉ”์‹œ์ง€ ์ค‘์—์„œ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋งจ ์•ž๋ถ€๋ถ„์—๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ธฐ์ž…ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ๊ธฐ๋Œ€ํ•˜๋Š” ํ–‰๋™์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค๊ฑฐ๋‚˜, ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•  ๋•Œ, '์กฐํšŒ'์™€ '๋“ฑ๋ก'์„ ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์•ž๋ถ€๋ถ„์— ๋ฉ”์„œ๋“œ๋กœ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. HTTP ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ GET ๋ฆฌ์†Œ์Šค ์กฐํšŒ HEAD ๋ฆฌ์†Œ์Šค ์กฐํšŒ (Body ๋ถ€๋ถ„ ์ œ์™ธ) POST ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ƒˆ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ PUT ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋Œ€์ฒด, ์ƒˆ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ PATCH ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ DELETE ๋ฆฌ์†Œ์Šค ์‚ญ์ œ GET ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•œ๋‹ค. ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ๋กœ์™€ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•จ๊ป˜ ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์•„ ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ Body๋ถ€๋ถ„์— ๋‹ด์•„ ์ „๋‹ฌํ•ด์ค€๋‹ค. ..

๐Ÿ“’ BackEnd/๐Ÿ“ HTTP

[HTTP] HTTP ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

๐Ÿ“‘ ๐Ÿ”—๊น€์˜ํ•œ-๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹(์ธํ”„๋Ÿฐ)

๐Ÿ“’ BackEnd/๐Ÿ“ HTTP

[Network]URI / URL / URN

URI(Uniform Resource Identifier) "ํ†ตํ•ฉ ์ž์› ์‹๋ณ„์ž(Uniform Resource Identifier, URI)๋Š” ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ์ผํ•œ ์ฃผ์†Œ์ด๋‹ค" _์œ„ํ‚ค๋ฐฑ๊ณผ ์œ„์˜ ๋ง์€ ์œ„ํ‚ค๋ฐฑ๊ณผ์— ์„ค๋ช…๋˜์–ด์žˆ๋Š” URI์˜ ์„ค๋ช…์ด๋‹ค. ์ด๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€์–ด ์„ค๋ช…ํ•˜๋ฉด, URI๋Š” ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์ž์›์„ ์‹๋ณ„ํ•˜๋Š”(identifier) ๋ฌธ์ž์—ด์ด๋‹ค. ์ฆ‰, ๋ง ๊ทธ๋Œ€๋กœ '์‹๋ณ„์ž'์ธ๋ฐ, ์›นํŽ˜์ด์ง€(HTML๋ฌธ์„œ)๋‚˜ ์ด๋ฏธ์ง€, ์Œ์› ๋“ฑ์˜ ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์ž์›์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด ๊ทธ ์ž์›์„ ์ง€์ •ํ•˜์—ฌ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ž์›์— ์ด๋ฆ„(์ฃผ์†Œ)๋ถ™์—ฌ์ฃผ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•„์ฃผ ์‰ฝ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด URL๊ณผ URN์€ ๋ฌด์—‡์ด๋ƒ? URI์˜ ํ•˜์œ„ ๊ฐœ๋…์ธ๋ฐ, ํ•ด๋‹น ์ž์›์„ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•  ๊ฒƒ์ธ์ง€์— ๋”ฐ..

๋ฐ˜์‘ํ˜•
dana4056
'๐Ÿ“’ BackEnd' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก