๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

36์ผ์ฐจ. IT ๊ฐœ๋… ์ •๋ฆฌ

by GreenJin_S2 2025. 11. 27.


๐Ÿ•ธ๏ธ ํฌ๋กค๋ง์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํฌ๋กค๋ง ๋˜๋Š” **์›น ํฌ๋กค๋ง(Web Crawling)**์€ ์ž๋™ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ์›น์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ์„ ํฌ๋กค๋Ÿฌ(Crawler) ๋˜๋Š” **์ŠคํŒŒ์ด๋”(Spider)**๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

ํฌ๋กค๋Ÿฌ๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค:

  1. ์‹œ์ž‘ URL ๋ชฉ๋ก์„ ๊ฐ€์ง€๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•ด๋‹น URL์˜ HTML ๋ฌธ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์šด๋กœ๋“œํ•œ ๋ฌธ์„œ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค (์ด ์ถ”์ถœ ๊ณผ์ •์„ **์Šคํฌ๋ ˆ์ดํ•‘(Scraping)**์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค).
  4. ๋ฌธ์„œ ๋‚ด์— ์žˆ๋Š” **์ƒˆ๋กœ์šด ํ•˜์ดํผ๋งํฌ(URL)**๋ฅผ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.
  5. ์ด ์ƒˆ๋กœ์šด URL์„ ํƒ์ƒ‰ํ•  ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ  ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋กค๋ง์€ ๊ฒ€์ƒ‰ ์—”์ง„ ์ธ๋ฑ์‹ฑ, ๋ฐ์ดํ„ฐ ๋ถ„์„, ๊ฐ€๊ฒฉ ๋น„๊ต, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํŒŒ์ด์ฌ์€ ์›น ํฌ๋กค๋ง ๋ฐ ๋ฐ์ดํ„ฐ ์Šคํฌ๋ ˆ์ดํ•‘์— ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ 3๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. Requests

  • ์—ญํ• : HTTP ์š”์ฒญ์„ ๋ณด๋‚ด ์›นํŽ˜์ด์ง€์˜ HTML์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š”(๋‹ค์šด๋กœ๋“œํ•˜๋Š”) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ํฌ๋กค๋ง ์ž‘์—…์—์„œ ํ•„์ˆ˜์ ์ธ ๊ธฐ์ดˆ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2. Beautiful Soup (bs4)

  • ์—ญํ• : Requests ๋“ฑ์œผ๋กœ ๋ฐ›์•„์˜จ HTML ๋ฐ XML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑ(Parsing)ํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: HTML ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํƒœ๊ทธ ์ด๋ฆ„, ์†์„ฑ ๋“ฑ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ํ•œ ์Šคํฌ๋ ˆ์ดํ•‘ ์ž‘์—…์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

3. Scrapy

  • ์—ญํ• : ์ „๋ฌธ์ ์ธ ๋Œ€๊ทœ๋ชจ ํฌ๋กค๋ง ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ๋น„๋™๊ธฐ(Asynchronous) ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํฌ๋กค๋ง, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ €์žฅ ๋“ฑ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค์ • ํŒŒ์ผ, ๋ฏธ๋“ค์›จ์–ด, ํŒŒ์ดํ”„๋ผ์ธ ๋“ฑ ๋ณต์žกํ•˜์ง€๋งŒ ์ฒด๊ณ„์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๊ธฐํƒ€ ๋ณด์กฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Selenium

  • ์—ญํ• : ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ์ž๋™ํ™” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript)๋กœ ๋™์ ์œผ๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ํ˜„๋Œ€์ ์ธ ์›น์‚ฌ์ดํŠธ๋ฅผ ํฌ๋กค๋งํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. (Beautiful Soup, Requests๋งŒ์œผ๋กœ๋Š” ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.)

๐Ÿ”Ž ํฌ๋กค๋ง์˜ ์ข…๋ฅ˜ (์šฉ๋„๋ณ„ ๋ถ„๋ฅ˜)

ํฌ๋กค๋ง์˜ ์ข…๋ฅ˜๋Š” ์ฃผ๋กœ ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋ฒ”์šฉ ํฌ๋กค๋ง (General-Purpose Crawling)

  • ๋ชฉ์ : ์›น ์ „์ฒด๋ฅผ ํฌ๊ด„์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ์ธ๋ฑ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: Google, Naver์™€ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์ด ์‚ฌ์šฉํ•˜๋Š” ํฌ๋กค๋ง์ž…๋‹ˆ๋‹ค. ์›น์ƒ์˜ ๋ฐฉ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2. ํŠน์ • ๋Œ€์ƒ ํฌ๋กค๋ง (Focused/Topical Crawling)

  • ๋ชฉ์ : ํŠน์ • ์ฃผ์ œ๋‚˜ ๋„๋ฉ”์ธ์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ง‘์ค‘์ ์œผ๋กœ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๋‰ด์Šค ํฌ๋กค๋ง: ํŠน์ • ์–ธ๋ก ์‚ฌ๋‚˜ ์ฃผ์ œ์˜ ๋‰ด์Šค ๊ธฐ์‚ฌ๋งŒ ๋ชจ์œผ๋Š” ๊ฒฝ์šฐ.
    • ์‡ผํ•‘๋ชฐ ๊ฐ€๊ฒฉ ๋น„๊ต: ์—ฌ๋Ÿฌ ์‡ผํ•‘๋ชฐ์—์„œ ํŠน์ • ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ ์ •๋ณด๋งŒ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒฝ์šฐ.

3. ์ฆ๋ถ„ ํฌ๋กค๋ง (Incremental Crawling)

  • ๋ชฉ์ : ์ด์ „์— ํฌ๋กค๋งํ•œ ์›นํŽ˜์ด์ง€ ์ค‘ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„๋งŒ์„ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ์ด๋ฏธ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•œ ํ›„, ๋งค์ผ ํ˜น์€ ๋งค์‹œ๊ฐ„ ์ƒˆ๋กœ์šด ์ •๋ณด๋งŒ ํšจ์œจ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

4. ์‹ฌ์ธต ํฌ๋กค๋ง (Deep Crawling)

  • ๋ชฉ์ : ์›น์‚ฌ์ดํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๊นŠ์ˆ™์ด ์ˆจ๊ฒจ์ ธ ์žˆ์–ด ์ผ๋ฐ˜์ ์ธ ๋งํฌ ํƒ์ƒ‰๋งŒ์œผ๋กœ๋Š” ๋„๋‹ฌํ•˜๊ธฐ ์–ด๋ ค์šด ํŽ˜์ด์ง€(์˜ˆ: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ํŽ˜์ด์ง€)๊นŒ์ง€ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ํŠน์ • ๊ฒ€์ƒ‰์ฐฝ์— ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๋„ค์ด์…˜(Pagination)์„ ์กฐ์ž‘ํ•˜๋ฉฐ ์ˆจ๊ฒจ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ•ธ๏ธ ํฌ๋กค๋ง์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

**ํฌ๋กค๋ง(crawling)**์€ ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ๊ณต๊ฐœ ์›นํŽ˜์ด์ง€์˜ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ๋žŒ์ด ์ผ์ผ์ด ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹ , ํ”„๋กœ๊ทธ๋žจ(ํฌ๋กค๋Ÿฌ·๋ด‡)์ด ์›นํŽ˜์ด์ง€๋ฅผ ์ฝ๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

โžก๏ธ ์˜ˆ: ๋‰ด์Šค ์ œ๋ชฉ ์ˆ˜์ง‘, ์‡ผํ•‘๋ชฐ ๊ฐ€๊ฒฉ ๋น„๊ต, ๋ธ”๋กœ๊ทธ ๊ธ€ ๋‚ด์šฉ ๋ถ„์„ ๋“ฑ


๐Ÿ ํŒŒ์ด์ฌ์—์„œ์˜ ํฌ๋กค๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?

ํŒŒ์ด์ฌ์€ ํฌ๋กค๋งํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” **๋„๊ตฌ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)**๊ฐ€ ๋งค์šฐ ํ’๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
HTML ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ (parse), ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ณจ๋ผ๋‚ด๊ณ , ์ž๋™์œผ๋กœ ํŽ˜์ด์ง€ ์ด๋™ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ฆ ํŒŒ์ด์ฌ ํฌ๋กค๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์š” ์ข…๋ฅ˜

์•„๋ž˜๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์—ญํ• ๋ณ„๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

### 1) ์›นํŽ˜์ด์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ(HTTP ์š”์ฒญ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์„ค๋ช…
requests ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” HTTP ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ์‚ฌ์šฉ๋ฒ•์ด ์‰ฝ๊ณ  ์ง๊ด€์ .
httpx ๋น„๋™๊ธฐ ์š”์ฒญ๋„ ์‰ฝ๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅ.

### 2) HTML ๋ถ„์„(ํŒŒ์‹ฑ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์„ค๋ช…
BeautifulSoup(bs4) HTML/XML ๋ฌธ์„œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋Œ€ํ‘œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
lxml ๋งค์šฐ ๋น ๋ฅธ ํŒŒ์‹ฑ ์„ฑ๋Šฅ์„ ์ œ๊ณต.
html5lib ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ HTML์„ ํ•ด์„.

### 3) ์ž๋™ ๋ธŒ๋ผ์šฐ์ € ์ œ์–ด(๋™์  ํฌ๋กค๋ง)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ๋Š” ๋‹จ์ˆœ ์š”์ฒญ์œผ๋กœ๋Š” ๋‚ด์šฉ์ด ์•ˆ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง์ ‘ ๋„์›Œ ํฌ๋กค๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์„ค๋ช…
Selenium ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ž‘ํ•˜๋Š” ๋„๊ตฌ. (Chrome, Firefox ๋“ฑ)
Playwright ๋งค์šฐ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์ตœ์‹  ์ž๋™ํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
Puppeteer(Pyppeteer) ํฌ๋กฌ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”(ํŒŒ์ด์ฌ ํฌํŠธ ๋ฒ„์ „).

### 4) ๋Œ€๊ทœ๋ชจ ํฌ๋กค๋ง/ํ”„๋ ˆ์ž„์›Œํฌ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์„ค๋ช…
Scrapy ์ „๋ฌธ์ ์ธ ํฌ๋กค๋ง·์Šคํฌ๋ž˜ํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ. ๋Œ€๊ทœ๋ชจ ์ˆ˜์ง‘์— ์ตœ์ ํ™”.
Requests-HTML ๊ฐ„๋‹จํ•œ ํฌ๋กค๋ง + ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ Œ๋”๋ง ์ง€์›.

๐Ÿ“Œ ์ •๋ฆฌ

  • ํฌ๋กค๋ง → ์›น์—์„œ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•˜๋Š” ๊ธฐ์ˆ 
  • ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ → ํฌ๋กค๋ง์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ ๋ชจ์Œ
  • ์ข…๋ฅ˜๋Š” ์ •ํ™•ํžˆ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋ณดํ†ต
    → ์š”์ฒญ, ํŒŒ์‹ฑ, ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”, ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋ ‡๊ฒŒ ํฌ๊ฒŒ 4๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆ”

 


๐Ÿ”’ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์ฃผ์š” ์—ญํ• 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์ฃผ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์ด๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ์˜ ๊ธฐ๋ณธ ์ถ•์ž…๋‹ˆ๋‹ค.

1. ์ธ์ฆ (Authentication)

  • ์ •์˜: ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ **์ œ๊ณตํ•œ ์ž๊ฒฉ ์ฆ๋ช…(ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ)**์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์‹ ์›์„ ์ž…์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ์ด๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ์ž ์„ธ์…˜ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ์ธ๊ฐ€ (Authorization)

  • ์ •์˜: ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ž์›(URL, ๋ฐ์ดํ„ฐ)์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • ๊ด€๋ฆฌ์ž(Admin) ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ '/admin' ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž(User) ๊ถŒํ•œ์€ '/mypage'์—๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์ž‘๋™ ๋ฐฉ์‹ (ํ•„ํ„ฐ ์ฒด์ธ)

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” **์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ(Servlet Filter)**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— **์š”์ฒญ(Request)**์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์ด ์š”์ฒญ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ๋“ค๋กœ ๊ตฌ์„ฑ๋œ **ํ•„ํ„ฐ ์ฒด์ธ(Filter Chain)**์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ํ•„ํ„ฐ๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด ์ธ์ฆ, ์ธ๊ฐ€, ์„ธ์…˜ ๊ด€๋ฆฌ, CSRF ๋ฐฉ์–ด ๋“ฑ ํŠน์ • ๋ณด์•ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋งŒ์•ฝ ํ•„ํ„ฐ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ณด์•ˆ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ–ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด, ํ•ด๋‹น ์š”์ฒญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋กœ ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์ฐจ๋‹จ๋˜๊ณ  ์ ์ ˆํ•œ ์‘๋‹ต(์˜ˆ: 401 Unauthorized, 403 Forbidden)์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

โœจ ํ•ต์‹ฌ ์žฅ์ 

  • ์„ค์ • ๊ธฐ๋ฐ˜ ๋ณด์•ˆ: ๋Œ€๋ถ€๋ถ„์˜ ๋ณด์•ˆ ์„ค์ •์„ XML์ด๋‚˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด์•ˆ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
  • ํ‘œ์ค€ํ™”๋œ ๊ธฐ๋Šฅ: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” CSRF(Cross-Site Request Forgery), XSS(Cross-Site Scripting) ๊ฐ™์€ ๊ณต๊ฒฉ ๋ฐฉ์–ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ: ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹(ํผ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ, OAuth 2.0, JWT ๋“ฑ)์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.