Post

[Network] ํ”„๋ก์‹œ(Proxy)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋„คํŠธ์›Œํฌ์˜ ์ค‘๊ฐœ์ž, ํ”„๋ก์‹œ(Proxy)๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดยทํ•„ํ„ฐ๋งํ•˜๋Š” ์„œ๋ฒ„๋กœ, ์—ญํ• (๋ณด์•ˆยท์บ์‹ฑยท๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ)๊ณผ ์ข…๋ฅ˜(ํฌ์›Œ๋“œยท๋ฆฌ๋ฒ„์Šคยท๊ฒŒ์ดํŠธ์›จ์ด)๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

ํ”„๋ก์‹œ๋ž€? ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ์ค‘๊ฐœํ•˜๋Š” ์„œ๋ฒ„/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดยทํ•„ํ„ฐ๋งํ•˜๋ฉฐ, ๋ณด์•ˆ ๊ฐ•ํ™”ยท์บ์‹ฑยท๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑยท์ ‘๊ทผ ์ œ์–ด ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.


1. ํ”„๋ก์‹œ์˜ ์—ญํ• 

์—ญํ• ์„ค๋ช…
๋ณด์•ˆ ๊ฐ•ํ™”ํ†ต์‹  ๊ฐ์‹œยท๋ณด์•ˆ ์ •์ฑ… ์ ์šฉ(์•…์„ฑ ์ฐจ๋‹จยท์ ‘๊ทผ ์ œํ•œ)
์บ์‹ฑ์ด์ „ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜ ๊ฐ์†Œ
๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ถ„์‚ฐ โ†’ ๋ถ€ํ•˜ ๋ถ„์‚ฐยท์„ฑ๋Šฅ ์ตœ์ ํ™”
์ ‘๊ทผ ์ œ์–ดํŠน์ • ์‚ฌ์ดํŠธยท์ฝ˜ํ…์ธ  ํ•„ํ„ฐ๋ง

2. ํ”„๋ก์‹œ์˜ ์ข…๋ฅ˜

โ€œํด๋ผ์ด์–ธํŠธ๋ฅผ ์ˆจ๊ธฐ๋А๋ƒ, ์„œ๋ฒ„๋ฅผ ์ˆจ๊ธฐ๋А๋ƒโ€๋กœ ํฌ์›Œ๋“œ์™€ ๋ฆฌ๋ฒ„์Šค๊ฐ€ ๊ฐˆ๋ฆฐ๋‹ค.

flowchart LR
    subgraph FW["ํฌ์›Œ๋“œ ํ”„๋ก์‹œ"]
        C1["ํด๋ผ์ด์–ธํŠธ"] --> FP["Forward Proxy"] --> S1["์„œ๋ฒ„"]
    end
    subgraph RV["๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ"]
        C2["ํด๋ผ์ด์–ธํŠธ"] --> RP["Reverse Proxy"] --> S2["์—ฌ๋Ÿฌ ์„œ๋ฒ„"]
    end
์ข…๋ฅ˜์ˆจ๊ธฐ๋Š” ๋Œ€์ƒ์œ„์น˜์šฉ๋„
ํฌ์›Œ๋“œ ํ”„๋ก์‹œํด๋ผ์ด์–ธํŠธ๋‚ด๋ถ€๋ง ์ถœ๊ตฌํšŒ์‚ฌยทํ•™๊ต ์ธํ„ฐ๋„ท ์ œ์–ดยท๋ณด์•ˆ
๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์„œ๋ฒ„์›น ์„œ๋ฒ„ ์•ž๋ถ€ํ•˜ ๋ถ„์‚ฐยท์•ˆ์ •์„ฑ
๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œํ”„๋กœํ† ์ฝœ ๋ณ€ํ™˜๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ค‘๊ณ„

ํฌ์›Œ๋“œ ํ”„๋ก์‹œ

ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์„œ๋ฒ„์— ์ ‘๊ทผํ•œ๋‹ค.

1
2
# curl๋กœ ํฌ์›Œ๋“œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ
curl --proxy http://forward-proxy-server:8080 http://example.com

๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„๋ฐฐํ•œ๋‹ค(Nginx ์˜ˆ์‹œ).

1
2
3
location / {
    proxy_pass http://backend-server;
}

๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œ

์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ/์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์„ ์ค‘๊ณ„ํ•œ๋‹ค(HTTP โ†’ HTTPS).

1
2
3
4
5
6
server {
    listen 80;
    location / {
        proxy_pass https://backend-server;
    }
}

๐Ÿ’ก ํฌ์›Œ๋“œ vs ๋ฆฌ๋ฒ„์Šค โ€” ํฌ์›Œ๋“œ๋Š” โ€œ๋ˆ„๊ฐ€ ์ ‘์†ํ•˜๋Š”์ง€(ํด๋ผ์ด์–ธํŠธ)๋ฅผ ์ˆจ๊ธฐ๊ณ โ€ ๋‚ด๋ถ€ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์„ ํ†ต์ œํ•œ๋‹ค. ๋ฆฌ๋ฒ„์Šค๋Š” โ€œ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€(์„œ๋ฒ„)๋ฅผ ์ˆจ๊ธฐ๊ณ โ€ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋’ค์˜ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐํ•œ๋‹ค. ์•ž์„œ ๋ณธ NginxยทHAProxy๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋‹ค.


3. ํ™œ์šฉ ์˜ˆ์‹œ

๋ชฉ์ ํ”„๋ก์‹œ๋ฐฉ๋ฒ•
๋ณด์•ˆ ๊ฐ•ํ™”ํฌ์›Œ๋“œ์™ธ๋ถ€ ์ง์ ‘ ํ†ต์‹  ์ฐจ๋‹จยท์ ‘๊ทผ ์ œ์–ด
์บ์‹ฑ๋ฆฌ๋ฒ„์Šค์ •์  ์ฝ˜ํ…์ธ  ์บ์‹œ โ†’ ์„œ๋ฒ„ ๋ถ€ํ•˜โ†“
๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋ฆฌ๋ฒ„์Šค์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ ๊ท ๋“ฑ ๋ถ„๋ฐฐ

NginxยทApache ๊ฐ™์€ ์›น ์„œ๋ฒ„๋‚˜ ์–ธ์–ด ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„ค์ •ํ•˜๋ฉฐ, ์š”๊ตฌ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ๋œ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
ํ”„๋ก์‹œ(Proxy)
โ”œโ”€ ์—ญํ•    ๋ณด์•ˆยท์บ์‹ฑยท๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑยท์ ‘๊ทผ์ œ์–ด
โ”œโ”€ ํฌ์›Œ๋“œ ํด๋ผ์ด์–ธํŠธ ์ˆจ๊น€(๋‚ด๋ถ€๋ง ์ œ์–ด)
โ”œโ”€ ๋ฆฌ๋ฒ„์Šค ์„œ๋ฒ„ ์ˆจ๊น€(๋ถ€ํ•˜ ๋ถ„์‚ฐยท์›น ์•ž๋‹จ)
โ””โ”€ ๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋กœํ† ์ฝœ/์‹œ์Šคํ…œ ์ค‘๊ณ„
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ํ”„๋ก์‹œํ†ต์‹  ์ค‘๊ฐœ ์„œ๋ฒ„
ํฌ์›Œ๋“œํด๋ผ์ด์–ธํŠธ ๋Œ€์‹  ์ ‘์†
๋ฆฌ๋ฒ„์Šค์„œ๋ฒ„ ์•ž ๋ถ€ํ•˜ ๋ถ„์‚ฐ

ํ”„๋ก์‹œ์˜ ํ•ต์‹ฌ์€ ์ค‘๊ฐœ์ž๋กœ์„œ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ˆจ๊ธฐ๋ฉด ํฌ์›Œ๋“œ(๋‚ด๋ถ€ ํ†ต์ œ), ์„œ๋ฒ„๋ฅผ ์ˆจ๊ธฐ๋ฉด ๋ฆฌ๋ฒ„์Šค(๋ถ€ํ•˜ ๋ถ„์‚ฐ)๋กœ, ๋ชฉ์ ์— ๋งž๋Š” ์ข…๋ฅ˜๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.