박온순 강사님
.pem
파일이 남아 있는지 확인!ssh -i .\5a011-sdlab-key.pem azureuser@<공용IP주소> -p 50000
-i .\5a011-sdlab-key.pem
: SSH 접속에 필요한 키 파일 경로azureuser@<IP주소>
: 접속할 가상머신 사용자 이름(azureuser
)과 IP 주소-p 50000
: SSH가 열려있는 포트 번호cd Downloads
conda activate a1111-sdwebui
conda activate
: 가상 환경을 활성화하라는 명령a1111-sdwebui
: Stable Diffusion을 실행하기 위한 환경 이름cd stable-diffusion-webui/models/Stable-diffusion
cd
: 폴더 이동 명령어cd ../..
../..
: 두 단계 위의 상위 디렉토리로 이동한다는 의미. Stable Diffusion의 루트 디렉토리로 돌아가야 실행 파일을 실행할 수 있다.accelerate launch --mixed_precision=bf16 --num_cpu_threads_per_process=6 launch.py --share --enable-insecure-extension-access --xformers --no-half-vae --gradio-auth username:password
accelerate launch
: Stable Diffusion 실행을 위해 accelerate
라이브러리 사용. >> GPU 성능을 최대한 활용하기 위해 사용하는 것!--mixed_precision=bf16
: 혼합 정밀도 설정을 사용하여 메모리 사용 최적화. bf16
(Bfloat16)은 딥러닝에서 자주 사용하는 데이터 타입이라고 한다. 나중에 더 공부하다보면 자주 만나게 될까?--num_cpu_threads_per_process=6
: CPU 스레드 수를 6개로 설정하여 실행 성능 최적화launch.py
: Stable Diffusion Web UI를 실행하는 파이썬 스크립트--share
: 외부에서 Web UI에 접근할 수 있도록 설정--enalbe-insecure-extension-access
: 확장 기능에 접근할 수 있게 해줌 (BUT 보안 위험 有)--xformers
: 성능 최적화를 위한 추가 옵션--no-half-vae
: VAE(Variational Autoencoder) 관련 문제 해결을 위한 옵션--gradio-auth username:password
: Web UI에 접속할 때 필요한 사용자 이름과 비밀번호 설정여기서 잠깐, 이렇게 Stable Diffusion을 실행하니 local url과 public url이 제공되었다. local url로 Stable Diffusion 실행을 시도하니 접속이 불가했다. 왜?
localhost
또는 127.0.0.1
로 시작하는 URL이다. 이는 해당 가상 머신 내부에서만 접속 가능한 주소로, 머신 외부에서 접속하려고 하면 연결이 되지 않는다.--share
옵션을 통해 public URL이 생성되며, 이 URL을 통해 인터넷 상에서 누구나 접속할 수 있게 됨 (BUT 우리는 비밀번호를 설정하였으므로 인증된 사용자만 접근 가능)Local URL은 가상 머신 내에서만 유효하므로, 로컬 컴퓨터에서 접근하려고 해도 접근할 수 없다. 만약 로컬 URL을 꼭 사용하고 싶다면, Azure 가상 머신과 로컬 컴퓨터 간에 포트 포워딩을 설정해야 한다고 한다. 어려우니까 넘어가자.
5a011-loadbalancer-rg
/ 지역 설정NAT 게이트웨이는 외부에서 내부 네트워크로 접속할 수 있게 하는 장치!
1. Azure 포털에서 'NAT Gateway' 검색, '만들기' 클릭
2. NAT 게이트웨이 이름 설정 5a011-nat-gateway
/ 지역 설정
3. TCP 유휴 시간: 15초
4. 아웃바운드 IP에서 새 공용 IP 주소 만들기 5a011-nat-gw-public-ip
5. '검토 + 만들기' 버튼 선택, '만들기' 클릭
가상 네트워크는 Azure에서 여러 대 컴퓨터를 하나의 네트워크로 묶는 기능. 이 가상 네트워크 안에 서버들이 서로 통신할 수 있다. 중요한 것! 서브넷 설정!
1. Azure 포털에서 '가상 네트워크' 선택, '만들기'
2. 리소스 그룹 선택 5a011-loadbalancer-rg
3. 가상 네트워크 이름 설정 5a011-lb-vnet
4. IP 주소 메뉴에서 서브넷 설정
5. 서브넷 이름 지정 5a011-backend-subnet
, 나머지 설정은 그대로 두기
6. NAT 게이트웨이를 연결하고, '검토 + 만들기' 클릭
로드 밸런서는 여러 대의 서버가 있을 때, 사용자가 웹사이트에 접속하면 그 요청을 여러 서버에 나눠주는 역할을 한다. 이렇게 하면 서버가 과부하에 걸리지 않고, 빠르게 동작할 수 있다.
1. Azure 포털에서 '부하 분산' 검색, '부하 분산 장치 만들기' 클릭
2. 리소스 그룹 선택 5a011-loadbalancer-rg
, 이름 설정 5a011-load-balancer
3. SKU: 표준 / 형식: 공개(Public) / 계층: 지역 설정
4. 프론트 엔드 IP 추가. 사용자가 웹사이트에 접속할 때 사용하는 주소가 됨
- 프론트 엔드 이름 설정 5a011-lb-frontend
- 새 공용 IP 생성
5. 백엔드 풀 구성. 백엔드 풀은 로드 밸런서가 트래픽을 보내줄 서버들의 그룹이다.
- 백엔드 풀 이름 지정 5a011-lb-backend-pool
, 위에서 만든 가상 네트워크 연결
6. 부하 분산 규칙 설정. 이 규칙은 사용자 요청을 서버에 어떻게 나눠줄지 정하는 규칙이다.
- 이름 설정 5a011-lb-HTTP-rule
- 상태 프로브: HTTP
- 포트: 80
상태 프로브가 뭐지?
상태 프로브(Health Probe) 는 로드 밸런서가 서버들의 상태를 확인하는 방법. 상태 프로브는 정기적으로 각 서버에 신호를 보내 서버가 살아있는지 확인하고, 이 신호를 받은 서버가 제대로 응답하면 그 서버는 정상(Healthy) 상태로 간주, 응답이 없거나 오류가 발생하면 비정상(Unhealthy) 상태로 간주한다.
5a011-lb-HTTP-rule
은 부하 분산 규칙이다. HTTP 프로브는 웹서버에 HTTP 요청을 보내서 서버가 정상적으로 작동하는지 확인하는 방식이다.
프로브 주기마다 상태 프로브가 서버에 요청을 보내서 응답 상태를 확인하는데, 응답이 정상적으로 오면 서버는 정상(Healthy) 상태로 유지되고 로드 밸런서가 트래픽을 그 서버로 계속 보내준다. 만약 응답이 없거나 오류가 발생하면 비정상(Unhealthy) 상태로 간주되어 해당 서버로의 트래픽을 차단한다.
가상 머신(VM) 은 컴퓨터를 가상으로 만들어주는 기능으로, 우리는 웹 서버를 이곳에 설치. 로드 밸런서 실습에서는 두 개의 가상 머신을 만들어서, 각각 로드 밸런서에 연결해주었다.
5a011-loadbalancer-rg
, 가상 머신 이름 설정 5a011-lb-vm1
5a011-lb-vm2
가용성 영역(Availability Zone)
같은 Azure 지역(Region) 내에서 서로 물리적으로 분리된 데이터 센터를 의미한다. 로드밸런서 실습에서 VM1은 Zone 1에, VM2는 Zone2에 각각 할당했다.
서버를 같은 영역에 두면, 그 영역에 장애가 발생할 경우 모든 서버가 중단될 수 있는데, 서로 다른 가용성 영역에 서버를 나누어 두면, 한 곳에서 장애가 발생해도 다른 곳의 서버는 계속 정상 작동할 수 있다.
이제 가상 머신들에 IIS 웹서버를 설치할 것! IIS는 웹 페이지를 제공하는 Windows 서버 소프트웨어이다. 각각의 가상 머신(VM1, VM2)에 접속해서 powershell을 통해 아래 명령어 실행.
# IIS 서버 역할 설치
Install-WindowsFeature -name Web-Server -IncludeManagementTools
# 기본 웹 페이지 삭제
Remove-Item C:\inetpub\wwwroot\iisstart.htm
# 서버 이름을 보여주는 새로운 웹페이지 만들기
Add-Content -Path "C:\inetpub\wwwroot\iisstart.htm" -Value $("Hello World from " + $env:computername)
이 코드를 실행하면, 웹 서버가 설치되고 접속 시 서버 이름을 보여주는 페이지가 나온다.
로드 밸런서의 프론트 엔드 IP 주소를 웹 브라우저에 입력하면 VM1과 VM2가 번갈아가며 웹 페이지를 보여준다. 브라우저에서 F5 키로 새로고침을 누르면 서버가 바뀌는 것을 확인할 수 있다.
만약 VM1 또는 VM2를 중지하면, 나머지 하나의 서버만 계속해서 표시된다. 이것이 로드 밸런서의 핵심 기능으로, 하나의 서버가 중지되더라도 나머지 서버로 트래픽을 자동으로 넘겨주는 것
리소스 삭제하기!
클라우드 보안 이론 부분 수업이 빠르게 진행되어 따라가기가 벅차고 숨 가쁜 순간도 있었지만, 중간중간 강사님께서 퀴즈를 진행해주셔서 덕분에 중요한 부분을 짚어가며 잠시 환기를 할 수 있었고, 벅차다고 느꼈던 내용 정리에 도움이 되었다. 나머지는 내가 스스로 복습하면서 소화해야 할 것 같다. 강사님 피셜 클라우드 부분은 한학기 분량이라고..
첫 월말 평가가 있었는데 스크롤 하다가 아무래도 클릭이 잘못된 문항이 있었나보다. 제출 전에 검토했으면 알았을 건데, 검토의 부재로 틀린 문제가 있었다. 너무 당연하게도 답에 자신이 있다 하더라도 꼭 한 번 더 확인하고 제출하는 습관을 가져야겠다는 교훈,, 😅
지난주에 혼자 로드 밸런서 실습을 했을 때는 그냥 이렇게 작동하는구나 하고 넘어갔는데, 오늘 수업에서 안할 줄 알았던 로드 밸런서 실습을 동기들과 함께 배우고 또 끝나고 다시 복습하며 스스로 정리하니 확실하게 이해가 되었다. 개념을 확인하고, 실습을 반복하면서 실제로 어떻게 작동하는지 더 명확하게 파악할 수 있고, 여러 번 학습하고 체득하는 과정이 굉장한 유익이 된다는 걸 다시금 느꼈다.
내일은 공휴일이지만 수업이 있는데, 게을러지지 말고 부지런하기.