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

๐Ÿ“ŒCS49

XSS(Cross-site Scripting) ๊ณต๊ฒฉ ๊ฐœ๋… Cross-site Scripting์˜ ์•ฝ์ž๋กœ ๊ฒŒ์‹œํŒ์ด๋‚˜ ์›น ๋ฉ”์ผ ๋“ฑ์— ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ์›น ํ•ดํ‚น ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๊ณต๊ฒฉ์ด๋‹ค. SQL injection๊ณผ ํ•จ๊ป˜ ์›น ์ƒ์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์ทจ์•ฝ์  ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•์˜ ์ผ์ข…์ด๋‹ค. ์ฃผ๋กœ CSRF๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… CSRF์™€ ํ˜ผ๋™๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋‚˜, XSS๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ณ , CSRF๋Š” ํŠน์ •ํ•œ ํ–‰๋™์„ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅด๋‹ค. (CSS๋Š” Cascading Style Sheets์˜ ์•ฝ์–ด๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด XSS๋ผ๊ณ  ํ•œ๋‹ค.) ์ข…๋ฅ˜ Reflected XSS Stored XSS 1. Reflected XSS ๋ณดํ†ต URL ํŒŒ๋ผ๋ฏธํ„ฐ(ํŠนํžˆ GET ๋ฐฉ์‹)์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์–ด ์„œ๋ฒ„์— .. 2021. 4. 25.
[Design Pattern] ํ”„๋ก์‹œ ํŒจํ„ด(Proxy Pattern) ๊ฐœ๋… ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก์‹œ๋ผ๋Š” ์šฉ์–ด๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์‚ฌ์šฉ ๋Œ€์ƒ ์‚ฌ์ด์˜ ๋Œ€๋ฆฌ ์—ญํ• ์„ ๋งก์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ•์„ ์ด์นญํ•˜๋Š” ๋ฐ˜๋ฉด, ๋””์ž์ธ ํŒจํ„ด์—์„œ ๋งํ•˜๋Š” ํ”„๋ก์‹œ ํŒจํ„ด์˜์€ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘์—์„œ ํƒ€๊นƒ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•˜๋ ค๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํ”„๋ก์‹œ ํŒจํ„ด์˜ ํ”„๋ก์‹œ๋Š” ํƒ€๊นƒ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํƒ€๊นƒ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๊ฐ€ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ผญ ํ•„์š”ํ•œ ์‹œ์ ๊นŒ์ง€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ์ข‹๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋ฏธ๋ฆฌ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ ํ”„๋ก์‹œ ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํƒ€๊นƒ์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋„˜๊ฒจ์•ผ ํ•˜๋Š”๋ฐ, ์‹ค์ œ ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ ๋Œ€์‹  ํ”„๋ก์‹œ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„.. 2021. 4. 25.
[DB] ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Transaction Isolation Level) ๊ฐœ๋… ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€(isolation level)์ด๋ž€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ฒ˜๋ฆฌ๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜๋ผ๋ฆฌ ์–ผ๋งˆ๋‚˜ ์„œ๋กœ ๊ณ ๋ฆฝ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ACID ํŠน์ง•๊ณผ ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์ด ๋…๋ฆฝ์ ์ธ ์ˆ˜ํ–‰์„ ํ•˜๋„๋ก Locking์„ ํ†ตํ•ด, ํŠธ๋žœ์žญ์…˜์ด DB๋ฅผ ๋‹ค๋ฃจ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ด€์—ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด์กฐ๊ฑด Locking์œผ๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์ˆ˜๋งŽ์€ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Locking์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ธ๋‹ค๋ฉด, ์ž˜๋ชป๋œ ๊ฐ’์ด ์ฒ˜๋ฆฌ๋  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์ธ Lock.. 2021. 4. 23.
[DB] ํŠธ๋žœ์žญ์…˜(Transaction) ๊ฐœ๋… ํŠธ๋žœ์žญ์…˜(Transaction)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์˜ ๋‹จ์œ„ ๋˜๋Š” ํ•œ๊บผ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ๋ณ‘ํ–‰ ์ œ์–ด ๋ฐ ํšŒ๋ณต ์ž‘์—… ์‹œ ์ฒ˜๋ฆฌ๋˜๋Š” ์ž‘์—…์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ์š”๊ตฌ ์‹œ ์‹œ์Šคํ…œ์ด ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ ๋ณ€ํ™˜ ๊ณผ์ •์˜ ์ž‘์—…๋‹จ์œ„์ด๋‹ค. ์ƒํƒœ๋ณ€ํ™” : SQL์งˆ์˜์–ด(SELECT | INSERT | UPDATE | DELETE)๋ฅผ ํ†ตํ•ด DB์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ ์ž‘์—… ๋‹จ์œ„ : ์ผ๋ จ์˜ ์—ฐ์‚ฐ(SQL ๋ช…๋ น๋ฌธ ์ง‘ํ•ฉ). ์‚ฌ๋žŒ์ด ์ •ํ•˜๋Š” ๊ธฐ์ค€(ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ)์— ๋”ฐ๋ผ ์ •์˜ํ•จ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์„ค๊ณ„๋ฅผ ์ž˜ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋งŽ์€ ์ด์ ์„ ๊ฐ€์ ธ๋‹ค.. 2021. 4. 23.
[Web] param vs query vs body ๊ฐœ๋… Request ๊ฐ์ฒด๋Š” API๋ฅผ ์ปจํŠธ๋กคํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋กœ ์•„๋ž˜ ์„ธ๊ฐ€์ง€๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. param query body req.param ์ฃผ์†Œ์— ํฌํ•จ๋œ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://naver.com/post/12345 ๋ผ๋Š” ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด 12345๋ฅผ ๋‹ด๋Š”๋‹ค. ์„œ๋ฒ„์—์„œ Path Variable ๋กœ ์นญํ•œ๋‹ค. req.query ์ฃผ์†Œ ๋ฐ”๊นฅ, ? ์ดํ›„์˜ ๋ณ€์ˆ˜๋ฅผ ๋‹ด๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://naver.com/post?post_id=12345 ์ผ ๊ฒฝ์šฐ Node.js๋ฅผ ๋‹ด๋Š”๋‹ค. &๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค. https://naver.com/post?post_id=1235&key=value ์„œ๋ฒ„์—์„œ Query parameter ๋กœ ์นญํ•œ๋‹ค. req.body XML, JSON, Multi.. 2021. 4. 18.
[DB] ์บ์‹œ, Redis ์บ์‹œ๋ž€? ํ•œ๋ฒˆ ์ฝ์€(์ฒ˜๋ฆฌํ•œ) ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ „์†ก,๊ฐฑ์‹ ,์‚ญ์ œํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ๋ณดํ†ต์€ ๋ฐ์ดํ„ฐ์˜ ๋ณด๊ด€์žฅ์†Œ๋กœ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ์—์„œ ์ •๋ณด๋ฅผ ์–ป์–ด์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ I/O์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ์žฌ๋ถ€ํŒ…๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ๋ผ์ง€๋Š” ์„ฑ๊ฒฉ์˜ ํœ˜๋ฐœ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์˜์†์ ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์—†๋Š”, ๋ง ๊ทธ๋Œ€๋กœ ์ž„์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ทธ ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋ฌผ๋ก  ์ •๋ณด์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๋ณ„๋„์˜ ๋””์Šคํฌ๋ฐฑ์—… ๋ฐ TTL๋“ฑ์˜ ์„ค์ •์œผ๋กœ ์˜๊ตฌ๋ณด๊ด€์ด๋‚˜ ์˜ค๋žœ๊ธฐ๊ฐ„ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ ์ด๋Ÿฐ ์„ค์ •๋“ค์ด ๊ผญ ํ•„์š”ํ•˜๋‹ค๋ฉด Cache๋ฅผ ์ ์šฉํ•˜๋Š”๊ฒŒ ๋งž๋Š”์ง€ ํ•œ ๋ฒˆ๋„ ํƒ€๋‹น์„ฑ์„ ๊ฒ€ํ† ํ•ด ๋ณด๋Š”๊ฒŒ ์ข‹๊ฒ ๋‹ค. ๋ชฉ์  ์„œ๋ฒ„๊ฐ„ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋กœ ์ธํ•ด ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜.. 2021. 4. 18.
[DB] Connection Pool ๊ฐœ๋… DBCP(Database Connection Pool)์€ ๋‹ค์ˆ˜์˜ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ Thread๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. (WAS์™€ DB ์„œ๋ฒ„๊ฐ„ ์ด์Šˆ) Connection Pool์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  WAS์—์„œ DB์„œ๋ฒ„์— ์ ‘๊ทผ์„ ์‹œ์ž‘ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋‹จ๊ณ„ DB ์„œ๋ฒ„ ์ ‘์†์„ ์œ„ํ•ด JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•œ๋‹ค. DB ์ ‘์† ์ •๋ณด์™€ DriverManager.getConnection() Method๋ฅผ ํ†ตํ•ด DB Connection ๊ฐ์ฒด๋ฅผ ์–ป๋Š”๋‹ค. Connection ๊ฐ์ฒด๋กœ ๋ถ€ํ„ฐ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ PreparedStatement ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค. executeQuery๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋กœ ResultSet ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋œ ๋ฆฌ์†Œ์Šค๋“ค์„ c.. 2021. 4. 18.
[Web] CORS(Cross-Origin Resource Sharing) ๊ฐœ๋… ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (Cross-Origin Resource Sharing, CORS)๋Š” ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ์ด๋‹ค. ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‹œ์ž‘ํ•œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค. ์ถœ์ฒ˜๋ž€? ๋„๋ฉ”์ธ(ํ˜ธ์ŠคํŠธ), ํ”„๋กœํ† ์ฝœ, ํฌํŠธ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ๋งํ•˜๋ฉฐ, ์ด๋•Œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ทธ ์ถœ์ฒ˜์—์„œ ์˜ฌ๋ฐ”๋ฅธ CORS ํ—ค๋”๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๊ฒฐ(ํ—ˆ์šฉ) ๋ฐฉ๋ฒ• XMLHttpRequest์™€ Fetch API๋Š” ๋™์ผ ์ถœ์ฒ˜.. 2021. 4. 18.
[DB] ์ •๊ทœํ™” ์ด์ƒ ํ˜„์ƒ(anomaly) ํ…Œ์ด๋ธ”๋‚ด์˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ฑ์— ์˜ํ•ด์„œ ๋ฐœ์ƒ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ํ˜„์ƒ. = ์• ํŠธ๋ฆฌ๋ทฐํŠธ๋“ค ๊ฐ„์— ์กด์žฌํ•˜๋Š” ์—ฌ๋Ÿฌ ์ข…์†๊ด€๊ณ„๋ฅผ ํ•˜๋‚˜์˜ ๋ฆด๋ ˆ์ด์…˜์— ํ‘œํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ํ˜„์ƒ ๊ฐฑ์‹  ์ด์ƒ, ์‚ฝ์ž… ์ด์ƒ, ์‚ญ์ œ ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐฑ์‹  ์ด์ƒ (Modification Anomaly) : ๋ฐ˜๋ณต๋œ ๋ฐ์ดํ„ฐ ์ค‘์— ์ผ๋ถ€๋ฅผ ๊ฐฑ์‹  ํ•  ์‹œ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์‚ฝ์ž… ์ด์ƒ (Insertion Anomaly) : ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•˜์ง€ ์•Š๊ณ ์„œ๋Š” ์–ด๋–ค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์‚ญ์ œ ์ด์ƒ (Deletion Anomaly) : ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ ์„œ๋Š” ์–ด๋–ค ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด์ƒ ํ˜„์ƒ์€ ์ข…์†๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋ถ„ํ•ดํ•˜๋Š” ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ๋ฐฉ์ง€ํ• .. 2021. 4. 11.