2 λΆ„ μ†Œμš”

Proxy(ν”„λ‘μ‹œ)λž€?

Proxy(ν”„λ‘μ‹œ)λž€ 사전적 μ˜λ―Έλ‘œλŠ” β€œλŒ€λ¦¬β€λΌλŠ” 의미둜, ν”„λ‘œν† μ½œμ— μžˆμ–΄μ„œ λŒ€λ¦¬ 응닡을 ν•˜λŠ” 역할이라고 ν•  수 μžˆλ‹€.
λ³΄μ•ˆμƒμ˜ 문제둜 직접 톡신을 μ£Όκ³  받을 수 μ—†λŠ” μ‚¬μ΄μ—μ„œ ν”„λ‘μ‹œλ₯Ό μ΄μš©ν•΄μ„œ 쀑계λ₯Ό ν•˜λŠ” κ°œλ…μ΄λ‹€.
이런 μ„œλ²„λ₯Ό ν”„λ‘μ‹œ μ„œλ²„λΌκ³  ν•œλ‹€.

ν”„λ‘μ‹œ μ„œλ²„μ˜ νŠΉμ§•?

ν”„λ‘μ‹œ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ μž…μž₯으둜 λ³Ό λ•Œ, μ„œλ‘œ λ°˜λŒ€μ˜ 역할을 ν•˜λŠ” κ²ƒμ²˜λŸΌ 보인닀.
ν΄λΌμ΄μ–ΈνŠΈκ°€ ν”„λ‘μ‹œλ₯Ό 바라보면 ν”„λ‘μ‹œκ°€ β€œμ„œλ²„β€μ˜ 역할을 ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이고, μ„œλ²„κ°€ ν”„λ‘μ‹œλ₯Ό 바라보면 β€œν΄λΌμ΄μ–ΈνŠΈβ€μ˜ 역할을 ν•˜λŠ” κ²ƒμ²˜λŸΌ 보인닀.

[μ„œλ²„] <-> [ν”„λ‘μ‹œ μ„œλ²„] <-> ν΄λΌμ΄μ–ΈνŠΈ

그러면 ν”„λ‘μ‹œλŠ” λ³΄μ•ˆμ μΈ 츑면이 μ•„λ‹ˆλ©΄ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ 될까?
ν”„λ‘μ‹œλŠ” λ‹¨μˆœ λ³΄μ•ˆ λ¬Έμ œλ•Œλ¬Έμ—λ§Œ μ‚¬μš©ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.
ν”„λ‘μ‹œλŠ” ν”„λ‘μ‹œ μ„œλ²„μ— μš”μ²­λœ λ‚΄μš©λ“€μ„ μΊμ‹œλ₯Ό μ΄μš©ν•΄ μ €μž₯ν•œλ‹€.
데이터λ₯Ό μ €μž₯해두면, λ‚˜μ€‘μ— λ‹€μ‹œ μš”μ²­ν•  λ•Œ μ²˜μŒλΆ€ν„° μ²˜λ¦¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ €μž₯ν•΄λ‘” 데이터λ₯Ό κ°€μ Έλ‹€ μ“°λ©΄ λ˜λ―€λ‘œ 전솑 μ‹œκ°„ μ ˆμ•½μ μΈ μΈ‘λ©΄μ—μ„œλ„ μž₯점이 μžˆμ–΄ 많이 μ‚¬μš©ν•œλ‹€.

μ˜ˆμ‹œ

μ˜ˆμ‹œ 1.
λ‚΄κ°€ μ—„λ§ˆν•œν…Œ 라면을 사달라고 뢀탁함. -> μ—„λ§ˆλŠ” β€œμ§‘μ— 라면 μžˆλŠ”λ°?”라고 닡함. -> 그러면 λ‚˜λŠ” λ‚΄ μ˜ˆμƒλ³΄λ‹€ 더 빨리 라면을 먹을 수 있게 됨.

μ΄μœ λŠ” 라면이 집에 μΊμ‹œλ˜μ—ˆκΈ° λ•Œλ¬Έμ΄λΌκ³  생각할 수 있음!
μ΄λŠ” ν”„λ‘μ‹œμ˜ μž₯점 쀑 ν•˜λ‚˜μΈ μ ‘κ·Ό μ œμ–΄, μΊμ‹±μœΌλ‘œ λ³Ό 수 μžˆλ‹€.

μ˜ˆμ‹œ 2.
μ•„λΉ ν•œν…Œ μžλ™μ°¨ 주유λ₯Ό 뢀탁 -> μ•„λΉ κ°€ μ£Όμœ λ„ ν•΄μ€¬λŠ”λ° μ„Έμ°¨κΉŒμ§€ 덀으둜 ν•΄μ€Œ -> λ‚΄κ°€ λΆ€νƒν•œ(κΈ°λŒ€ν•œ) 것 외에 λΆ€κ°€ κΈ°λŠ₯을 μ–»μŒ.

ν”„λ‘μ‹œμ˜ μž₯점 쀑 ν•˜λ‚˜μΈ λΆ€κ°€κΈ°λŠ₯ μΆ”κ°€λ‘œ λ³Ό 수 μžˆλ‹€.

μ˜ˆμ‹œ 3.
예λ₯Ό λ“€μ–΄, μ—„λ§ˆν•œν…Œ 라면을 사달라고 ν–ˆλŠ”λ° μ—„λ§ˆκ°€ λ™μƒν•œν…Œ μ‹œμΌ°λ‹€κ³  ν•΄λ³΄μž.
λ‚˜λŠ” μš”μ²­μ„ μ—„λ§ˆν•œν…Œ ν•΄μ„œ 이후 과정은 λͺ¨λ₯Έλ‹€.
κ·Έλž˜λ„ κ²°κ΅­ 동생이 라면을 사와 λ‚˜μ—κ²Œ λ„μ°©ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€.

이 것은 ν”„λ‘μ‹œμ˜ μž₯점 쀑 ν•˜λ‚˜μΈ ν”„λ‘μ‹œ 체인으둜 λ³Ό 수 μžˆλ‹€.

ν”„λ‘μ‹œμ˜ μ£Όμš” κΈ°λŠ₯

ν”„λ‘μ‹œλ₯Ό ν†΅ν•΄μ„œ ν•  수 μžˆλŠ” 일은 크게 2κ°€μ§€λ‘œ ꡬ뢄할 수 μžˆλ‹€.

  1. μ ‘κ·Ό μ œμ–΄
    • κΆŒν•œμ— λ”°λ₯Έ μ ‘κ·Ό 차단
    • 캐싱 -> 캐싱도 μ ‘κ·Ό μ œμ–΄ 쀑 ν•˜λ‚˜μž„
    • 지연 λ‘œλ”©
  2. λΆ€κ°€ κΈ°λŠ₯ μΆ”κ°€
    • μ›λž˜ μ„œλ²„κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯에 λ”ν•΄μ„œ λΆ€κ°€ κΈ°λŠ₯을 μˆ˜ν–‰
    • 예) μš”μ²­ κ°’μ΄λ‚˜, 응닡 값을 쀑간에 λ³€ν˜•ν•¨
    • 예) μ‹€ν–‰ μ‹œκ°„μ„ μΈ‘μ •ν•΄μ„œ μΆ”κ°€ 둜그λ₯Ό 남김

ν”„λ‘μ‹œ 객체가 쀑간에 있으면 크게 μ ‘κ·Όμ œμ–΄μ™€ λΆ€κ°€κΈ°λŠ₯ μΆ”κ°€λ‘œ λ‚˜λ‰œλ‹€.

ν”„λ‘μ‹œ μ„œλ²„

ν”„λ‘μ‹œ μ„œλ²„λŠ” 2κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

  1. Forward Proxy
  2. Reverse Proxy

Forward Proxy

ν¬μ›Œλ“œ ν”„λ‘μ‹œλŠ” ν΄λΌμ΄μ–ΈνŠΈ λŒ€μ‹  ν”„λ‘μ‹œ μ„œλ²„κ°€ λͺ©μ μ§€ μ„œλ²„μ— 톡신을 κ΅¬μ„±ν•΄μ£ΌλŠ” ν”„λ‘μ‹œλ₯Ό λ§ν•œλ‹€.
ν¬μ›Œλ“œ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•„λž˜μ™€ 같이 톡신이 κ΅¬μ„±λœλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ -> [IP: 200.000.0.0] ν”„λ‘μ‹œ μ„œλ²„ -> [http://example.co.kr] λͺ©μ μ§€ μ„œλ²„ -> ν”„λ‘μ‹œ μ„œλ²„ -> ν΄λΌμ΄μ–ΈνŠΈ

ν΄λΌμ΄μ–ΈνŠΈλŠ” μ›Ή μ„œλ²„μ— μ§μ ‘μ μœΌλ‘œ μ ‘μ†ν•˜λŠ”κ°œ μ•„λ‹ˆλΌ ν¬μ›Œλ“œ ν”„λ‘μ‹œμ— μ ‘μ†ν•˜κ³ , ν”„λ‘μ‹œ μ„œλ²„κ°€ μ›Ή μ„œλ²„μ— 접속해 μš”μ²­μ„ μ „λ‹¬ν•œλ‹€.
μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„ 응닡을 λ‹€μ‹œ μ›Ή μ„œλ²„ -> ν”„λ‘μ‹œ μ„œλ²„ -> ν΄λΌμ΄μ–ΈνŠΈμ˜ 경둜λ₯Ό 톡해 μ „λ‹¬ν•œλ‹€.

Forward Proxy의 μž₯점

  1. μΊμ‹œ μ €μž₯
    • ν”„λ‘μ‹œ μ„œλ²„μ— μ‚¬μš©μž μš”μ²­μ„ μΊμ‹œλ₯Ό μ΄μš©ν•΄ μ €μž₯ν•˜μ—¬ μ „μ†‘μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆλ‹€.
  2. URL 필터링
    • μ™ΈλΆ€ 접근은 λͺ¨λ‘ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 톡해야 ν•˜λ―€λ‘œ, λͺ©μ μ§€ μ„œλ²„λ‘œ κ°€λ €λ©΄ ν”„λ‘μ‹œ μ„œλ²„μ—μ„œ URL 필터링을 ν†΅ν•œ ν›„ 갈 수 μžˆλ‹€.

Reverse Proxy

λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” ν¬μ›Œλ“œ ν”„λ‘μ‹œμ™€λŠ” 달리 μ›Ή μ„œλ²„μͺ½μ— μœ„μΉ˜ν•œλ‹€.

그러면 μ–΄λ–»κ²Œ λ˜λŠ”λ°?
ν΄λΌμ΄μ–ΈνŠΈμ˜ 접근을 졜초둜 λ°›μ•„ μš”μ²­μ— ν•΄λ‹Ήν•˜λŠ” μ›Ή μ„œλ²„μ— λ°°λΆ„ν•΄μ£ΌλŠ” 역할을 ν•œλ‹€.
ν¬μ›Œλ“œ ν”„λ‘μ‹œλŠ” [IP:200.000.0.0]을 가진 μ„œλ²„μ˜€λ‹€λ©΄, λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

ν΄λΌμ΄μ–ΈνŠΈ -> [http://example.co.kr] ν”„λ‘μ‹œ μ„œλ²„ -> [IP: 200.000.0.0] μ›Ή μ„œλ²„1
                                           -> [IP: 300.000.0.0] μ›Ή μ„œλ²„2

ν΄λΌμ΄μ–ΈνŠΈκ°€ http://example.co.kr/content1 에 μ ‘κ·Όν•˜λ©΄ μ›Ή μ„œλ²„1둜, ~/content2에 μ ‘κ·Όν•˜λ©΄ μ›Ή μ„œλ²„2둜 λ°°λΆ„ν•΄μ€€λ‹€.

Reverse Proxy의 μž₯점

  1. λΆ€λ‹΄ λΆ„μ‚°
    μ„€μ •μœΌλ‘œ 정적 μ½˜ν…μΈ μ™€ 동적 μ½˜ν…μΈ μ˜ λ³΄λŠ” 곳을 λ‚˜λˆ„μ–΄, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ˜ νš¨μœ¨ν™”λ₯Ό ν•  수 μžˆλ‹€.
    λ‘œλ“œ λ°ΈλŸ°μŠ€μ™€ 같이 μ‚¬μš©ν•˜λ©΄ λ”μš± 뢀담을 λΆ„μ‚°ν•  수 μžˆλ‹€.

  2. μΊμ‹œ μ €μž₯
    ν¬μ›ŒνŠΈ ν”„λ‘μ‹œμ™€ λ™μΌν•˜κ²Œ λ™μΌν•œ 데이터λ₯Ό 얻을 λ•Œμ— ν”„λ‘μ‹œ μ„œλ²„κ°€ μ €μž₯ν–ˆλ˜ λ‚΄μš©μ„ λŒλ €μ€€λ‹€.

  3. μ‹œνλ¦¬ν‹° λŒ€μ±…, λ°”μ΄λŸ¬μŠ€ λŒ€μ±…
    ν†΅μ‹ μ‹œ ν”„λ‘μ‹œ μ„œλ²„μ— μ§‘μ•½λ˜μ–΄ ν”„λ‘μ‹œ μ„œλ²„ 내에 μ‹œνλ¦¬ν‹° λŒ€μ±…, λ°”μ΄λŸ¬μŠ€ λŒ€μ±…μ„ κ΅¬ν˜„ν•˜μ—¬ Web μ„œλ²„λ‘œμ˜ λΆ€μ • μ•‘μ„ΈμŠ€, μ‚¬μš© 등을 방지할 수 μžˆλ‹€.

참고자료

https://engineer-mole.tistory.com/288
https://milkye.tistory.com/202

νƒœκ·Έ: ,

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°