[WSL2] 다중 인스턴스 IP 공유의 비밀과 Nginx 로드 밸런싱(Load Balancing)
1. WSL2에서 여러 가상환경을 만들었는데 IP가 같은 이유
wsl --install -d Ubuntu-24.04 --name Ubuntu-24.04-Web 과 같은 명령어를 사용해 우분투 인스턴스를 2개 이상 만들고 ip addr을 확인해 보면, 모든 가상환경이 동일한 IP 주소를 가지고 있는 것을 볼 수 있습니다.
또한, 특정 인스턴스에서 아래와 같이 IP를 추가하거나 삭제하더라도 모든 가상환경에 공통적으로 적용되어 버립니다.
# 가상 IP 추가
sudo ip addr add 192.168.14.116/24 dev eth0 label eth0:1
# 가상 IP 삭제
sudo ip addr del 192.168.14.116/24 dev eth0 label eth0:1
Q. 왜 이런 현상이 발생할까요?
정답은 "WSL2의 가상 스위치 공유 구조" 때문입니다.
- Hyper-V 기반 가상화: WSL2는 Microsoft의 가상화 기술인 Hyper-V를 기반으로 작동합니다.
- 단일 가상 스위치(Virtual Switch) 공유: Windows 호스트 PC 내부에는 WSL2 전용 가상 스위치가 딱 하나만 생성됩니다.
- 사용자가 우분투 인스턴스를 1개를 켜든, 10개를 켜든 모든 WSL2 인스턴스는 이 하나의 가상 네트워크 커널과 네트워크 인터페이스(eth0)를 완전히 공유하게 됩니다. 별도의 독립된 가상머신(VMware, VirtualBox 등)처럼 각각의 IP를 할당받는 구조가 아니기 때문에, 한 곳에서 IP를 바꾸면 다른 곳도 똑같이 바뀌게 됩니다.
2. Nginx를 활용한 로드 밸런싱(Load Balancing) 실습
네트워크 인터페이스와 IP를 공유하는 구조 환경(예: 127.0.0.1 또는 동일 IP)에서는 주로 포트 번호(Port)를 다르게 지정하여 여러 서버를 구동합니다. 이때 사용자로부터 들어오는 요청을 여러 포트(또는 서버)로 분산해 주는 기술이 바로 로드 밸런싱입니다.
Nginx 설정 파일(sudo nano /etc/nginx/sites-available/default)을 통해 제어
① 기본 라운드 로빈 (Round Robin)
가장 기본적인 방식으로, 들어오는 요청을 순서대로 서버에 균등하게 분산합니다.
upstream my_web_cluster {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
② 가중치 기반 로드 밸런싱 (Weighted Load Balancing)
각 서버의 성능이 다를 때 사용합니다. weight 값이 높을수록 더 많은 요청을 처리합니다. 아래 설정의 경우 전체 요청 중 11번 서버가 약 60%(3/5)를 처리하게 됩니다.
upstream backend_servers {
server 10.0.0.11:8080 weight=3;
server 10.0.0.12:8080 weight=1;
server 10.0.0.13:8080 weight=1;
}
③ 세션 고정 로드 밸런싱 (IP Hash)
클라이언트의 IP 주소를 해싱하여 항상 동일한 서버로 요청을 연결합니다. 사용자의 로그인 세션을 유지해야 하는 웹 애플리케이션 환경에서 유용합니다.
upstream backend_servers {
ip_hash;
server 10.0.0.11:8080;
server 10.0.0.12:8080;
server 10.0.0.13:8080;
}
④ 최저 연결 기반 로드 밸런싱 (Least Connections)
현재 연결(세션) 수가 가장 적은 서버로 요청을 보냅니다. 트래픽 체류 시간이 길거나 요청의 처리 시간이 제각각일 때 효과적입니다.
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
⑤ 장애 감지 및 백업 제외 옵션 (Failover & Backup)
서버에 장애가 발생했을 때 자동으로 클러스터에서 제외하거나, 평소에는 대기하다가 메인 서버가 다운되었을 때만 투입되는 백업 서버를 지정할 수 있습니다.
upstream backend_servers {
# 10초 동안 3번 접속 실패하면 해당 서버를 30초 동안 제외
server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
# 다른 모든 메인 서버가 다운되었을 때만 동작하는 대기(Backup) 서버
server 10.0.0.13:8080 backup;
}
3. 최종 Nginx 가상 호스트(Server) 설정
위에서 정의한 upstream 클러스터를 실제 Nginx의 HTTP 서비스와 연결하는 설정입니다. 외부에서 80번 포트(HTTP 기본 포트)로 접근하면, 우리가 지정한 로드 밸런서인 my_web_cluster로 프록시 패스(Proxy Pass)해 줍니다.
server {
listen 80 default_server;
server_name localhost;
location / {
# 위에서 정의한 upstream 블록 이름으로 요청을 전달
proxy_pass http://my_web_cluster;
# 백엔드 서버가 클라이언트의 진짜 IP와 호스트 정보를 알 수 있도록 헤더 설정
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
AWS
1. AWS(Amazon Web Services) 란?
AWS는 아마존(Amazon)에서 제공하는 클라우드 컴퓨팅 플랫폼입니다.
과거에는 웹 서비스를 만들려면 직접 물리적인 서버 컴퓨터를 사고, OS를 깔고, 랜선을 꽂는 복잡한 과정이 필요했습니다. 하지만 AWS를 사용하면 클릭 몇 번만으로 전 세계에 있는 거대한 데이터 센터의 컴퓨터 자원(CPU, 메모리, 저장공간 등)을 필요한 만큼 빌려서 사용할 수 있습니다.
AWS는 수백 가지의 강력한 기능을 제공하지만, 기능이 너무 많고 비용 인프라 구조가 복잡해 초보자가 접근하기 어려울 수 있습니다. 그래서 나온 서비스가 바로 Amazon Lightsail입니다.
2. Amazon Lightsail의 핵심 기능 5가지
Amazon Lightsail은 AWS의 핵심 기능(서버, 스토리지, 네트워킹 등)을 모아 예측 가능한 고정 가격으로 쉽고 단순하게 제공하는 패키지형 서비스
① 인스턴스(Instance) 생성
- 개념: 클라우드 공간에 나만의 가상 서버(컴퓨터)를 한 대 만드는 것입니다.
② 키 페어(Key Pair) 설정
- 개념: 생성한 가상 서버(인스턴스)에 원격으로 안전하게 접속하기 위한 비밀번호 파일(.pem)입니다.
- 보안 구조: 키 페어는 공개키(Public Key)와 개인키(Private Key)로 나뉩니다.
- 공개키: AWS 서버 내부에 자동으로 저장됩니다.
- 개인키: 인스턴스를 생성할 때 딱 한 번 사용자의 컴퓨터로 다운로드받을 수 있습니다.
- 주의사항: 이 키 파일(.pem)을 분실하면 서버에 접속할 수 없으므로 절대 잃어버리거나 GitHub 같은 공공 장소에 업로드하면 안 됩니다.
③ 고정 IP (Static IP) 설정
- 개념: 서버가 껐다 켜져도 변하지 않는 고정된 주소(IP)를 할당하는 기능입니다.
- 왜 필요한가요?: Lightsail 인스턴스는 기본적으로 '동적 IP'를 가집니다. 서버를 재부팅하거나 업데이트를 위해 멈췄다 켜면 IP 주소가 바뀌어 버립니다. 사용자가 매번 바뀐 IP로 접속할 수는 없기 때문에, 항상 같은 주소로 유지되도록 고정 IP를 생성하여 인스턴스에 연결(Attach)해 주어야 합니다.
- 비용 팁: Lightsail은 인스턴스에 연결되어 사용 중인 고정 IP는 무료로 제공하지만, 만들어두고 어떤 서버에도 연결하지 않고 방치하면 비용이 부과되니 주의해야 합니다.
④ 스냅샷 (Snapshot)
- 개념: 특정 시점에 서버의 모든 데이터와 상태를 통째로 캡처하여 저장하는 '백업' 기능입니다.
- 활용도: * 중요한 환경설정을 바꾸거나 대규모 코드를 배포하기 직전에 스냅샷을 찍어둡니다.
- 만약 작업 중 서버가 망가지거나 에러가 나면, 찍어둔 스냅샷을 이용해 스냅샷을 찍은 당시의 상태로 완벽하게 서버를 복구(Restore)하거나 똑같은 복제 서버를 새로 만들 수 있습니다.
⑤ 버킷 (Bucket - 객체 스토리지)
- 개념: 이미지, 동영상, 텍스트 파일 등 다양한 파일을 저장할 수 있는 클라우드 하드디스크(저장소)입니다. AWS의 대표적인 스토리지 서비스인 S3의 Lightsail 버전입니다.
- 특징: 일반적인 서버 하드디스크와 달리, 파일 하나하나가 고유의 웹 주소(URL)를 가지게 됩니다. 따라서 웹사이트에 들어갈 대용량 이미지나 첨부파일들을 인스턴스(서버) 내부에 저장하지 않고 버킷에 분리해서 저장하면, 서버의 부담을 줄이고 훨씬 빠른 속도로 서비스를 제공할 수 있습니다.
📝 요약 및 마무리
| 기능명 | 한 줄 역할 | 비유 |
| 인스턴스 | 가상 서버 컴퓨터 생성 | 내 방에 컴퓨터 한 대 놓기 |
| 키 페어 | 서버 원격 접속용 보안 열쇠 | 컴퓨터 로그인용 특수 OTP 보안키 |
| 고정 IP | 바뀌지 않는 고정 주소 부여 | 평생 바뀌지 않는 집 주소 만들기 |
| 스냅샷 | 서버 상태 전체 백업 | 게임하기 전 '세이브(Save)' 파일 만들기 |
| 버킷 | 대용량 파일 전용 저장소 | 무제한으로 들어가는 외장 하드디스크 |
——————————————————————————
본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.
'학습일지' 카테고리의 다른 글
| [스나이퍼팩토리] 한컴AI아카데미(26.05.22) GitHub (0) | 2026.05.23 |
|---|---|
| [스나이퍼팩토리] 한컴AI아카데미(26.05.21) Git (0) | 2026.05.21 |
| [스나이퍼팩토리] 한컴AI아카데미(26.05.15) (0) | 2026.05.15 |
| [스나이퍼팩토리] 한컴AI아카데미(26.05.14) (0) | 2026.05.15 |
| [스나이퍼팩토리] 한컴AI아카데미(26.05.13) (0) | 2026.05.13 |