ν¬μ›Œλ“œ ν”„λ‘μ‹œ 와 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ (forward proxy, reverse proxy)

2021. 8. 24. 23:06γ†πŸŒ Web

λ“€μ–΄κ°€κΈ° 전에

λ³Έ ν¬μŠ€νŒ…μ€ HAProxy λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•œ λΉŒλ“œμ—… λ‹¨κ³„λ‘œ,
proxy 와 forward proxy, reverse proxy 의 μ „λ°˜μ μΈ λ‚΄μš©μ„ λ‹€λ£Ήλ‹ˆλ‹€.


Proxy λŠ” 무엇인가?

HAProxy λ₯Ό μ„€λͺ…ν•˜κΈ° μ „, μš°μ„  Proxy(ν”„λ‘μ‹œ)의 의미λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.
proxy λŠ” λŒ€λ¦¬, λŒ€λ¦¬μΈμ΄λΌλŠ” 뜻으둜 proxy server λŠ” λ³Έ μ„œλ²„λ₯Ό λŒ€μ‹ ν•˜μ—¬ μ–΄λ–€ 일을 ν–‰ν•˜λŠ” μ„œλ²„μž„μ„ μœ μΆ”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


웹은 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ, μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ ν†΅μ‹ ν•˜λ©° 데이터λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
μ΄λ•Œ ν•„μ—°μ μœΌλ‘œ μ€‘λ³΅λ˜λŠ” 데이터λ₯Ό λ°˜λ³΅ν•˜μ—¬ μ „λ‹¬ν•˜λŠ” 상황이 λ°œμƒν•˜λŠ”λ°,
μ΄λ ‡κ²Œ λ™μΌν•œ μš”μ²­μ„ 맀번 μ²˜λ¦¬ν•˜λŠ” 것은 곧 λ¦¬μ†ŒμŠ€ λ‚­λΉ„ 와 μ„œλ²„μ˜ λΆ€ν•˜ 둜 μ΄μ–΄μ§‘λ‹ˆλ‹€.

λ³Έ μ„œλ²„λ₯Ό λŒ€μ‹ ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€μ‘(?)ν•˜λŠ” proxy server


λ•Œλ¬Έμ— λ³Έ μ„œλ²„μ— λ„λ‹¬ν•˜κΈ° 전에 μƒˆλ‘œμš΄ μ„œλ²„(proxy server)λ₯Ό 미리 λ°°μΉ˜ν•˜μ—¬
쀑볡 μš”μ²­μ— λŒ€ν•΄ (연산이 ν•„μš”μ—†λŠ”) λ™μΌν•œ 응닡을 ν•  수 μžˆλ‹€λ©΄,
1) ν΄λΌμ΄μ–ΈνŠΈμ—κ² λΉ λ₯Έ μ†λ„μ˜ μ„œλΉ„μŠ€λ₯Ό, 2) μ„œλ²„μ—κ²ŒλŠ” λΆˆν•„μš”ν•œ λΆ€ν•˜λ₯Ό μ€„μ΄λŠ” 효과λ₯Ό λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. (λͺ¨μ’…μ˜ μΊμ‹œνš¨κ³Ό) 이 2가지가 ν”„λ‘μ‹œ μ„œλ²„μ˜ λŒ€ν‘œμ μΈ 효과라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν”„λ‘μ‹œ μ„œλ²„μ˜ 역할이 λŒ€λž΅μ μœΌλ‘œ μ΄ν•΄λ˜μ‹œλ‚˜μš”?

ν”„λ‘μ‹œμ˜ 두 μ’…λ₯˜

ν”„λ‘μ‹œ μ„œλ²„λŠ” λ„€νŠΈμ›Œν¬ 상 어디에 μœ„μΉ˜ν•˜λŠλƒ, ν˜Ήμ€ μ–΄λŠ λ°©ν–₯으둜 데이터λ₯Ό μ œκ³΅ν•˜λŠλƒμ— 따라 forward 와 reverse proxy 둜 λ‚˜λ‰©λ‹ˆλ‹€. 이 2κ°€μ§€μ˜ 차이점음 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. Forward Proxy

ν¬μ›Œλ“œ ν”„λ‘μ‹œλŠ”, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­ν•œ νŽ˜μ΄μ§€(예λ₯Ό λ“€μ–΄ 넀이버) λ₯Ό ν”„λ‘μ‹œμ„œλ²„κ°€ λŒ€μ‹  받아와 (ν˜Ήμ€ 이미 μΊμ‹œλ˜μ–΄ 가지고 μžˆκ±°λ‚˜) ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ‚΄λ°€μ–΄μ£ΌλŠ”(forward) 역할을 ν•©λ‹ˆλ‹€.

μ •λ¦¬ν•΄μ„œ λ§ν•˜μžλ©΄, ν΄λΌμ΄μ–ΈνŠΈ μ•žμͺ½μœΌλ‘œ 정적 데이터(μΊμ‹œ)λ₯Ό λ°˜ν™˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 일반적으둜 μ‚¬μš©λ˜λŠ” ν”„λ‘μ‹œλŠ” ν¬μ›Œλ“œ ν”„λ‘μ‹œλ₯Ό μΌμ»«μŠ΅λ‹ˆλ‹€.


ν¬μ›Œλ“œ ν”„λ‘μ‹œλŠ” λ‹€μŒκ³Ό 같은 μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

λ³΄μ•ˆ Security
μœ λ…„κΈ° μ‹œμ ˆ μ›ν•˜λŠ” μž₯λ‚œκ°μ΄ μžˆλ‹€λ©΄ λŒ€κ²ŒλŠ” λΆ€λͺ¨λ‹˜μ΄ 직접 κ°€κ²Œλ₯Ό λ°©λ¬Έν•˜μ—¬ μš°λ¦¬μ—κ²Œ μ „ν•΄μ€λ‹ˆλ‹€. μœ λ…„κΈ°μΈ μš°λ¦¬λŠ” ν—˜ν•œ 세상에 직접 λ‚˜κ°ˆ ν•„μš”μ—†μ΄ μ•ˆμ „ν•œ κ³³μ—μ„œ μ›ν•˜λŠ” μž₯λ‚œκ°μ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘μ‹œλ„ λΉ„μŠ·ν•˜κ²Œ 생각할 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘μ‹œ μ„œλ²„λŠ” μš°λ¦¬κ°€ 직접 μž₯λ‚œκ°μ„ μ‚¬λŸ¬ λ‚˜κ°ˆ ν•„μš” 없이 λŒ€μ‹  μ›€μ§μ—¬μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€. 우리의 IP λŠ” ν”„λ‘μ‹œμ— μ˜ν•΄ κ°μΆ°μ§€λŠ” 효과λ₯Ό κ°€μ Έ λ³΄μ•ˆμƒ μ•ˆμ „ν•˜κ²Œ μ§€μΌœμ§‘λ‹ˆλ‹€.

캐싱 Caching
μš°λ¦¬κ°€ μ–΄λ–€ μ›Ή νŽ˜μ΄μ§€μ— μ ‘κ·Όν•˜λ©΄ ν”„λ‘μ‹œ μ„œλ²„λŠ” ν•΄λ‹Ή νŽ˜μ΄μ§€ μ„œλ²„μ˜ 정보λ₯Ό 캐싱(μž„μ‹œλ³΄κ΄€)ν•΄λ‘”λ‹€. λ˜‘κ°™μ΄ ν•΄λ‹Ή νŽ˜μ΄μ§€μ— μ ‘κ·Όν•˜κ±°λ‚˜, λ‹€λ₯Έ ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•  λ•Œ , μΊμ‹œλœ 정보(νŽ˜μ΄μ§€)λ₯Ό κ·ΈλŒ€λ‘œ λ°˜ν™˜ν•  수 있고, μ΄λŠ” μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό μ€„μ΄λŠ” νš¨κ³Όλ„ λ‚Ό 수 μžˆλ‹€.

μ•”ν˜Έν™” Encryption
ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ€ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 톡과할 λ•Œ μ•”ν˜Έν™”λœλ‹€. μ•”ν˜Έν™”λœ μš”μ²­μ€ λ‹€λ₯Έ μ„œλ²„λ₯Ό 톡과할 λ•Œ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ κ°–κ²Œ λ˜λŠ”λ°, μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ ip λ₯Ό (λ³΄μ•ˆμ„ μœ„ν•΄) κ°μΆ°μ£ΌλŠ” λ³΄μ•ˆ 효과λ₯Ό λƒ…λ‹ˆλ‹€.

2. λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ

ν¬μ›Œλ“œλ“  λ¦¬λ²„μŠ€λ“  ν”„λ‘μ‹œλŠ” μ„œλ²„μž…λ‹ˆλ‹€. μš”μ²­μ„ λ°›κ³  응닡을 ν•˜λŠ” 것이 μ„œλ²„μ˜ κΈ°λ³Έμž…λ‹ˆλ‹€.
ν΄λΌμ΄μ–ΈνŠΈμͺ½μœΌλ‘œ 데이터(response)λ₯Ό λ°€μ–΄μ£ΌλŠ”κ²Œ ν¬μ›Œλ“œλΌλ©΄, κ·Έ λ°˜λŒ€νŽΈμΈ μ„œλ²„ μͺ½μœΌλ‘œ 데이터(request)λ₯Ό λ°€μ–΄μ£ΌλŠ” 것이 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μž…λ‹ˆλ‹€.

λ¦¬λ²„μŠ€ λΌλŠ” 이름

λ¦¬λ²„μŠ€ λΌλŠ” 단어 λ•Œλ¬Έμ— 괜히 μ—­λ°©ν–₯ κ΄€λ ¨ 이미지가 λ– μ˜€λ₯΄μ§€λ§Œ, λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” 단지 ν¬μ›Œλ“œ ν”„λ‘μ‹œμ™€ λ°˜λŒ€ λ°©ν–₯ μ •λ„μ˜ 효과λ₯Ό 가진닀고 μƒκ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

ν¬μ›Œλ“œ ν”„λ‘μ‹œμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ ip λ₯Ό μ™ΈλΆ€(outside of system)κ°€ μ•Œμ§€ λͺ»ν•˜κ²Œ 감좘 것 처럼,
λ¦¬λ²„μŠ€ ν”„λ‘μ‹œμ—μ„œλŠ” μ„œλ²„μ˜ ip λ₯Ό μ™ΈλΆ€(outside of system)μ—μ„œ μ•Œμ§€ λͺ»ν•˜λ„둝 κ°μΆ°λ²„λ¦½λ‹ˆλ‹€. 이둜써 μ„œλ²„λŠ” ν¬μ›Œλ“œ ν”„λ‘μ‹œμ—μ„œμ˜ ν΄λΌμ΄μ–ΈνŠΈμ™€ λ™μΌν•œ λ³΄μ•ˆ/ 캐싱 효과λ₯Ό κ°–κ²Œ λ©λ‹ˆλ‹€. 이런 μ΄μœ μ—μ„œ reverse ν”„λ‘μ‹œ λΌλŠ” 이름을 κ°–κ²Œ λœκ²ƒμ΄λΌ μΆ”μ •λ©λ‹ˆλ‹€.


λ¦¬λ²„μŠ€ ν”„λ‘μ‹œμ˜ λ‘œλ“œ 밸런슀

λ˜ν•œ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” λ‘œλ“œ λ°ΈλŸ°μ‹± νš¨κ³Όλ„ κ°€μ Έ μ„œλ²„μ˜ λΆ€ν•˜λ„ κ²½κ°ν•˜λŠ” νš¨κ³Όλ„ λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 뢀뢄이 λ°”λ‘œ λ‹€μŒ ν¬μŠ€νŒ…μ˜ HAProxy 와 μ—°κ΄€λ©λ‹ˆλ‹€.

μ„œλ²„ 단에 λ‹€μˆ˜μ˜ `μ›Ή`μ„œλ²„λ₯Ό 두면, 각 μ„œλ²„λ§ˆλ‹€ μ–΄λ–€ μš”μ²­μ„ μ²˜λ¦¬ν• μ§€ λΆ„λ‹΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ 3개의 μ„œλ²„κ°€ μ‘΄μž¬ν•  λ•Œ, 1번 μ„œλ²„λŠ” νšŒμ› 정보λ₯Ό λ‹΄λ‹Ή, 2번 μ„œλ²„λŠ” νšŒμ›μ΄ μž‘μ„±ν•œ κ²Œμ‹œκΈ€μ„ λ‹΄λ‹Ή, 3번 μ„œλ²„λŠ” ip 제곡 μ„œλΉ„μŠ€λ₯Ό λ‹΄λ‹Ήν•œλ‹€κ³  ν•©λ‹ˆλ‹€. μ΄λ•Œ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” λΆ„λ‹΄ μ§€μ‹œ 역할을 맑아 각 μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό μ€„μ—¬μ€λ‹ˆλ‹€(load balancing). 이처럼 λ‹€μˆ˜μ˜ μ›Ήμ„œλ²„κ°€ μžˆμ„ λ•Œ, ν•˜λ‚˜μ˜ λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλŠ” λ‹€μˆ˜μ˜ μ„œλ²„μ— μš”μ²­κ³Ό 응닡을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (λͺ¨μ’…μ˜ λ‘œλ“œλ°ΈλŸ°μ‹± 효과)


마치며

두 μ’…λ₯˜μ˜ ν”„λ‘μ‹œλ₯Ό μ€‘μ‹¬μœΌλ‘œ, ν”„λ‘μ‹œμ˜ λ‚΄μš©μ„ 개랡적으둜 λ‹€λ€„λ΄€μŠ΅λ‹ˆλ‹€. 사싀 이 ν¬μŠ€νŒ…μ€ HAProxy와 닀쀑화 에 κ΄€ν•œ 쑰사 도쀑, proxy 의 κ°œλ…μ΄ μ„ ν–‰λ˜μ–΄μ•Ό ν•  것 κ°™μ•„ κ³΅λΆ€ν•˜κ²Œ λμŠ΅λ‹ˆλ‹€. 이제 ν”„λ‘μ‹œκ°€ μ–΄λ–€ 것인지 감히 μž‘ν˜”μœΌλ‹ˆ, HAProxy λ₯Ό ν•œμΈ΅ 더 μ‰½κ²Œ 이해할 밑바탕이 κΉ”λ Έλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‹€μŒ ν¬μŠ€νŒ…μ—μ„  HAProxy 에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


reference
https://www.p3r.one/forward-reverse-proxy-servers/
https://jcdgods.tistory.com/322