λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ›οΈ Architecture

[가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초] 9μž₯ μ›Ή 크둀러 섀계

by GroovyArea 2023. 3. 12.

μ›Ή ν¬λ‘€λŸ¬λž€ 검색 μ—”μ§„μ—μ„œ 널리 μ“°λŠ” 기술둜, 웹에 μƒˆλ‘œ μ˜¬λΌμ˜€κ±°λ‚˜ κ°±μ‹ λœ μ½˜ν…μΈ λ₯Ό μ°Ύμ•„λ‚΄λŠ” 것이 주된 λͺ©μ μ΄λ‹€.

μ›Ή ν¬λ‘€λŸ¬λŠ” λͺ‡ 개 μ›ΉνŽ˜μ΄μ§€μ—μ„œ μ‹œμž‘ν•˜μ—¬ κ·Έ 링크λ₯Ό 따라 λ‚˜κ°€λ©΄μ„œ μƒˆλ‘œμš΄ μ½˜ν…μΈ λ₯Ό μˆ˜μ§‘ν•œλ‹€.

 

  • 검색 μ—”μ§„ 인덱싱 : 크둀러의 κ°€μž₯ 보편적인 μš©λ‘€. ν¬λ‘€λŸ¬λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό λͺ¨μ•„ 검색 엔진을 μœ„ν•œ 둜컬 인덱슀λ₯Ό λ§Œλ“ λ‹€. μΌλ‘€λ‘œ Googlebot은 ꡬ글 검색 엔진이 μ‚¬μš©ν•˜λŠ” μ›Ή ν¬λ‘€λŸ¬λ‹€.
  • μ›Ή 아카이빙 : λ‚˜μ€‘μ— μ‚¬μš©ν•  λͺ©μ μœΌλ‘œ μž₯κΈ°λ³΄κ΄€ν•˜κΈ° μœ„ν•΄ μ›Ήμ—μ„œ 정보λ₯Ό λͺ¨μœΌλŠ” μ ˆμ°¨μ΄λ‹€.
  • μ›Ή λ§ˆμ΄λ‹ : μ›Ή λ§ˆμ΄λ‹μ„ 톡해 μΈν„°λ„·μ—μ„œ μœ μš©ν•œ 지식을 λ„μΆœν•΄ λ‚Ό 수 μžˆλ‹€.
  • μ›Ή λͺ¨λ‹ˆν„°λ§ : 크둀러λ₯Ό μ‚¬μš©ν•˜λ©΄ μΈν„°λ„·μ—μ„œ μ €μž‘κΆŒμ΄λ‚˜ μƒν‘œκΆŒμ΄ μΉ¨ν•΄λ˜λŠ” 사둀λ₯Ό λͺ¨λ‹ˆν„°λ§ ν•  수 μžˆλ‹€. μ΄λ‘€λ‘œ λ””μ§€λ§ˆν¬μ‚¬λŠ” μ›Ήν¬λ‘€λŸ¬λ₯Ό μ‚¬μš©ν•΄ ν•΄μ νŒ μ €μž‘λ¬Όμ„ μ°Ύμ•„λ‚΄μ„œ λ³΄κ³ ν•œλ‹€.

1단계

μ›Ή 크둀러의 κΈ°λ³Έ μ•Œκ³ λ¦¬μ¦˜

  1. URL 집합이 μž…λ ₯으둜 μ£Όμ–΄μ§€λ©΄ ν•΄λ‹Ή URL듀이 κ°€λ¦¬ν‚€λŠ” λͺ¨λ“  μ›ΉνŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ‘œλ“œν•œλ‹€.
  2. λ‹€μš΄λ°›μ€ μ›Ή νŽ˜μ΄μ§€μ—μ„œ URL듀을 μΆ”μΆœν•œλ‹€.
  3. μΆ”μΆœλœ URL듀을 λ‹€μš΄λ‘œλ“œν•  URL λͺ©λ‘μ— μΆ”κ°€ν•˜κ³  μœ„μ˜ 과정을 μ²˜μŒλΆ€ν„° λ°˜λ³΅ν•œλ‹€.

쒋은 μ›Ή ν¬λ‘€λŸ¬κ°€ λ§Œμ‘±μ‹œμΌœμ•Όν•  속성

- 규λͺ¨ ν™•μž₯μ„± : μ›Ήμ—λŠ” μˆ˜μ‹­μ–΅ 개의 νŽ˜μ΄μ§€κ°€ μ‘΄μž¬ν•œλ‹€. λ”°λΌμ„œ 병행성을 ν™œμš©ν•˜λ©΄ 보닀 효과적으둜 크둀링을 ν•  수 μžˆμ„ 것이닀.
- μ•ˆμ •μ„±(robustness) : 웹은 ν•¨μ •μœΌλ‘œ κ°€λ“ν•˜λ‹€. 잘λͺ» μž‘μ„±λœ HTML, 아무 λ°˜μ‘ μ—†λŠ” μ„œλ²„, μž₯μ• , μ•…μ„± μ½”λ“œκ°€ λΆ™μ–΄μžˆλŠ” 링크 등이 κ·Έ 쒋은 μ˜ˆλ‹€. ν¬λ‘€λŸ¬λŠ” 이런 비정상적 μž…λ ₯μ΄λ‚˜ ν™˜κ²½μ— 잘 λŒ€μ‘ν•  수 μžˆμ–΄μ•Όν•œλ‹€.
- 예절(politeness) : ν¬λ‘€λŸ¬λŠ” μˆ˜μ§‘ λŒ€μƒ μ›Ή μ‚¬μ΄νŠΈμ— 짧은 μ‹œκ°„ λ™μ•ˆ λ„ˆλ¬΄ λ§Žμ€ μš”μ²­μ„ λ³΄λ‚΄μ„œλŠ” μ•ˆλœλ‹€.
- ν™•μž₯μ„±(extensibility) : μƒˆλ‘œμš΄ ν˜•νƒœμ˜ μ½˜ν…μΈ λ₯Ό μ§€μ›ν•˜κΈ°κ°€ μ‰¬μ›Œμ•Όν•œλ‹€.

2단계

μ‹œμž‘ URL μ§‘ν•©

μ‹œμž‘ URL 집합은 μ›Ή ν¬λ‘€λŸ¬κ°€ 크둀링을 μ‹œμž‘ν•˜λŠ” μΆœλ°œμ μ΄λ‹€. 예λ₯Ό λ“€μ–΄, μ–΄λ–€ λŒ€ν•™ μ›Ήμ‚¬μ΄νŠΈλ‘œλΆ€ν„° μ°Ύμ•„ λ‚˜κ°ˆ 수 μžˆλŠ” λͺ¨λ“  μ›Ή νŽ˜μ΄μ§€λ₯Ό ν¬λ‘€λ§ν•˜λŠ” κ°€μž₯ 직관적인 방법은 ν•΄λ‹Ή λŒ€ν•™μ˜ 도메인 이름이 뢙은 λͺ¨λ“  νŽ˜μ΄μ§€μ˜ URL을 μ‹œμž‘ URL둜 μ“°λŠ” 것이닀.

전체 웹을 크둀링해야 ν•˜λŠ” κ²½μš°μ—λŠ” μ‹œμž‘ URL을 κ³ λ₯Ό λ•Œ μ’€ 더 창의적일 ν•„μš”κ°€ μžˆλ‹€. ν¬λ‘€λŸ¬κ°€ κ°€λŠ₯ν•œ ν•œ λ§Žμ€ 링크λ₯Ό 탐색할 수 μžˆλ„λ‘ ν•˜λŠ” URL을 κ³ λ₯΄λŠ” 것이 λ°”λžŒμ§ν•  것이닀.

λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œ

ν˜„λŒ€μ  μ›Ή ν¬λ‘€λŸ¬λŠ” 크둀링 μƒνƒœλ₯Ό (1) λ‹€μš΄λ‘œλ“œ ν•  URL, (2) λ‹€μš΄λ‘œλ“œλœ URL둜 λ‚˜λˆˆλ‹€. 이 쀑 ‘λ‹€μš΄λ‘œλ“œν•  URL’을 μ €μž₯ κ΄€λ¦¬ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ―Έμˆ˜μ§‘ URL μ €μž₯μ†ŒλΌκ³  λΆ€λ₯Έλ‹€. (FIFO 큐)

HTML λ‹€μš΄λ‘œλ”

μΈν„°λ„·μ—μ„œ μ›Ή νŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ. λ‹€μš΄λ‘œλ“œν•  νŽ˜μ΄μ§€μ˜ URL은 λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œκ°€ μ œκ³΅ν•œλ‹€.

도메인 이름 λ³€ν™˜κΈ°

μ›Ή νŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ°›μœΌλ €λ©΄ URL을 IPμ£Όμ†Œλ‘œ λ³€ν™˜ν•˜λŠ” μ ˆμ°¨κ°€ ν•„μš”ν•˜λ‹€. HTML λ‹€μš΄λ‘œλ”λŠ” 도메인 이름 λ³€ν™˜κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ URL에 λŒ€μ‘λ˜λŠ” IPμ£Όμ†Œλ₯Ό μ•Œμ•„λ‚Έλ‹€.

μ½˜ν…μΈ  νŒŒμ„œ

μ›ΉνŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λ©΄ νŒŒμ‹±κ³Ό 검증 절차λ₯Ό κ±°μ³μ•Όν•œλ‹€. μ΄μƒν•œ μ›Ή νŽ˜μ΄μ§€λŠ” 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆλŠ”λ°λ‹€ μ €μž₯ κ³΅κ°„λ§Œ λ‚­λΉ„ν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€. 크둀링 μ„œλ²„ μ•ˆμ— μ½˜ν…μΈ  νŒŒμ„œλ₯Ό κ΅¬ν˜„ν•˜λ©΄ 크둀링 과정이 λŠλ €μ§€κ²Œ 될 수 μžˆμœΌλ―€λ‘œ, λ…λ¦½λœ μ»΄ν¬λ„ŒνŠΈλ‘œ λ§Œλ“€μ—ˆλ‹€.

쀑볡 μ½˜ν…μΈ μΈκ°€?

연ꡬ 결과에 λ”°λ₯΄λ©΄ 29% κ°€λŸ‰μ˜ μ›ΉνŽ˜μ΄μ§€ μ½˜ν…μΈ λŠ” 쀑볡이닀. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 자료ꡬ쑰λ₯Ό λ„μž…ν•˜μ—¬ 데이터 쀑볡을 쀄이고 데이터 μ²˜λ¦¬μ— μ†Œμš”λ˜λŠ” μ‹œκ°„μ„ 쀄인닀.

효과적인 방법은 μ›Ή νŽ˜μ΄μ§€μ˜ ν•΄μ‹œ 값을 λΉ„κ΅ν•˜λŠ” 것이닀.

μ½˜ν…μΈ  μ €μž₯μ†Œ

μ½˜ν…μΈ  μ €μž₯μ†ŒλŠ” HTML λ¬Έμ„œλ₯Ό λ³΄κ΄€ν•˜λŠ” μ‹œμŠ€ν…œμ΄λ‹€. μ €μž₯μ†Œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 쓰일 κΈ°μˆ μ„ κ³ λ₯Ό λ•ŒλŠ” μ €μž₯ν•  λ°μ΄ν„°μ˜ μœ ν˜•, 크기, μ €μž₯μ†Œ μ ‘κ·Ό λΉˆλ„, λ°μ΄ν„°μ˜ 유효 κΈ°κ°„ 등을 μ’…ν•©μ μœΌλ‘œ κ³ λ €ν•΄μ•Όν•œλ‹€.

- 데이터 양이 λ„ˆλ¬΄ λ§ŽμœΌλ―€λ‘œ λŒ€λΆ€λΆ„μ˜ μ½˜ν…μΈ λŠ” λ””μŠ€ν¬μ— μ €μž₯ν•œλ‹€.
- μΈκΈ°μžˆλŠ” μ½˜ν…μΈ λŠ” λ©”λͺ¨λ¦¬μ— 두어 μ ‘κ·Ό μ§€μ—°μ‹œκ°„μ„ 쀄일것이닀.

URL μΆ”μΆœκΈ°

URL μΆ”μΆœκΈ°λŠ” HTML νŽ˜μ΄μ§€λ₯Ό νŒŒμ‹±ν•˜μ—¬ 링크듀을 κ³¨λΌλ‚΄λŠ” 역할을 ν•œλ‹€. μƒλŒ€κ²½λ‘œλŠ” λͺ¨λ‘ μ ˆλŒ€κ²½λ‘œλ‘œ λ³€ν™˜ν•œλ‹€.

URL ν•„ν„°

νŠΉμ •ν•œ μ½˜ν…μΈ  νƒ€μž…μ΄λ‚˜ 파일 ν™•μž₯자λ₯Ό κ°–λŠ” URL, 접속 μ‹œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” URL, μ ‘κ·Ό μ œμ™Έ λͺ©λ‘μ— ν¬ν•¨λœ URL 등을 크둀링 λŒ€μƒμ—μ„œ λ°°μ œν•˜λŠ” 역할을 ν•œλ‹€.

이미 λ°©λ¬Έν•œ URL?

이미 λ°©λ¬Έν•œ 적이 μžˆλŠ” URL인지 μΆ”μ ν•˜λ©΄ 같은 URL을 μ—¬λŸ¬ 번 μ²˜λ¦¬ν•˜λŠ” 일을 λ°©μ§€ν•  수 μžˆμœΌλ―€λ‘œ μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄이고 μ‹œμŠ€ν…œμ΄ λ¬΄ν•œ 루프에 λΉ μ§€λŠ” 일을 λ°©μ§€ν•  수 μžˆλ‹€.

ν•΄λ‹Ή 자료 κ΅¬μ‘°λ‘œλŠ” λΈ”λ£Έν•„ν„°(bloom filter)λ‚˜ ν•΄μ‹œ ν…Œμ΄λΈ”μ΄ 널리 쓰인닀.

URL μ €μž₯μ†Œ

이미 λ°©λ¬Έν•œ URL을 λ³΄κ΄€ν•˜λŠ” μ €μž₯μ†Œμ΄λ‹€.

μ›Ή 크둀러 μž‘μ—… 흐름

  1. μ‹œμž‘ URL듀을 λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œμ— μ €μž₯ν•œλ‹€.
  2. HTML λ‹€μš΄λ‘œλ”λŠ” λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œμ—μ„œ URL λͺ©λ‘μ„ κ°€μ Έμ˜¨λ‹€.
  3. HTML λ‹€μš΄λ‘œλ”λŠ” 도메인 이름 λ³€ν™˜κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ URL의 IPμ£Όμ†Œλ₯Ό μ•Œμ•„λ‚΄κ³ , ν•΄λ‹Ή IPμ£Όμ†Œλ‘œ μ ‘μ†ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ°›λŠ”λ‹€.
  4. μ½˜ν…μΈ  νŒŒμ„œλŠ” λ‹€μš΄λœ HTML νŽ˜μ΄μ§€λ₯Ό νŒŒμ‹±ν•˜μ—¬ μ˜¬λ°”λ₯Έ ν˜•μ‹μ„ κ°–μΆ˜ νŽ˜μ΄μ§€μΈμ§€ κ²€μ¦ν•œλ‹€.
  5. μ½˜ν…μΈ  νŒŒμ‹±κ³Ό 검증이 λλ‚˜λ©΄ 쀑볡 μ½˜ν…μΈ μΈμ§€ ν™•μΈν•˜λŠ” 절차λ₯Ό κ°œμ‹œν•œλ‹€.
  6. 쀑볡 μ½˜ν…μΈ μΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œ, ν•΄λ‹Ή νŽ˜μ΄μ§€κ°€ 이미 μ €μž₯μ†Œμ— μžˆλŠ”μ§€ λ³Έλ‹€.
    • 이미 μ €μž₯μ†Œμ— μžˆλŠ” μ½˜ν…μΈ μΈ κ²½μš°μ—λŠ” μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  버린닀.
    • μ €μž₯μ†Œμ— μ—†λŠ” μ½˜ν…μΈ μΈ κ²½μš°μ—λŠ” μ €μž₯μ†Œμ— μ €μž₯ν•œ λ’€ URL μΆ”μΆœκΈ°λ‘œ μ „λ‹¬ν•œλ‹€.
  7. URL μΆ”μΆœκΈ°λŠ” ν•΄λ‹Ή HTML νŽ˜μ΄μ§€μ—μ„œ 링크λ₯Ό 골라낸닀.
  8. 골라낸 링크λ₯Ό URL ν•„ν„°λ‘œ μ „λ‹¬ν•œλ‹€.
  9. 필터링이 λλ‚˜κ³  남은 URL만 쀑볡 URL νŒλ³„ λ‹¨κ³„λ‘œ μ „λ‹¬ν•œλ‹€.
  10. 이미 μ²˜λ¦¬ν•œ URL인지 ν™•μΈν•˜κΈ° μœ„ν•˜μ—¬, URL μ €μž₯μ†Œμ— λ³΄κ΄€λœ URL인지 μ‚΄ν•€λ‹€. 이미 μ €μž₯μ†Œμ— μžˆλŠ” URL은 버린닀.
  11. μ €μž₯μ†Œμ— μ—†λŠ” URL은 URL μ €μž₯μ†Œμ— μ €μž₯ν•  뿐 μ•„λ‹ˆλΌ λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œμ—λ„ μ „λ‹¬ν•œλ‹€.

3단계

DFSλ₯Ό 쓸것인가 BFSλ₯Ό 쓸것인가

웹은 유ν–₯ κ·Έλž˜ν”„λ‚˜ κ°™λ‹€. νŽ˜μ΄μ§€λŠ” λ…Έλ“œμ΄κ³ , ν•˜μ΄νΌλ§ν¬λŠ” 엣지라고 λ³΄λ©΄λœλ‹€. 크둀링 ν”„λ‘œμ„ΈμŠ€λŠ” 이 유ν–₯κ·Έλž˜ν”„λ₯Ό μ—£μ§€λ₯Ό 따라 νƒμƒ‰ν•˜λŠ” 과정이닀. DFSλŠ” 깊이λ₯Ό κ°€λŠ ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” νŠΉμ„±μ΄ μžˆμ–΄ μ›Ή ν¬λ‘€λŸ¬λŠ” 보톡 BFSλ₯Ό μ‚¬μš©ν•œλ‹€. BFSλŠ” FIFO 큐λ₯Ό μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 이 νλŠ” ν•œμͺ½μœΌ ν•˜λ‘œλŠ” 탐색할 URL을 λ„£κ³  λ‹€λ₯Έ ν•œμͺ½μœΌλ‘œλŠ” κΊΌλ‚΄κΈ°λ§Œν•œλ‹€.

ν•˜μ§€λ§Œ 이 κ΅¬ν˜„λ²•μ—λŠ” 2κ°€μ§€ λ¬Έμ œκ°€ μžˆλ‹€.

- ν•œ νŽ˜μ΄μ§€μ—μ„œ λ‚˜μ˜€λŠ” 링크의 μƒλ‹Ήμˆ˜λŠ” 같은 μ„œλ²„λ‘œ λ˜λŒμ•„κ°„λ‹€. ν¬λ‘€λŸ¬λŠ” 같은 ν˜ΈμŠ€νŠΈμ— μ†ν•œ λ§Žμ€ 링크λ₯Ό λ‹€μš΄λ°›λŠλΌ λ°”λΉ μ§€λ©΄μ„œ 링크듀을 λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•˜κ²Œ λœλ‹€λ©΄ μ„œλ²„λŠ” μˆ˜λ§Žμ€ μš”μ²­μœΌλ‘œ κ³ΌλΆ€ν•˜μ— 걸리게 λœλ‹€. (μ˜ˆμ˜μ—†λŠ” 크둀러)
- ν‘œμ€€μ  BFS μ•Œκ³ λ¦¬μ¦˜μ€ URL간에 μš°μ„ μˆœμœ„λ₯Ό 두지 μ•ŠλŠ”λ‹€. 처리 μˆœμ„œμ— μžˆμ–΄ λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό κ³΅ν‰ν•˜κ²Œ λŒ€ν•˜λŠ”λ°, λͺ¨λ“  μ›Ή νŽ˜μ΄μ§€κ°€ 같은 μˆ˜μ€€μ˜ ν’ˆμ§ˆ, 같은 μˆ˜μ€€μ˜ μ€‘μš”μ„±μ„ κ°–μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ νŽ˜μ΄μ§€ μˆœμœ„, μ‚¬μš©μž νŠΈλž˜ν”½ μ–‘, μ—…λ°μ΄νŠΈ λΉˆλ„ λ“± μ—¬λŸ¬κ°€μ§€ 척도에 λΉ„μΆ”μ–΄ 처리 μš°μ„ μˆœμœ„λ₯Ό κ΅¬λ³„ν•˜λŠ” 것이 μ˜¨λ‹Ήν•  것이닀.

λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œ

λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œλ₯Ό ν™œμš©ν•˜λ©΄ 이 λ¬Έμ œλ“€μ„ μ’€ μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€. URL μ €μž₯μ†ŒλŠ” λ‹€μš΄λ‘œλ“œν•  URL을 λ³΄κ΄€ν•˜λŠ” μž₯μ†Œμ΄λ‹€. 이 μ €μž₯μ†Œλ₯Ό 잘 κ΅¬ν˜„ν•˜λ©΄ ‘예의 μžˆλŠ” 크둀러’, URL μ‚¬μ΄μ˜ μš°μ„ μˆœμœ„μ™€ 신선도λ₯Ό κ΅¬λ³„ν•˜λŠ” 크둀러λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

예의

μ›Ή ν¬λ‘€λŸ¬λŠ” μˆ˜μ§‘ λŒ€μƒ μ„œλ²„λ‘œ 짧은 μ‹œκ°„ μ•ˆμ— λ„ˆλ¬΄ λ§Žμ€ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것을 μ‚Όκ°€μ•Όν•œλ‹€. λ„ˆλ¬΄ λ§Žμ€ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것은 ‘λ¬΄λ‘€ν•œ’ 일이며, λ•Œλ‘œλŠ” DoS곡격으둜 κ°„μ£Όλ˜κΈ°λ„ ν•œλ‹€.

μ˜ˆμ˜λ°”λ₯Έ 크둀러λ₯Ό λ§Œλ“œλŠ” 데 μžˆμ–΄μ„œ μ§€μΌœμ•Όν•  ν•œκ°€μ§€ 원칙은, 동일 μ›Ή μ‚¬μ΄νŠΈμ— λŒ€ν•΄μ„œλŠ” ν•œ λ²ˆμ— ν•œ νŽ˜μ΄μ§€λ§Œ μš”μ²­ν•œλ‹€λŠ” 것이닀. 같은 μ›Ή μ‚¬μ΄νŠΈμ˜ νŽ˜μ΄μ§€λ₯Ό λ‹€μš΄λ°›λŠ” ν…ŒμŠ€ν¬λŠ” μ‹œκ°„μ°¨λ₯Ό 두고 μ‹€ν–‰ν•˜λ„λ‘ ν•˜λ©΄ 될 것이닀. 이 μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±μ‹œν‚€λ €λ©΄ μ›Ήμ‚¬μ΄νŠΈμ˜ 호슀트 λͺ…κ³Ό λ‹€μš΄λ‘œλ“œλ₯Ό μˆ˜ν–‰ν•˜λŠ” μž‘μ—… μŠ€λ ˆλ“œ μ‚¬μ΄μ˜ 관계λ₯Ό μœ μ§€ν•˜λ©΄ λœλ‹€. 즉 각 λ‹€μš΄λ‘œλ“œ μŠ€λ ˆλ“œλŠ” 별도 FIFO 큐λ₯Ό κ°€μ§€κ³  μžˆμ–΄μ„œ, ν•΄λ‹Ή νμ—μ„œ κΊΌλ‚Έ URL만 λ‹€μš΄λ‘œλ“œ ν•œλ‹€.

- 큐 λΌμš°ν„° : 같은 ν˜ΈμŠ€νŠΈμ— μ†ν•œ URL은 μ–Έμ œλ‚˜ 같은 큐둜 가도둝 보μž₯ν•˜λŠ” 역할을 ν•œλ‹€.
- λ§€ν•‘ ν…Œμ΄λΈ” : 호슀트 이름과 큐 μ‚¬μ΄μ˜ 관계λ₯Ό λ³΄κ΄€ν•˜λŠ” ν…Œμ΄λΈ”
- FIFO 큐 : 같은 ν˜ΈμŠ€νŠΈμ— μ†ν•œ URL은 μ–Έμ œλ‚˜ 같은 큐에 λ³΄κ΄€λœλ‹€.
- 큐 선택기 : 큐 μ„ νƒκΈ°λŠ” 큐듀을 μˆœνšŒν•˜λ©΄μ„œ νμ—μ„œ URL을 κΊΌλ‚΄μ„œ ν•΄λ‹Ή νμ—μ„œ λ‚˜μ˜¨ URL을 λ‹€μš΄λ‘œλ“œν•˜λ„λ‘ μ§€μ •λœ μž‘μ—… μŠ€λ ˆλ“œμ— μ „λ‹¬ν•˜λŠ” 역할을 ν•œλ‹€.
- μž‘μ—… μŠ€λ ˆλ“œ : μž‘μ—… μŠ€λ ˆλ“œλŠ” μ „λ‹¬λœ URL을 λ‹€μš΄λ‘œλ“œν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. μ „λ‹¬λœ URL은 순차적으둜 처리될 것이며, μž‘μ—…λ“€ μ‚¬μ΄μ—λŠ” μΌμ •ν•œ μ§€μ—°μ‹œκ°„μ„ λ‘˜ 수 μžˆλ‹€.

μš°μ„ μˆœμœ„

μ• ν”Œ μ œν’ˆμ— λŒ€ν•œ μ‚¬μš©μž 의견이 μ˜¬λΌμ˜€λŠ” 포럼의 ν•œ νŽ˜μ΄μ§€κ°€ μ• ν”Œ ν™ˆνŽ˜μ΄μ§€μ™€ 같은 μ€‘μš”λ„λ₯Ό κ°–λŠ”λ‹€κ³  λ³΄κΈ°λŠ” μ–΄λ €μšΈ 것이닀. 크둀러 μž…μž₯μ—μ„œλŠ” μ€‘μš”ν•œ νŽ˜μ΄μ§€ λ¨Όμ € μˆ˜μ§‘ν•˜λ„λ‘ ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

μœ μš©μ„±μ— 따라 URL의 μš°μ„ μˆœμœ„λ₯Ό λ‚˜λˆŒ λ•ŒλŠ” νŽ˜μ΄μ§€ 랭크, νŠΈλž˜ν”½ μ–‘, κ°±μ‹  λΉˆλ„ λ“± λ‹€μ–‘ν•œ 척도λ₯Ό μ‚¬μš©ν•  수 μžˆμ„ 것이닀.

- μˆœμœ„κ²°μ •μž₯치 : URL을 μž…λ ₯으둜 λ°›μ•„ μš°μ„ μˆœμœ„λ₯Ό κ³„μ‚°ν•œλ‹€.
- 큐 : μš°μ„ μˆœμœ„λ³„λ‘œ 큐가 ν•˜λ‚˜μ”© ν• λ‹Ήλœλ‹€. μš°μ„ μˆœμœ„κ°€ λ†’μœΌλ©΄ 선택될 ν™•λ₯ λ„ μ˜¬λΌκ°„λ‹€.
- 큐 선택기 : μž„μ˜ νμ—μ„œ μ²˜λ¦¬ν•  URL을 κΊΌλ‚΄λŠ” 역할을 λ‹΄λ‹Ήν•œλ‹€. μˆœμœ„κ°€ 높은 νμ—μ„œ 더 자주 꺼내도둝 ν”„λ‘œκ·Έλž¨λ˜μ–΄ μžˆλ‹€.
- μ „λ©΄ 큐 : μš°μ„ μˆœμœ„ κ²°μ • 과정을 μ²˜λ¦¬ν•œλ‹€.
- ν›„λ©΄ 큐 : ν¬λ‘€λŸ¬κ°€ 예의 λ°”λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ λ³΄μ¦ν•œλ‹€.

신선도

μ›Ή νŽ˜μ΄μ§€λŠ” μˆ˜μ‹œλ‘œ μΆ”κ°€λ˜κ³ , μ‚­μ œλ˜κ³ , λ³€κ²½λœλ‹€. λ”°λΌμ„œ λ°μ΄ν„°μ˜ 신선함을 μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이미 λ‹€μš΄λ‘œλ“œν•œ νŽ˜μ΄μ§€λΌκ³  해도 주기적으둜 μž¬μˆ˜μ§‘ν•  ν•„μš”κ°€ μžˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ¨λ“  URL을 μž¬μˆ˜μ§‘ν•˜λŠ” 것은 λ§Žμ€ μ‹œκ°„κ³Ό μžμ›μ΄ ν•„μš”ν•˜λ‹€.

- μ›Ή νŽ˜μ΄μ§€μ˜ λ³€κ²½ 이λ ₯ ν™œμš©
- μš°μ„ μˆœμœ„λ₯Ό ν™œμš©ν•˜μ—¬ μ€‘μš”ν•œ νŽ˜μ΄μ§€λŠ” μ’€ 더 자주 μž¬μˆ˜μ§‘

λ―Έμˆ˜μ§‘ URL μ €μž₯μ†Œλ₯Ό μœ„ν•œ 지속성 μ €μž₯μž₯치

검색 엔진을 μœ„ν•œ 크둀러의 경우 μ²˜λ¦¬ν•΄μ•Όν•˜λŠ” URL의 μˆ˜λŠ” μˆ˜μ–΅κ°œμ— λ‹¬ν•œλ‹€. λͺ¨λ‘λ₯Ό λ©”λͺ¨λ¦¬μ— λ³΄κ΄€ν•˜λŠ” 것은 μ•ˆμ •μ„±μ΄λ‚˜ 규λͺ¨ ν™•μž₯μ„± μΈ‘λ©΄μ—μ„œ λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€. μ „λΆ€ λ””μŠ€ν¬μ— μ €μž₯ν•˜λŠ” 것도 쒋은 방법은 μ•„λ‹Œλ° λŠλ €μ„œ μ‰½κ²Œ μ„±λŠ₯ 병λͺ© 지점이 되기 λ•Œλ¬Έμ΄λ‹€.

λŒ€λΆ€λΆ„μ˜ URL은 λ””μŠ€ν¬μ— λ‘μ§€λ§Œ IO λΉ„μš©μ„ 쀄이기 μœ„ν•΄ λ©”λͺ¨λ¦¬ 버퍼에 큐λ₯Ό λ‘λŠ” μ ˆμΆ©μ•ˆμ„ 선택할 수 μžˆλ‹€. 버퍼에 μžˆλŠ” λ°μ΄ν„°λŠ” 주기적으둜 λ””μŠ€ν¬μ— 기둝할 것이닀.

HTML λ‹€μš΄λ‘œλ”

HTML λ‹€μš΄λ‘œλ”λŠ” HTTP ν”„λ‘œν† μ½œμ„ 톡해 μ›Ή νŽ˜μ΄μ§€λ₯Ό λ‚΄λ €λ°›λŠ”λ‹€.

Robots.txt

λ‘œλ΄‡ μ œμ™Έ ν”„λ‘œν† μ½œμ΄λΌκ³  λΆ€λ₯΄κΈ°λ„ ν•˜λŠ” Robots.txtλŠ” μ›Ήμ‚¬μ΄νŠΈκ°€ ν¬λ‘€λŸ¬μ™€ μ†Œν†΅ν•˜λŠ” ν‘œμ€€μ  방법이닀. 이 νŒŒμΌμ—λŠ” ν¬λ‘€λŸ¬κ°€ μˆ˜μ§‘ν•΄λ„ λ˜λŠ” νŽ˜μ΄μ§€ λͺ©λ‘μ΄ λ“€μ–΄μžˆλ‹€. λ”°λΌμ„œ μ›Ήμ‚¬μ΄νŠΈλ₯Ό 긁어가기 전에 ν¬λ‘€λŸ¬λŠ” ν•΄λ‹Ή νŒŒμΌμ— λ‚˜μ—΄λœ κ·œμΉ™μ„ λ¨Όμ € ν™•μΈν•΄μ•Όν•œλ‹€.

μ„±λŠ₯ μ΅œμ ν™”

  1. 뢄산크둀링
  2. μ„±λŠ₯을 높이기 이해 크둀링 μž‘μ—…μ„ μ—¬λŸ¬ μ„œλ²„μ— λΆ„μ‚°ν•˜λŠ” 방법이닀. 각 μ„œλ²„λŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό 돌렀 λ‹€μš΄λ‘œλ“œ μž‘μ—…μ„ μ²˜λ¦¬ν•œλ‹€. 이 ꡬ성을 μœ„ν•΄ URL 곡간은 μž‘μ€ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬, 각 μ„œλ²„λŠ” κ·Έ 쀑 μΌλΆ€μ˜ λ‹€μš΄λ‘œλ“œλ₯Ό λ‹΄λ‹Ήν•˜λ„λ‘ ν•œλ‹€.
  3. 도메인 이름 λ³€ν™˜ κ²°κ³Ό μΊμ‹œDNS μš”μ²­μ΄ 처리 λ˜λŠ”λ° 보톡 10msμ—μ„œ 200msκ°€ μ†Œμš”λœλ‹€. 크둀러 μŠ€λ ˆλ“œ κ°€μš΄λ° μ–΄λŠ ν•˜λ‚˜λΌλ„ 이 μž‘μ—…μ„ ν•˜κ³  있으면 λ‹€λ₯Έ μŠ€λ ˆλ“œμ˜ DNS μš”μ²­μ€ μ „λΆ€ λΈ”λ‘λœλ‹€. λ”°λΌμ„œ DNS쑰회 결과둜 μ–»μ–΄μ§„ 도메인 이름과 IPμ£Όμ†Œ μ‚¬μ΄μ˜ 관계λ₯Ό μΊμ‹œμ— 보관해 놓고 크둠 작(cron job) 등을 돌렀 주기적으둜 κ°±μ‹ ν•˜λ„λ‘ ν•΄ λ†“μœΌλ©΄ μ„±λŠ₯을 효과적으둜 높일 수 μžˆλ‹€.
  4. 도메인 이름 λ³€ν™˜κΈ°(DNS Resolver)λŠ” 크둀러 μ„±λŠ₯의 병λͺ© 쀑 ν•˜λ‚˜μΈλ°, μ΄λŠ” DNSμš”μ²­μ„ 보내고 κ²°κ³Όλ₯Ό λ°›λŠ” μž‘μ—…μ˜ 동기적 νŠΉμ„± λ•Œλ¬Έμ΄λ‹€. DNS μš”μ²­μ˜ κ²°κ³Όλ₯Ό λ°›κΈ° μ „κΉŒμ§€λŠ” λ‹€μŒ μž‘μ—…μ„ μ§„ν–‰ν•  수 μ—†λŠ” 것이닀.
  5. 지역성지역성을 ν™œμš©ν•˜λŠ” μ „λž΅μ€ 크둀 μ„œλ²„, μΊμ‹œ, 큐, μ €μž₯μ†Œ λ“± λŒ€λΆ€λΆ„μ˜ μ»΄ν¬λ„ŒνŠΈμ— μ μš©κ°€λŠ₯ν•˜λ‹€.
  6. 크둀링 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ„œλ²„λ₯Ό μ§€μ—­λ³„λ‘œ λΆ„μ‚°ν•˜λŠ” 방법이닀. 크둀링 μ„œλ²„κ°€ 크둀링 λŒ€μƒ μ„œλ²„μ™€ μ§€μ—­μ μœΌλ‘œ κ°€κΉŒμš°λ©΄ νŽ˜μ΄μ§€ λ‹€μš΄λ‘œλ“œ μ‹œκ°„μ€ 쀄어듀 것이닀.
  7. 짧은 νƒ€μž„μ•„μ›ƒ
  8. μ–΄λ–€ μ›Ή μ„œλ²„λŠ” 응닡이 λŠλ¦¬κ±°λ‚˜ μ•„μ˜ˆ μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ”λ‹€. 이런 경우 λŒ€κΈ° μ‹œκ°„μ΄ κΈΈμ–΄μ§€λ©΄ μ’‹μ§€ μ•ŠμœΌλ―€λ‘œ, μ΅œλŒ€ μ–Όλ§ˆλ‚˜ 기닀릴지 미리 μ •ν•΄λ‘λŠ” 것이닀. 이 μ‹œκ°„λ™μ•ˆ μ„œλ²„κ°€ μ‘λ‹΅ν•˜μ§€ μ•ŠμœΌλ©΄ ν¬λ‘€λŸ¬λŠ” ν•΄λ‹Ή νŽ˜μ΄μ§€ λ‹€μš΄λ‘œλ“œλ₯Ό μ€‘λ‹¨ν•˜κ³  λ‹€μŒ νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°„λ‹€.

μ•ˆμ •μ„±

μ΅œμ ν™”λœ μ„±λŠ₯뿐 μ•„λ‹ˆλΌ μ•ˆμ •μ„±λ„ μ€‘μš”ν•˜κ²Œ κ³ λ €ν•΄μ•Όν•œλ‹€.

- μ•ˆμ • ν•΄μ‹œ : λ‹€μš΄λ‘œλ” μ„œλ²„λ“€μ— λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•  λ•Œ 적용 κ°€λŠ₯ν•œ 기술
- 크둀링 μƒνƒœ 및 μˆ˜μ§‘ 데이터 μ €μž₯ : μž₯μ• κ°€ λ°œμƒν•œ κ²½μš°μ—λ„ μ‰½κ²Œ 볡ꡬ할 수 μžˆλ„λ‘ 크둀링 μƒνƒœμ™€ μˆ˜μ§‘λœ 데이터λ₯Ό 지속적 μ €μž₯μž₯μΉ˜μ— 기둝해 λ‘λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€. μ €μž₯된 데이터λ₯Ό λ‘œλ”©ν•˜κ³  λ‚˜λ©΄ μ€‘λ‹¨λ˜μ—ˆλ˜ 크둀링을 μ‰½κ²Œ μž¬μ‹œμž‘ν•  수 μžˆμ„ 것이닀.
- μ˜ˆμ™Έ 처리 : λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ—μ„œ μ—λŸ¬λŠ” λΆˆκ°€ν”Όν•  뿐 μ•„λ‹ˆλΌ ν”ν•˜κ²Œ λ²Œμ–΄μ§€λŠ” 일이닀. μ˜ˆμ™Έκ°€ λ°œμƒν•΄λ„ 전체 μ‹œμŠ€ν…œμ΄ μ€‘λ‹¨λ˜λŠ” 일 없이 κ·Έ μž‘μ—…μ„ μš°μ•„ν•˜κ²Œ μ΄μ–΄λ‚˜κ°ˆ 수 μžˆμ–΄μ•Όν•œλ‹€.
- 데이터 검증 : μ‹œμŠ€ν…œ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ μ€‘μš” μˆ˜λ‹¨ κ°€μš΄λ° ν•˜λ‚˜

ν™•μž₯μ„±

μ§„ν™”ν•˜μ§€ μ•ŠλŠ” μ‹œμŠ€ν…œμ€ 없기에 μƒˆλ‘œμš΄ ν˜•νƒœμ˜ μ½˜ν…μΈ λ₯Ό μ‰½κ²Œ 지원할 수 μžˆλ„λ‘ μ‹ κ²½μ¨μ•Όν•œλ‹€.

- PNG λ‹€μš΄λ‘œλ”λŠ” PNGνŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λŠ” ν”ŒλŸ¬κ·ΈμΈ λͺ¨λ“ˆμ΄λ‹€.
- μ›Ή λͺ¨λ‹ˆν„°λŠ” 웹을 λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ μ €μž‘κΆŒμ΄λ‚˜ μƒν‘œκΆŒμ΄ μΉ¨ν•΄λ˜λŠ” 일을 λ§‰λŠ” λͺ¨λ“ˆμ΄λ‹€.

문제 μžˆλŠ” μ½˜ν…μΈ  감지 및 νšŒν”Ό

  1. 쀑볡 μ½˜ν…μΈ 
  2. μ›Ή μ½˜ν…μΈ μ˜ 30%κ°€λŸ‰μ€ 쀑볡이닀. ν•΄μ‹œλ‚˜ 체크섬(check-sum)을 μ‚¬μš©ν•˜λ©΄ 쀑볡 μ½˜ν…μΈ λ₯Ό 보닀 μ‰½κ²Œ 탐지할 수 μžˆλ‹€.
  3. κ±°λ―Έ 덫URL의 μ΅œλŒ€ 길이λ₯Ό μ œν•œν•˜λ©΄ νšŒν”Όν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ κ°€λŠ₯ν•œ λͺ¨λ“  μ’…λ₯˜μ˜ 덫을 ν”Όν•  수 μžˆλŠ” 해결책은 μ—†λ‹€. 또 ν•œκ°€μ§€ 방법은 μ‚¬λžŒμ΄ μˆ˜μž‘μ—…μœΌλ‘œ 덫을 ν™•μΈν•˜κ³  μ°Ύμ•„λ‚Έ ν›„ 덫이 μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό 크둀러 탐색 λŒ€μƒμ—μ„œ μ œμ™Έν•˜κ±°λ‚˜ URL ν•„ν„° λͺ©λ‘μ— κ±Έμ–΄λ‘λŠ” 것이닀.
  4. κ±°λ―Έ 덫은 크둀러λ₯Ό λ¬΄ν•œ 루프에 λΉ λœ¨λ¦¬λ„λ‘ μ„€κ³„ν•œ μ›ΉνŽ˜μ΄μ§€λ‹€.
  5. 데이터 λ…Έμ΄μ¦ˆ
  6. μ–΄λ–€ μ½˜ν…μΈ λŠ” κ°€μΉ˜κ°€ 거의 μ—†λ‹€. λ”°λΌμ„œ 이런 μ½˜ν…μΈ λŠ” κ°€λŠ₯ν•˜λ‹€λ©΄ μ œμ™Έν•΄μ•Όν•œλ‹€.

4단계

- μ„œλ²„ μΈ‘ λ Œλ”λ§(server-side rendering)

: λ§Žμ€ μ›Ήμ‚¬μ΄νŠΈκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈ, AJAXλ“±μ˜ κΈ°μˆ μ„ μ‚¬μš©ν•΄μ„œ 링크λ₯Ό μ¦‰μ„μ—μ„œ λ§Œλ“€μ–΄ λ‚Έλ‹€. κ·ΈλŸ¬λ‹ˆ μ›ΉνŽ˜μ΄μ§€λ₯Ό κ·Έλƒ₯ μžˆλŠ” κ·ΈλŒ€λ‘œ λ‹€μš΄ λ°›μ•„ νŒŒμ‹±ν•˜λ©΄ λ™μ μœΌλ‘œ μƒμ„±λ˜λŠ” λ§ν¬λŠ” λ°œκ²¬ν•  수 μ—†λ‹€. 이 λ¬Έμ œλŠ” νŽ˜μ΄μ§€λ₯Ό νŒŒμ‹±ν•˜κΈ° 전에 μ„œλ²„ μΈ‘ λ Œλ”λ§(동적 λ Œλ”λ§, dynamic rendering)을 μ μš©ν•˜λ©΄ ν•΄κ²°ν•  수 μžˆλ‹€.  

- μ›μΉ˜ μ•ŠλŠ” νŽ˜μ΄μ§€ 필터링

μ €μž₯ 곡간 λ“± 크둀링에 μ†Œμš”λ˜λŠ” μžμ›μ€ μœ ν•œν•˜κΈ° λ•Œλ¬Έμ— 슀팸 λ°©μ§€ μ»΄ν¬λ„ŒνŠΈλ₯Ό 두어 ν’ˆμ§ˆμ΄ μ‘°μ•…ν•˜κ±°λ‚˜ μŠ€νŒΈμ„±μΈ νŽ˜μ΄μ§€λ₯Ό κ±ΈλŸ¬λ‚΄λ„λ‘ ν•΄ 두면 μ’‹λ‹€.  

- λ°μ΄ν„°λ² μ΄μŠ€ 닀쀑화 및 샀딩

λ‹€μ€‘ν™”λ‚˜ 샀딩 같은 기법을 μ μš©ν•˜λ©΄ 데이터 κ³„μΈ΅μ˜ κ°€μš©μ„±, 규λͺ¨ ν™•μž₯μ„±, μ•ˆμ •μ„±μ΄ ν–₯μƒλœλ‹€.  

- μˆ˜ν‰μ  규λͺ¨ ν™•μž₯μ„±

λŒ€κ·œλͺ¨μ˜ 크둀링을 μœ„ν•΄μ„œλŠ” λ‹€μš΄λ‘œλ“œλ₯Ό μ‹€ν–‰ν•  μ„œλ²„κ°€ 수백 ν˜Ήμ€ 수천 λŒ€ ν•„μš”ν•˜κ²Œ 될 μˆ˜λ„ μžˆλ‹€. μˆ˜ν‰μ  규λͺ¨ ν™•μž₯μ„±λ₯΄ λ‹¬μ„±ν•˜λŠ” 데 μ€‘μš”ν•œ 것은 μ„œλ²„κ°€ μƒνƒœμ •λ³΄λ₯Ό μœ μ§€ν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 것, 즉 λ¬΄μƒνƒœ(stateless) μ„œλ²„λ‘œ λ§Œλ“œλŠ” 것이닀.  

- κ°€μš©μ„±, 일관성, μ•ˆμ •μ„±

이런 κ°œλ…λ“€μ€ 성곡적인 λŒ€ν˜• μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ° μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ κ³ λ €ν•΄μ•Όν•˜λŠ” 것듀이닀.  

- 데이터 뢄석 μ†”λ£¨μ…˜

데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  λΆ„μ„ν•˜λŠ” 것은 μ–΄λŠ μ‹œμŠ€ν…œμ—κ²Œλ‚˜ μ€‘μš”ν•˜λ‹€. μ‹œμŠ€ν…œμ„ μ„Έλ°€νžˆ μ‘°μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이런 데이터와 κ·Έ 뢄석 κ²°κ³Όκ°€ ν•„μˆ˜μ μ΄λΌμ„œλ‹€.
λ°˜μ‘ν˜•