본문 바로가기

윈도우 개발환경

FastAPI를 사용한 API 백엔드 개발; 2. Vagrant로 VirtualBox 서버 추가

FastAPI를 사용한 API 백엔드 개발

1. React Native 개발 환경 설치

2. Vagrant로 VirtualBox 서버 추가

 

 

윈도우 환경에서 개발을 하다 보면 가끔씩 윈도우에서는 쓸 수 없는 패키지가 나타난다. 나는 주로 루비 (Ruby) 나 파이썬 (Python)을 사용해서 개발할 때 경험했었는데, 기억나는 것은 파이썬에서 배치 처리를 하기 위해 가끔 사용하는 Celery가 윈도우에서 돌아가지 않았던 기억이 있다. 이제는 되려냐?

 

이번에도 내가 사용하는 파이썬 패키지가 윈도우는 지원하지 않는다고 한다. 물론 소스 코드를 내려받고 환경을 맞추고 해서 만들어서 쓰면 되지만 결구 윈도우에서 개발만 하지 서비스는 결국 리눅스환경의 서버나 도커, 쿠버네티스에서 실행이 되기 때문에 컴파일하는데 시간을 소비할 필요가 없다.

 

하여간, 생각난 김에 우분투로 FastAPI서버로 옮기면서 우분투 서버에서 실행하면서 윈도우의 VSCode에서 개발하는 환경을 만들어 보려고 한다. 도커도 많이 사용하지만, 이미 앞에서 많이 다루었으니 이번에는 Vagrant와 VirtualBox를 사용해서 환경을 구축하려고 한다. 쿠버네티스 환경을 만들고 나니 윈도우용 도커 데스크탑을 돌리려면 윈도우 서비스를 내리는 작업을 거쳐야 해서 윈도우용 도커 데스크탑은 당분간 사용하지 않을 계획이다. 

 

먼저, 파이썬을 설치할 수 있는 준비가 되어 있는 우분투 서버를 만들어 주는 Vagrantfile을 만든다.

 

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  
  # config.vm.box_check_update = false
  
   config.vm.network "public_network"
   config.vm.synced_folder ".", "/home/vagrant/works", disabled: false

   config.vm.provider "virtualbox" do |vb|
     # Display the VirtualBox GUI when booting the machine
     # vb.gui = true

     # Customize the amount of memory on the VM:
     vb.memory = "4096"
   end

   config.vm.disk :disk, size: '80GB', primary: true

   # ...
   config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get -y install ca-certificates curl
    install -m 0755 -d /etc/apt/keyrings
    apt-get update
    apt-get install build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev libncurses-dev tk-dev -y
    runuser - vagrant -c 'git clone https://github.com/pyenv/pyenv.git /home/vagrant/.pyenv'
    echo 'export PYENV_ROOT="/home/vagrant/.pyenv"' >> /home/vagrant/.bashrc
    echo 'command -v pyenv >/dev/null || export PATH="/home/vagrant/.pyenv/bin:$PATH"' >> /home/vagrant/.bashrc
    echo 'eval "$(pyenv init -)"' >> /home/vagrant/.bashrc
   SHELL
end

 

Vagrantfile의 아래쪽을 보면 가상머신이 만들어지면 실행할 쉡 스크립 명령이 나열되어 있는데 Pyenv를 설치하는 과정까지 만들어 놓았다. 파이썬은 어떤 버전을 설치할지 개발 상황에 따라 다르니 pyenv까지만 자동으로 설치하기로 했다.

 

"vagrant up"명령을 사용해서 가상머신을 만들면 파이썬 언어를 설치할 수 있는 준비가 되어 있고 pyenv 명령으로 사용할 파이썬을 설치하고 기본 파이썬으로 지정하기만 하면 된다. 이제 파이썬을 설치하기 위해 "vagrant ssh"명령으로 가상머신으로 들어가서 아래 명령으로 파이썬을 설치한다.

 

pyenv install 3.10
pyenv global 3.10

 

Vagrantfile을 만들 때, vagrant를 실행하는 폴더를 가상머신과 공유하고 /home/vagrant/works로 마운트 하도록 했기 때문에 works에서 작업하는 모든 파일은 윈도우와 공유된다.

 

다음으로 프로젝트를 위해 파이썬 가상환경을 만든다.

 

python -m venv fastapi

 

만들어진 파이썬 가상환경 폴더로 들어가서 가상환경을 활성화시키고,

source bin/activate

 

개발에 필요한 필요한 패키지를 설치한다. 설치하기 전에 pip을 업그레이드하는 것이 좋다.

 

python -m pip install --upgrade pip

 

VSCode에서 만들어진 가상머신을 사용하기 위해서는 ssh로 연결할 수 있어야 한다. 그러기 위해서는 "vagrant ssh"명령으로 연결할 때 사용하는 환경을 파일로 내려받는다.

 

vagrant ssh-config > %HOME%\.ssh\ssh_config

 

파일이 만들어지면 ssh로 접속 테스트를 해 본다.

 

ssh -F %HOME%\.ssh\ssh_config default

 

문제없이 접속되는 것을 확인하면 VSCode에 연결할 수 있도록 설정한다. 물론 폴더가 공유되어 있으니 VSCode를 공유된 폴더에서 열고 작업할 수는 있지만 두 환경이 별개이다 보니 윈도우에 설치되지 않는 패키지는 여전히 에러라 나타날 것이다.

 

VSCode를 열고 톱니바퀴 아이콘을 눌러 설정화면을 연다. Ctrl + , 핫키를 사용해서 창을 열어도 된다. 아래와 같이 remote를 필터를 걸고 Remote - SSH를 선택한 후 오른쪽 화면의 아래에 찾아보면 Remote.SSH: Config file을 설정하는 항목이 있는데 여기에 앞에서 생성한 ssh_config파일의 위치를 넣는다. %HOME%은 인식되지 않으니 홈 디텍토리 아래에 있다면 전체 경로를 지정해야 한다.

 

 

이제 왼쪽 맨 아래쪽에 연결 표시 아이콘을 "Connect to Host"를 선택하면 default가 보인다. 물론 처음 연결하는 것이라면 ssh플러그인들 포함해서 몇 가지 프로그램을 설치하라고 나오는데, ssh플러그인을 설치하고 다시 Connect to Host를 선택하면 ssh_config파일 안에 설정된 default가 나올 것이다. 만일 서버를 더 등록할 예정이면 이 ssh_config파일에 등록하면 Connect to Host를 선택했을 때 default와 같이 아래에 나타날 것이다.

 

처음 연결하면 VSCode의 환경을 가상머신에 설치하기 위해 시간이 좀 걸리는데, 처음에는 설치하느라 시간이 걸리고 다음에 연결할 때에는 바로 연결된다. 연결되고 VSCode화면이 다시 나타나면 윈도우에서 설치했던 Extension이 모두 사라지고 초기화된 화면으로 나타나기 때문에 사용하기 전에 개발에 필요한 extension을 다시 설치한다. 

 

이제 터미널을 열면 가상머신 내의 프로젝트 폴더로 바로 이동하고 우분투(또는 사용하는 리눅스) 명령을 사용할 수 있다.

 

FastAPI를 실행할 때 이제 서버처럼 실행해야 접속할 수 있기 때문에 host 옵션을 지정해야 노트북의 브라우저에서 Swagger를 연결할 수 있다.

 

fastapi dev app/main.py --host 0.0.0.0