๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Computer Science/Network

์›น ๋ณด์•ˆ๊ณผ ํ†ต์‹  ๊ตฌ์กฐ

by hyebin (Helia) 2025. 12. 12.
๋ฐ˜์‘ํ˜•

1. ์ฟ ํ‚ค(Cookie)๋ž€?

HTTP๋Š” Stateless(๋ฌด์ƒํƒœ) ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ณด๋‚ธ ์‚ฌ๋žŒ์ด ์ด์ „์—๋„ ์š”์ฒญ์„ ๋ณด๋‚ธ ์‚ฌ๋žŒ์ธ์ง€๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์›น ์„œ๋น„์Šค๋Š” ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์œ ์ง€ ๋“ฑ ๊ธฐ์–ตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ฟ ํ‚ค์ž…๋‹ˆ๋‹ค.

1-1. ์ฟ ํ‚ค์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค.

  1. ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ Set-Cookie ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ฟ ํ‚ค๋ฅผ ๋‚ด๋ ค๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์ฟ ํ‚ค๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ž๋™์œผ๋กœ Cookie ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์•„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  4. ์„œ๋ฒ„๋Š” ์ด ์ฟ ํ‚ค๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์˜จ ์š”์ฒญ์ธ์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
// ์˜ˆ์‹œ ์‘๋‹ต ํ—ค๋”
Set-Cookie: sessionId=abc123; Path=/; HttpOnly; Secure

1-2. ์ฟ ํ‚ค์˜ ์ฃผ์š” ์†์„ฑ๋“ค

์ฟ ํ‚ค์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์†์„ฑ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Domain: ์–ด๋А ๋„๋ฉ”์ธ์— ์ด ์ฟ ํ‚ค๋ฅผ ์ „์†กํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Path: ์–ด๋А ๊ฒฝ๋กœ(URL)์—์„œ ์ด ์ฟ ํ‚ค๋ฅผ ์ „์†กํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Expires/Max-Age: ์ฟ ํ‚ค์˜ ์œ ํšจ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.(๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์œ ์ง€ํ• ์ง€, ์„ธ์…˜์ด ๋๋‚˜๋ฉด ์‚ญ์ œํ• ์ง€ ๋“ฑ)
  • Secure: https ์—ฐ๊ฒฐ์—์„œ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
  • HttpOnly: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ document.cookie๋กœ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. → xss ๊ณต๊ฒฉ์œผ๋กœ ์ฟ ํ‚ค๊ฐ€ ํƒˆ์ทจ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€

2. SameSite ์†์„ฑ

SameSite๋Š” CSRF ๊ฐ™์€ ๊ณต๊ฒฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ์ฟ ํ‚ค ์†์„ฑ์ž…๋‹ˆ๋‹ค.

์ฟ ํ‚ค๋ฅผ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์ „์†กํ• ์ง€๋ฅผ ์ œ์–ดํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

2-1. SameSite ์˜ต์…˜ ์ข…๋ฅ˜

  1. SameSite=Strict
    • ์™„์ „ํžˆ ๊ฐ™์€ ์‚ฌ์ดํŠธ์—์„œ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ๋งํฌ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋ณด์•ˆ์€ ๊ฐ€์žฅ ๊ฐ•ํ•˜์ง€๋งŒ UX๊ฐ€ ๋ถˆํŽธํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. SameSite=Lax
    • ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • GET ๋ฐฉ์‹์˜ ์ผ๋ฐ˜์ ์ธ ๋‚ด๋น„๊ฒŒ์ด์…˜(๋งํฌ ํด๋ฆญ, ์ฃผ์†Œ์ฐฝ ์ž…๋ ฅ ๋“ฑ)์—์„œ๋Š” ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ cross-site POST ์š”์ฒญ ๋“ฑ์€ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. SameSite=None; Secure
    • ์–ด๋–ค ์ถœ์ฒ˜์—์„œ ์˜ค๋“ ์ง€ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
    • ๋‹จ, ์ด ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ Secure(https ์ „์šฉ)๊ฐ€ ํ•จ๊ป˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ex) ํ”„๋ก ํŠธ ๋ฐฑ์—”๋“œ๊ฐ€ ๋„๋ฉ”์ธ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ์™ธ๋ถ€ ๋„๋ฉ”์ธ์—์„œ ๊ณตํ†ต ๋กœ๊ทธ์ธ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋“ฑ

3. CSFR(Cross-Site Request Forgery)

3-1. CSFR์ด๋ž€?

CSFR์€ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์†์—ฌ์„œ, ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์— ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ์ž…๋‹ˆ๋‹ค.

3-2. CSRF ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค ์˜ˆ์‹œ

  1. ์‚ฌ์šฉ์ž๊ฐ€ A์€ํ–‰ ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. → ๋ธŒ๋ผ์šฐ์ €์— sessionId ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์•„์›ƒํ•˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ํƒฌ์—์„œ ์•…์„ฑ ์‚ฌ์ดํŠธ B์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  3. ์•…์„ฑ ์‚ฌ์ดํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ˆจ์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="to" value="๊ณต๊ฒฉ์ž_๊ณ„์ขŒ">
  <input type="hidden" name="amount" value="1000000">
</form>

<script>
  document.forms[0].submit();
</script>
  1. ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” https://bank.com/transfer๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด์„œ ์ž๋™์œผ๋กœ ์€ํ–‰์˜ ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. ์€ํ–‰ ์„œ๋ฒ„ ์ž…์žฅ์—์„œ๋Š” ์ •์ƒ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

⇒ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ๋ˆ์ด ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

3-3. CSRF ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

  1. CSRF Token ์‚ฌ์šฉ (๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•)
    • ์„œ๋ฒ„๊ฐ€ ํผ์ด๋‚˜ ํŽ˜์ด์ง€๋ฅผ ๋‚ด๋ ค์ค„ ๋•Œ CSRF Token์„ ํ•จ๊ป˜ ๋‚ด๋ ค๋ณด๋ƒ…๋‹ˆ๋‹ค.
    • ์ด ํ† ํฐ์€ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๋žœ๋ค๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ์‹œ ์ด ํ† ํฐ์„ ๊ฐ™์ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๋Š” ์„ธ์…˜์— ์ €์žฅ๋œ ํ† ํฐ ๊ฐ’๊ณผ ์š”์ฒญ์— ๋‹ด๊ธด ํ† ํฐ ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์•…์„ฑ์‚ฌ์ดํŠธ๋Š” ์ด ํ† ํฐ ๊ฐ’์„ ์•Œ ์ˆ˜ ์—†์–ด ๊ณต๊ฒฉ์ด ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
  2. SameSite ์ฟ ํ‚ค ํ™œ์šฉ
    • ์„ธ์…˜ ์ฟ ํ‚ค์— SameSite=Lax ๋˜๋Š” Strict๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ๋ฐœ์ƒํ•œ ์š”์ฒญ์— ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋„๋ก ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด ๊ฒฝ์šฐ, ์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์ง„ POST ์š”์ฒญ ๋“ฑ์€ ์„ธ์…˜ ์ฟ ํ‚ค ์—†์ด ๋„์ฐฉํ•˜๋ฏ€๋กœ, ์„œ๋ฒ„์—์„œ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์š”์ฒญ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ค‘์š”ํ•œ ์š”์ฒญ์€ ์‚ฌ์šฉ์ž ์žฌํ™•์ธ ์ ˆ์ฐจ ์ถ”๊ฐ€
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ์†ก๊ธˆ, ๊ฒฐ์ œ, ํƒˆํ‡ด ๋“ฑ ์ค‘์š”ํ•œ ์ž‘์—…์ผ ๊ฒฝ์šฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์ž…๋ ฅ์ด๋‚˜ ์ถ”๊ฐ€ ์ธ์ฆ ๋“ฑ์„ ์š”๊ตฌํ•˜์—ฌ ๊ณต๊ฒฉ ๋‚œ์ด๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.

4. XSS(Cross-Site Scripting)

4-1. XSS๋ž€?

XSS๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด, ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€ ์•ˆ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ์–ด ๋‘๊ณ , ๊ทธ ํŽ˜์ด์ง€๋ฅผ ๋ณธ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜, ์•…์„ฑ ์‚ฌ์ดํŠธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ํ”ผ์‹ฑ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๋“ฑ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4-2. XSS ์ข…๋ฅ˜

  1. Strored XSS (์ €์žฅํ˜•)
    • ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„ DB์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ex) ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€, ํ”„๋กœํ•„ ์†Œ๊ฐœ ๋“ฑ
    • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ํ”ผํ•ด์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  2. Reflected XSS(๋ฐ˜์‚ฌํ˜•)
    • ์•…์„ฑ์Šคํฌ๋ฆฝํŠธ๊ฐ€ URL ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์— ๋‹ด๊ฒจ ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๊ฐ€ ์ด๊ฒƒ์„ ๋‹ค์‹œ ์‘๋‹ตํŽ˜์ด์ง€์— ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๋ณดํ†ต ํŠน์ • ๋งํฌ๋ฅผ ํด๋ฆญํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํ”ผํ•ด์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  3. DOM ๊ธฐ๋ฐ˜ XSS
    • ์„œ๋ฒ„ ์‘๋‹ต ์ž์ฒด๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ, ํ”„๋ก ํŠธ์—”๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ œ๋Œ€๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

4-3. XSS ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

  1. ์ถœ๋ ฅ ์‹œ Escape / Encoding ์ฒ˜๋ฆฌ
    • HTML์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ถœ๋ ฅํ•  ๋•Œ, < → &lt; , > → &gt; , " → &quot; ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    • ํ…œํ”Œ๋ฆฟ ์—”์ง„(Thymeleaf, Mustache ๋“ฑ)์€ ๋ณดํ†ต ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฐ ์ฒ˜๋ฆฌ๋ฅผ ๋„์™€์ค๋‹ˆ๋‹ค.
  2. ์ž…๋ ฅ ๊ฒ€์ฆ(Validation)
    • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ(์˜ˆ: ๋Œ“๊ธ€, ์†Œ๊ฐœ๊ธ€ ๋“ฑ)์— ๋Œ€ํ•ด ํŠน์ • ํƒœ๊ทธ๋ฅผ ์ œํ•œํ•˜๊ฑฐ๋‚˜, ๊ธธ์ด ์ œํ•œ ๋“ฑ์„ ๊ฑธ์–ด ๋‘ก๋‹ˆ๋‹ค.
  3. HttpOnly ์ฟ ํ‚ค ์‚ฌ์šฉ
    • ์„ธ์…˜ ์ฟ ํ‚ค์— HttpOnly๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • XSS๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ฟ ํ‚ค ํƒˆ์ทจ๋ฅผ ์–ด๋А ์ •๋„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. CSP(Content Security Policy) ์„ค์ •
    • ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ “์–ด๋””์—์„œ ์˜จ ์Šคํฌ๋ฆฝํŠธ๋งŒ ์‹คํ–‰ํ•ด๋„ ๋˜๋Š”์ง€”๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ณด์•ˆ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ:
      • script-src 'self' → ํ˜„์žฌ ๋„๋ฉ”์ธ์—์„œ ์˜จ ์Šคํฌ๋ฆฝํŠธ๋งŒ ํ—ˆ์šฉ
      • ์ž„์˜์˜ ์ธ๋ผ์ธ ์Šคํฌ๋ฆฝํŠธ, ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐจ๋‹จ

5. Reverse Proxy / Load Balancer ๊ตฌ์กฐ

5-1. Proxy vs Reverse Proxy

1) ์ผ๋ฐ˜ Proxy (Forward Proxy)

  • ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ์žˆ๋Š” ๋Œ€๋ฆฌ์ธ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ์„œ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ๋Œ€์‹  ์ธํ„ฐ๋„ท์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ ํšŒ์‚ฌ ๋‚ด๋ถ€๋ง, ํ•™๊ต, ๊ฒ€์—ด ํšŒํ”ผ, ์บ์‹ฑ ๋“ฑ์˜ ๋ชฉ์ ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2) Reverse Proxy (์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ)

  • ์„œ๋ฒ„ ์ชฝ์— ์žˆ๋Š” ๋Œ€๋ฆฌ์ธ
  • ํด๋ผ์ด์–ธํŠธ๋Š” Reverse Proxy๋ฅผ “์ง„์งœ ์„œ๋ฒ„”์ฒ˜๋Ÿผ ๋ด…๋‹ˆ๋‹ค.
  • Reverse Proxy๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ex) Nginx, Apache HTTP Server, HAProxy ๋“ฑ

Reverse Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ :

  • ์‹ค์ œ ์„œ๋ฒ„ IP๋ฅผ ์ˆจ๊ธฐ๊ณ  ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • SSL/TLS(HTTPS) ์ฒ˜๋ฆฌ(TLS ์ข…๋ฃŒ)๋ฅผ ํ”„๋ก์‹œ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋’ค์ชฝ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ •์  ํŒŒ์ผ(์ด๋ฏธ์ง€, CSS, JS)์„ ์บ์‹ฑํ•˜์—ฌ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • → ์ด๋•Œ Load Balancer ์—ญํ• ์„ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

5-2. Load Balancer(๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ)

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋“ค์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ณจ๊ณ ๋ฃจ ๋‚˜๋ˆ„์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์„œ๋ฒ„๊ฐ€ 1๋Œ€์ผ ๋•Œ๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋ฉด ๋ฒ„ํ‹ธ ์ˆ˜ ์—†์ง€๋งŒ, 3๋Œ€๋กœ ๋‚˜๋ˆ„๋ฉด ๊ฐ๊ฐ์˜ ์„œ๋ฒ„์— 1/3์”ฉ๋งŒ ๋ถ€๋‹ด์ด ๊ฐ€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ:

  1. ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ
    • Round Robin, Least Connections ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค.
  2. Health Check
    • ํŠน์ • ์„œ๋ฒ„๊ฐ€ ์ฃฝ์—ˆ๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃฝ์€ ์„œ๋ฒ„๋กœ๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. Failover
    • ์ผ๋ถ€ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์„œ๋น„์Šค ์ „์ฒด ์žฅ์• ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.
  4. ํ™•์žฅ์„ฑ
    • ์„œ๋ฒ„๋ฅผ ์ˆ˜ํ‰ ํ™•์žฅ(Scaling Out) ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

5-3. Reverse Proxy์™€ Load Balancer์˜ ๊ด€๊ณ„

  • Reverse Proxy๋Š” ํด๋ผ์ด์–ธํŠธ ↔ ์„œ๋ฒ„ ์‚ฌ์ด์— ์žˆ๋Š” ์ค‘๊ฐ„ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
  • ์ด Reverse Proxy๊ฐ€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜๋ฉด Load Balancer ์—ญํ• ์„ ํ•˜๋Š” Reverse Proxy๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ˜„์—…์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์ด ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ → Nginx(Reverse Proxy + Load Balancer) → ์—ฌ๋Ÿฌ ๋Œ€์˜ WAS(Tomcat, Spring Boot ๋“ฑ)
๋ฐ˜์‘ํ˜•

'๐Ÿ“š Computer Science > Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ธ์ฆ/์ธ๊ฐ€ (Authentication & Authorization)  (0) 2025.12.05
HTTP์™€ ์›น ํ†ต์‹  ๊ธฐ์ดˆ  (0) 2025.11.26