Physical Address
South Korea
Physical Address
South Korea


개발이나 인프라 테스트 환경을 만들 때, 다들 한 번쯤 VirtualBox나 VMware 같은 가상화 프로그램을 깔아봤을 것이다. 나 역시 얼마 전까지는 그랬다. 하지만 안 그래도 무거운 사내 보안 프로그램이 가득한 회사 PC에서 가상머신(VM)을 켜는 순간, 마우스 커서마저 버벅거리는 끔찍한 경험을 했다. 게다가 외부망 연결을 하려면 NAT 설정에, 포트 포워딩에… 설정하다가 진이 다 빠지곤 했다.
그러다 이번에 WSL2(Windows Subsystem for Linux 2)로 갈아탔는데, 그야말로 신세계였다.
만약 회사 컴퓨터에서 단순 패키지 다운로드나 가벼운 통신 테스트용 서버가 필요하다면, 무조건 WSL2가 답이다. 이번 글에서는 사내 보안망을 우회해서 Rocky Linux 9 순정 버전을 올리고, 파일질라(FileZilla)로 SFTP 연동까지 마치는 과정을 내가 직접 삽질하며 알아낸 팁과 함께 정리해 보았다.
우선 윈도우 자체에서 가상화 기능을 켜줘야 한다.
🚨 실제 사내 PC 주의사항
만약 재부팅을 했는데도
wsl명령어가 안 먹히거나 에러가 난다면? 십중팔구 안랩, 소만사, 파수 같은 사내 엔드포인트 보안 솔루션이 BIOS/UEFI 수준에서 가상화 기술(Intel VT-x / AMD-V)을 강제로 막아둔 것이다. 이럴 땐 혼자 끙끙 앓지 말고, 사내 IT 보안 포털에 ‘개발용 가상화 기능 사용 예외 신청’ 을 올려서 결재부터 받아야 한다. 보안 정책 업데이트 없이는 한 발짝도 나갈 수 없다.
윈도우 11에는 PowerShell, CMD 등 이것저것 많지만, 우리는 윈도우 기본 ‘터미널(Windows Terminal)’을 쓸 것이다. 이때 주의할 점은 윈도우 시작 버튼을 마우스 우클릭한 뒤 반드시 [터미널(관리자)]을 선택해 실행해야 한다는 것이다. 권한 없이 명령어를 내렸다간 CommandNotFoundException이나 권한 거부 에러를 마주하게 된다.
도커(Docker)용 컨테이너 파일(.tar.xz)을 그대로 WSL2에 넣으려고 하면 WSL_E_NOT_A_LINUX_DISTRO 에러를 만나며 튕겨버린다. 초기화 스크립트가 없어서 생기는 문제다. 안정적으로 구동하려면 Rocky Linux 재단에서 공식으로 만든 WSL 전용 빌드 파일을 써야 한다.
우선 깔끔한 관리를 위해 C 드라이브에 작업 폴더를 하나 만들자. 나는 C:\WSL\Rocky9으로 만들었다.
그 후 Rocky Linux 공식 미러 서버의 이미지 저장소에 접속해서 내 PC 아키텍처(대부분 x86_64)에 맞는 파일 중, 확장자가 .wsl로 끝나는 베이스 파일을 받는다.
Rocky-9-WSL-Base.latest.x86_64.wsl (약 140~150MB 정도 된다.)다운로드가 끝났다면 이 파일을 방금 만든 C:\WSL\Rocky9 폴더로 옮겨둔다.
관리자 권한으로 열어둔 윈도우 터미널(PowerShell 탭)에서 아래 명령어를 차례대로 입력한다.
PowerShell
# 1. 가상 머신 인스턴스를 관리할 폴더로 이동
cd C:\WSL\Rocky9
# 2. .wsl 배포판 구조를 읽어와 'Rocky-9'이라는 이름으로 시스템 등록
wsl --import Rocky-9 C:\WSL\Rocky9 .\Rocky-9-WSL-Base.latest.x86_64.wsl
정상적으로 처리되면 에러 메시지 없이 잠시 멈췄다가 다음 프롬프트로 넘어간다.
제대로 안착했는지 확인해 볼 시간이다. 아래 명령어를 쳐보자.
PowerShell
# 등록된 리눅스 배포판 목록과 버전 확인
wsl -l -v
출력 결과에 Rocky-9이 보이고, VERSION 항목에 2라고 적혀있다면 완벽하다. 이제 아래 명령어로 단 1초 만에 Rocky Linux 9으로 진입할 수 있다.
PowerShell
wsl -d Rocky-9
부팅을 기다릴 필요도 없다. 입력하자마자 내 컴퓨터 이름을 이어받은 [root@hostname /]# 프롬프트가 뜰 것이다.
리눅스에 들어왔으니 신나게 최신 패키지부터 설치하려고 dnf update를 치는 순간, 높은 확률로 에러를 마주하게 된다.
회사 네트워크는 보안을 위해 우리가 외부로 보내는 트래픽을 감시한다. 이 과정에서 방화벽 장비가 자체적으로 만든 인증서(Self-Signed Certificate)를 중간에 끼워 넣는데, Rocky Linux의 패키지 매니저인 dnf는 이를 ‘변조된 위험한 인증서’로 판단한다. 결국 Curl error (60): SSL peer certificate... 같은 에러를 내뿜으며 다운로드를 차단해 버리는 것이다.
회사 인증서를 리눅스에 일일이 등록하는 건 너무 귀찮다. 어차피 우리만의 테스트 서버이니, DNF 설정에서 SSL 검증을 잠시 꺼두는 가장 확실하고 빠른 방법을 쓰자.
리눅스 터미널에서 아래 명령어로 설정 파일을 연다.
Bash
vi /etc/dnf/dnf.conf
키보드 i를 눌러 편집 모드(-- INSERT --)로 바꾼 뒤, 맨 아래 줄에 다음 옵션을 넣어준다.
Plaintext
sslverify=false
입력이 끝났다면 Esc 누르고 :wq를 입력한 뒤 엔터를 쳐서 저장하고 나온다. 이제 다시 업데이트를 시도하면 거짓말처럼 방화벽을 우회해 다운로드가 잘 될 것이다.
Bash
# 글로벌 SSL 검증 오프 후 저장소 동기화 테스트
dnf update -y
WSL2 내부 터미널로만 작업하면 답답하다. VS Code나 푸티(Putty), 파일질라 같은 외부 툴로 편하게 접속하려면 OpenSSH 서버를 켜야 한다.
Bash
# OpenSSH 서버 설치
dnf install -y openssh-server
# SSH 서비스 시작
systemctl start sshd
# 가상머신 켜질 때마다 SSH 자동 실행 등록
systemctl enable sshd
Rocky Linux 9은 보안 때문에 기본적으로 외부에서 root 계정으로 바로 로그인하는 것을 막아둔다. 테스트용 환경이니 이 빗장을 풀어주자.
Bash
vi /etc/ssh/sshd_config
설정 파일에서 #PermitRootLogin으로 시작하는 부분을 찾아서 주석(#)을 지우고 아래와 같이 고쳐준다. (없으면 맨 아래 쓰면 된다.)
Plaintext
PermitRootLogin yes
저장(:wq)하고 나온 뒤, 변경사항을 적용하기 위해 SSH 서비스를 재시작한다.
Bash
systemctl restart sshd
로그인할 때 쓸 비밀번호를 만들어준다.
Bash
passwd root
New password: 라고 뜨면 원하는 비밀번호를 입력한다. (리눅스는 보안상 비밀번호를 타이핑할 때 화면에 * 같은 기호가 안 보이니, 당황하지 말고 정확히 입력 후 엔터를 누르면 된다.)
간혹 리눅스 안에서 ip a 명령어를 쳐서 나온 IP(예: 172.28.238.0)를 윈도우 창이나 외부 툴에 그대로 적고 접속하려는 분들이 있다. 결론부터 말하면 안 된다. 끝자리가 .0인 것은 개별 고유 IP가 아니라 서브넷 공간의 시작점인 ‘네트워크 주소’일 뿐만 아니라, Hyper-V 가상 스위치 장벽 때문에 윈도우에서 그 안쪽으로 들어가는 수신 트래픽(Ping 등)은 기본적으로 다 차단되기 때문이다.
하지만 걱정할 필요 없다. WSL2에는 ‘로컬호스트 포트 미러링’ 기술이 있다. 리눅스 IP가 컴퓨터를 켤 때마다 무작위로 바뀌더라도, 윈도우에 localhost 혹은 127.0.0.1이라고 입력하면 내부 파이프라인을 통해 WSL2 리눅스의 22번(SSH) 포트로 곧바로 꽂아준다.
단, 리눅스 자체 방화벽이 방해할 수 있으니 방화벽은 꺼두자.
Bash
# 리눅스 내부 방화벽 중지 및 영구 비활성화
systemctl stop firewalld
systemctl disable firewalld
이제 윈도우에서 GUI 툴로 편하게 파일을 드래그 앤 드롭할 수 있도록 파일질라를 연동해 보겠다.
사내 보안망에서 이상한 경로로 받으면 악성코드 경고가 뜰 수 있으니, 무조건 공식 사이트에서 무료 버전을 받아서 설치하자.
파일질라를 켜고 단축키 Ctrl + S를 누르거나 좌측 상단의 [사이트 관리자]를 연다. [새 사이트]를 누르고 이름을 지정한 뒤, 우측 [일반(General)] 탭 정보를 아래 표를 보고 똑같이 채워 넣는다.
| 설정 항목 | 입력할 값 | 매핑 사유 및 주의사항 |
| 프로토콜 | SFTP – SSH File Transfer Protocol | 일반 FTP 선택 시 접속 거부됨. 보안 SSH 기반인 SFTP 필수 |
| 호스트 | localhost (또는 127.0.0.1) | 매번 바뀌는 가상 IP 대신 고정된 로컬 루프백 주소 사용 |
| 포트 | 22 | OpenSSH 서버의 기본 포트 번호 |
| 로그온 유형 | 일반 (Normal) | 비밀번호를 직접 입력해 인증하는 방식 |
| 사용자 | root | 리눅스 최상위 관리자 계정 |
| 비밀번호 | (방금 설정한 비밀번호) | 앞서 passwd root 명령으로 만든 마스터 암호 |
설정을 마쳤다면 아래 [연결] 버튼을 누른다. 최초 연결 시 ‘알려지지 않은 호스트 키’라는 팝업창이 뜨는데, 정상적인 보안 토큰 발급 과정이니 [항상 이 호스트를 신뢰]에 체크하고 확인을 누르면 된다.
접속이 완료되면 좌측(내 윈도우 PC)에서 우측(WSL2 Rocky Linux 9 서버)으로 소스코드나 패키지 파일을 편하게 드래그 앤 드롭하며 다이렉트로 전송할 수 있다.
VirtualBox와 달리 WSL2는 백그라운드 프로세스로 윈도우에 완전히 녹아든다. 그래서 관리가 편하지만, 완벽한 자원 제어를 위해 아래 명령어를 숙지해 두는 것이 좋다.
작업하던 리눅스 터미널 창에서 exit를 치면 원격 세션이 닫히며 윈도우 파워쉘 상태로 돌아온다. WSL2의 절전 알고리즘 덕분에 이 상태로 시간이 좀 지나면 서버가 알아서 메모리 할당량을 줄이고 유휴 상태로 들어간다.
대용량 빌드를 하거나 자바 프로세스를 켜두면 리눅스가 윈도우 RAM을 잔뜩 먹은 채 뱉어내지 않을 때가 있다. 혹은 세팅이 꼬여서 리눅스를 완전히 껐다 켜야 할 때, 윈도우 터미널(PowerShell) 창을 열고 아래 명령을 날려주자.
PowerShell
wsl --shutdown
이 명령 즉시 백그라운드의 가상머신 엔진이 통째로 꺼지며, 묶여 있던 물리 메모리(RAM)가 윈도우로 100% 즉시 반환된다. 컴퓨터가 갑자기 느려졌다 싶을 때 직효약이다.
다음 날 출근해서 다시 서버를 켜고 싶다면 무거운 부팅 과정을 기다릴 필요 없다. 관리자 권한 터미널에서 딱 한 줄만 치면 된다.
PowerShell
wsl -d Rocky-9
기존 가상머신들처럼 커널 초기화, 하드웨어 스캔 단계를 전부 스킵하고 하위 캐시 레이어에서 다이렉트로 켜지기 때문에 1~2초 만에 어제 작업하던 환경 그대로 로그인이 완료된다.
이제 보안 빡빡한 회사 PC에서도 눈치 보지 말고, 나만의 쾌적한 Rocky Linux 9 환경에서 마음껏 개발과 테스트를 즐겨보자!
docker? conda? 20년 차 엔지니어가 딱 정해주는 파이썬 가상환경 선택