๐ŸŒ Backend

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
ํ•ด๋‹น ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๋Š” ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฟ ํฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๊ณ , ํ˜„์žฌ๊นŒ์ง€ ๋ฐœ๊ธ‰๋œ ์ฟ ํฐ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์„ ์ฐฉ์ˆœ์œผ๋กœ ์ฟ ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋™์‹œ์„ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ์— ๋Œ€ํ•œ ํ˜ธ๊ธฐ์‹ฌ์ด์—ˆ๋‹ค.์šฐ์„  ์ƒํ™ฉ์€ ์ด๋Ÿฌํ•˜๋‹ค.์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.์„œ๋ฒ„๊ฐ€ 1๋Œ€์ธ ์ƒํ™ฉ์ด๋”๋ผ๋„, ์„ ์ฐฉ์ˆœ ์ฟ ํฐ ์ƒ์„ฑ ์ „์ฒด ๋กœ์ง์„ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.Redisson์˜ RLock๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ํ˜„์žฌ ์ƒํ™ฉ์— ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋จผ์ € 2๋ฒˆ, 3๋ฒˆ์ด ๋น„ํšจ์œจ์ ์ธ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (RLock์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”!)  ์ฟ ํฐ์˜ ์žฌ๊ณ ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์žฌ๊ณ ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด ์‹ ๊ทœ ์ฟ ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค๋ผ๋Š” ๊ด€์ ์—์„œ ๊ตณ์ด  ์žฌ๊ณ ์กฐํšŒ๋ถ€ํ„ฐ ์ €์žฅ๊นŒ์ง€์˜ ๋กœ์ง์„ Lock ๊ณผ์ •์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด Lock์ด ..
ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Local ํ™˜๊ฒฝ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋Š” JNDI๋ฅผ ์ด์šฉํ•˜์—ฌ Datasource๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. WAS์— DB Resource๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์ด์œ  ์ƒํ™ฉ) ์šฐ์„  ์—ฌ๋Ÿฌ๊ฐœ์˜ Datasource์— ์—ฐ๊ฒฐํ•ด์•ผ ํ–ˆ๊ณ , Jeus๋ผ๋Š” WAS์— DB Resource ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•ด ๋†“์€ ์ƒํƒœ์˜€๋‹ค. ์—ฌ๊ธฐ์„œ ์™œ WAS์— Data Resource๋ฅผ ์„ค์ •ํ•ด ๋†“์•˜๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. (๋‚˜๋„ ๊ทธ๋žฌ๋‹ค..) ๋ณดํ†ต ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์ˆœ์ˆ˜ JDBC๋‚˜ Spring์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ์ ์ธ DBCP๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค. ํ•˜์ง€๋งŒ, ์‹ค์ œ ์šด์˜ํ•  ๋•Œ๋Š” JDBC ์„ค์ •์„ WAS์—์„œ ํ•˜๋Š”๊ฒŒ ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ธ๋ ฅ์€ ๋”ฐ๋กœ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ WAS์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ ,..
์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ SessionFilter๋ฅผ GenericFilterBean๋‚˜ Filter๊ฐ€ ์•„๋‹Œ OncePerRequestFilter๋ฅผ extendsํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์™œ OncePerRequestFilter๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์ด ๊ธ€์—์„œ ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•œ๋‹ค. ์šฐ์„  ์œ„ ๊ทธ๋ฆผ์„ ํ†ตํ•ด Filter์˜ ๋™์ž‘ ์ˆœ์„œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. Filter๋Š” DispatcherServlet ์‹คํ–‰ ์ „ ํ›„์— ํ˜ธ์ถœ๋˜๋Š”๋ฐ, Filter๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด Filter๊ฐ€ ์ค‘๋ณต์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. Filter๊ฐ€ ์ค‘๋ณต ํ˜ธ์ถœ๋˜๋Š” Case Filter๋Š” Servlet๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋ฉฐ, Servlet์€ ์š”์ฒญ๋งˆ๋‹ค Servlet์„ ์ƒ์„ฑํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ๋’ค ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒ์„ฑํ•ด ๋‘” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์œ„ ..
๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฐ๊ฒฝ ํ”„๋กœ์ ํŠธ์—์„œ U2L(Unix To Linux) ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉฐ ์ตœ์‹  Linux์—์„œ ๊ถŒ์žฅํ•˜๊ณ  ๋˜ํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ ํ†ต๊ณผ๋ฅผ ์œ„ํ•ด JDK ๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ ค์•ผ ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์—์„œ, ํ•˜๋Š”๊น€์— ๊ด€๋ จ๋œ ์„œ๋ธŒ ์‹œ์Šคํ…œ์˜ Spring Boot ๋ฒ„์ „๋„ ๊ฐ™์ด ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ๊ณ , Migration ๊ณ„ํš์„ ์„ธ์šฐ๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฒ„์ „์€ 2.7.18๋ฒ„์ „์ด์—ˆ๊ณ , ๋‹จ๊ณ„๋ณ„๋กœ ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์„œ๋ธŒ ์‹œ์Šคํ…œ์ด๊ธฐ์— ์ฝ”๋“œ์–‘๋„ ๋งŽ์ง€ ์•Š๊ณ  ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ํฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์—ˆ๋˜ ๋ฒ„์ „๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ˆœ์„œ 1. ๋งˆ์ด๊ทธ..
Thread Process์˜ ์ž‘์—…์€ Thread ๋‹จ์œ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CPU Core๊ฐ€ Thread ๋‹จ์œ„๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ Thread๋Š” CPU Core์˜ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค. Thread๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ํ•˜๋‚˜์˜ Process์—์„œ ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค. Thread๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์  ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด Thread๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ฌธ์ œ์ ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ์ƒ์„ฑ ๋น„์šฉ์ด ํฐ Thread Thread๋Š” ์ƒ์„ฑ ๋น„์šฉ์ด ํฌ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด์„œ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž. Java๋Š” One-to-One Threading-Model๋กœ Thread๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. User Thre..
XSS(Cross-Site Scripting) ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ์ƒ์—์„œ SQL Injection๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ์— ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‹ค. ์ฃผ๋กœ, ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ์™€ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Cross Site Scripting์ด๋ผ๊ณ  ๋ช…์นญํ•œ๋‹ค. ํ•ด๋‹น ์ทจ์•ฝ์ ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ์ œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๋ฉด ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๋Š” ์‚ฝ์ž…๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ์„ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์„ฑํ•˜์—ฌ ํ•ดํ‚นํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์•…์˜์ ์ธ ์ปจํ…์ธ ๋กœ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. 1) ์ฟ ํ‚ค๋‚˜ ์„ธ์…˜ ์ •๋ณด ํƒˆ์ทจ 2) ์ ‘์†์ž๋ฅผ ์ž์‹ ์ด ์˜๋„ํ•œ ..
DevPoong
'๐ŸŒ Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก