윈도우에서 우분투 리눅스에 장고 서비스 배포하기 #1 (VirtualBox 편)

[바닥부터] 리눅스에 장고 서비스를 배포해보자 (진행 중)

리눅스 OS는 대부분의 웹서비스에서 사용되는 운영체제이며, 개발 환경 또한 리눅스에서 구축하는 것이 가장 이상적입니다. 하지만, 많은 개발자들이 Windows 운영체제를 사용하고 있기 때문에 리눅스 배포를 어려워하는 경우가 많습니다. 이에 따라, 이번 포스팅에서는 Windows 운영체제에서 리눅스를 설치하고, 장고(Django) 서비스를 구동하는 방법에 대해 알아보겠습니다.

리눅스가 처음이신 분들이 리눅스에 익숙해지기 위한 수단으로서 VirtualBox를 활용하셨으면 하는 바람에서 본 포스팅을 작성하게 되었습니다.

윈도우 VirtualBox에 우분투 설치하고 SSH 접속하기

준비과정

윈도우에서 리눅스 환경을 만들려면, VirtualBoxHyper-V를 통해 가상머신을 생성하시거나, WSL을 통해 리눅스 환경을 사용하실 수 있습니다.

가상 머신을 이용하면, 기존의 운영체제에 영향을 주지 않고 리눅스 운영체제를 설치할 수 있습니다. 이 중에 VirtualBox가 가장 손쉽게 사용할 수 있기에 이를 활용해보겠습니다.

VirtualBox 설치하기

VirtualBox 공식사이트 에서 윈도우용 설치파일을 다운받고, 설치프로그램을 실행합니다.

b35c115cc9f048119b455047aad79427.jpg

만약 "Oracle VM VirtualBox 7.0.6 needs the Microsoft Visual C++ 2019 Redistributable Package being installed first. Please install and restart the installation of Oracle VM VirtualBox 7.0.6." 에러 상자가 뜨신다면, Microsoft Visual C++ 재배포 가능 최신 지원 다운로드 페이지에서 컴퓨터 아키텍처에 맞는 버전을 다운받아서 설치하시고, 다시 VirtualBox를 설치해주세요.

VirtualBox를 설치했습니다.

af46bef490f44de3b0e3dfd7378c47e8.jpg

이제 리눅스 설치 이미지 파일을 다운받겠습니다.

Ubuntu 20.04 버전 ISO 파일 다운받기

수많은 리눅스 배포판들이 있지만, 그 중에 Ubuntu 리눅스가 사용하기도 쉽고 최신 팩키지가 빨리 지원되기 때문에 Ubuntu 리눅스를 사용토록 하겠습니다. 20.04 LTS 버전을 다운받겠습니다. 2023년 기준으로 AWS를 포함한 여러 클라우드 벤더에서 지원하는 Ubuntu 리눅스 최신버전이 20.04입니다.

구글에서 "ubuntu 20.04" 를 검색해서, Ubuntu 20.04.5 LTS (Focal Fossa) 릴리즈 페이지로 이동해주세요.

99c99605b8e5454991e2877b6180ed24.jpg

리눅스 GUI를 사용하실려면 Desktop image를 다운받으시면 되고, GUI가 없는 까만 CLI 환경 만을 사용하실려면 Server install image를 다운받으시면 됩니다. 대부분의 서버 환경은 GUI 환경이 없으므로 Server install image를 다운받겠습니다.

ISO 파일 용량이 대략 1.3GB 정도 되네요.

4cd2c833368449a3bd1de5ee2c1b63c2.jpg

VirtualBox에 리눅스 설치 시작하기

새로 만들기

VirtualBox에서 "새로 만들기" 메뉴를 클릭하여 "가상 머신 만들기" 대화상자를 띄워주세요.

3892f2eaa6404ff3bb71bb959e71bfe3.jpg

각 항목을 채워보겠습니다.

  • 이름 : 생성할 가상머신의 이름. 임의의 이름으로 지정해주세요. "ubuntu-1"로 지정해보겠습니다. 이름을 지정하니 아래 "종류", "버전" 항목이 자동으로 변경되네요.
  • Folder : 가상머신이 저장되는 경로. 디폴트로 두겠습니다.
  • ISO Image : 설치할 ISO 파일 경로. 조금 전에 다운받은 iso 파일을 지정해줍니다.

저는 이렇게 기입했습니다.

e450737d836448ac91cc9facfa41191d.jpg

"다음(N)"을 눌러주세요.

가상머신에서 사용할 username/password 지정

"Unattended Gueest OS Install Setup" 화면이 나오네요. 생성할 가상머신 내에서 사용하실 username/password를 지정하시고, 아래의 "Guest Additions" 체크박스도 체크해주세요. VirtualBox의 게스트 운영체제와 호스트 컴퓨터가 더욱 효율적으로 상호 작용할 수 있도록 도와줍니다.

548c95c88e2a4b5eb25bd9880fb6ef52.jpg

"다음(N)"을 눌러주세요.

가상머신에게 메모리와 CPU 할당

"Hardware" 화면이 나오네요. 가상머신에게 할당할 메모리와 CPU를 지정해줍니다. 저는 디폴트로 메모리 2048MB, CPU 1개로 지정되어있네요. 디폴트로 진행하겠습니다. 램을 적게 할당하면 설치 시에 kernel panic 오류가 발생하기도 합니다. "다음(N)"으로 넘어가겠습니다.

33af82e498734cff8db9d2c6547ad7fd.jpg

디스크 용량

"Virtual Hard disk" 화면이 나오네요. 가상머신에게 할당할 디스크 용량을 지정해줍니다. 디폴트로 25GB로 지정되어있는데요. 용량을 40GB로 늘려보겠습니다. 디스크 용량이 부족하신 분은 디폴트 25GB로 지정하셔도 무방합니다. 디스크 용량은 가상머신 생성 후에는 변경할 수 없기에 조금 넉넉하게 지정했습니다. 지정한 40GB 용량은 최대 크기입니다. 40GB로 지정하더라도 지정 용량을 한 번에 먹는 것이 아니라, 가상머신 내 파일의 크기가 커짐에 따라 차츰 커집니다. 한 번에 40GB 크기의 디스크를 생성하실려면 "Pre-allocate Full Size" 옵션을 체크하시면 됩니다.

a32942a69f0b46cba1190ec773a4fc96.jpg

설치옵션 요약

"Summary" 화면에서 설치 옵션을 요약해주네요. "Finish"를 눌러 가상머신 생성과 리눅스 설치를 시작하겠습니다.

5fd070148f844642888a3c9fc01b1af7.jpg

몇 초 기다리면, 아래와 같은 까만 창이 뜨면서 리눅스 설치가 시작됩니다.

6d818d4953044554bdcbebfc971b9b96.jpg

리눅스 설치 화면

리눅스 설치화면에서는 Tab과 방향키로 메뉴를 이동하고, 스페이스키로 체크박스를 체크하고, 엔터키로 항목을 선택합니다.

Korean은 없군요. English로 진행하겠습니다. 설치 메뉴가 영어로 나올 뿐 한글 처리에는 문제가 없으니, 걱정마세요.

6e631c0ee5e1483d9412c4aa5a7572ae.jpg

현재 실행 중인 Installer의 업데이트가 있다고 하네요. 업데이트없이 진행하겠습니다.

266c7653b3064a96a6f7ece34f34f3fb.jpg

키보드 레이아웃도 그대로 "English (US)"로 진행하겠습니다.

207d2930a095476a8e8a24bf6bd9ae36.jpg

네트워크 설정도 디폴트로 진행하겠습니다.

c2b18d8c97234851ac33d90d00c9f857.jpg

프록시 설정도 기입없이 그대로 진행하겠습니다. 만약 현재 사용하시는 네트워크에서 공개 인터넷망에 접근이 되지 않고, 프록시 서버를 이용해야할 경우에 사용합니다.

e6aef3edb8e244d2ba058e262c4e29a5.jpg

우분투 팩키지 미러(Mirror) 주소가 기입되어있습니다. 서버를 운영하다보면 Kakao Mirror를 지정하기도 합니다만, 설치 시에는 디폴트 주소로도 충분합니다.

3905ea657ade4b5baad5ec4c2e835fcb.jpg

우분투를 설치할 디스크를 지정합니다. 가상머신에 할당한 40GB 디스크가 잡혀있네요. 디폴트인 "Use an entire disk"를 체크하고 다음으로 넘어갑니다.

df35fab0b8fa4b0c9c962d99b7b150cc.jpg

스토리지 내역을 요약해서 보여주네요. 다음으로 넘어갑니다.

8225a5d29ca947d49e3bbb503c6806bc.jpg

설치를 시작합시다.

c23b39c98afc4091b4021b92624c1fa0.jpg

우분투 내에서 사용할 사용자 계정 정보를 입력하라고 하네요. 분명 VirtualBox 에서 "Guest Additions" 기능이 지원된다고 했었는 데, 지원이 안 되나봅니다. 각 항목을 기입하고, 다음으로 넘어갑시다.

e433a1873ecf40b0ba751cc77bb8d27f.jpg

우분투 서버에 SSH (Secure Shell) 서버를 설치합시다. "Install OpenSSH Server"를 체크해주세요. SSH는 원격 로그인 프로토콜로서, 인터넷을 통해 안전하게 통신하는 데 중요한 역할을 합니다. 대부분의 리눅스 서버로의 접속에는 SSH를 활용합니다. 그리고, VirtualBox 창에서 우분투 리눅스 명령을 입력하기보다, 윈도우 머신에서 우분투 리눅스에 SSH로 접속해서 명령을 내리시면, 보다 미려하고 편리하게 사용하실 수 있습니다.

5877724debdd47659957591949b67dcf.jpg

추가로 설치할 팩키지를 설치할 수 있는 메뉴인데요. 추가 팩키지들은 언제든 필요할 때 설치할 수 있으니, 체크없이 다음으로 넘어갑니다.

37f4b7bae862412783314d0f150bce23.jpg

시스템이 설치되고 있습니다. 설치시간은 사용하시는 컴퓨터마다 다르겠지만, 20분 정도 걸리지 않을까 싶습니다. 커피 한 잔 하고 오세요. ;-)

10f48f1a397342eca03a46f0d391ffc9.jpg

저도 커피 한 잔 하고 왔습니다. 설치가 끝나있네요. "Reboot Now" 메뉴를 통해, 우분투 리눅스를 재부팅합니다.

fc5736978edc4deab92738af4f1e2f7e.jpg

재부팅을 하고 나면, 아래처럼 "ubuntu-1 login:" 프롬프트가 뜹니다. 프롬프트가 뜬 후에 커널 메세지가 출력이 되었더라도, 엔터키를 입력하시면 다시 "ubuntu-1 login:" 프롬프트가 나올 겁니다. 조금 전에 기입했던 username/password로 로그인해주세요.

1441c3cbdb65471ba2cf225cc2ca89cd.jpg

로그인에 성공했습니다. 🤩

2fd4b8ec7bdc48ab888c425088e829ad.jpg

윈도우에서 SSH로 리눅스 서버에 접속하기

VirtualBox 우분투 설정에서 포트 포워딩 설정하기

VirtualBox 내의 가상머신은 별도의 사설 네트워크 안에 있습니다. 윈도우에서 SSH로 우분투 리눅스 서버로 접속할려면, 우분투 서버의 아이피를 알아야만 합니다. 그런데 그 아이피를 매번 알아내기도 힘들고 아이피가 변경될 수도 있으니, VirtualBox의 포트 포워딩(Port Forwarding) 기능을 활용하여 편리하게 접속을 해보겠습니다.

우분투 서버의 "머신" -> "설정" 메뉴를 선택해주세요.

3d3ad4139c7544a8846076830bd2405e.jpg

"설정" 창에서 "네트워크" -> "어댑터 1" 메뉴에서 하단의 "포트 포워딩(P)"을 선택해주세요.

cbfe3097189b4bdbb806405eca16e804.jpg

"포트 포워딩 규칙" 창이 나옵니다.

43f591bcf975476993fef4f8948c5b9a.jpg

오른 쪽 + 버튼을 클릭하면, 1줄이 추가됩니다. Rule 1에서 호스트 포트는 10022를 입력해주시고, 게스트 포트는 22를 입력해주세요. 우분투 서버에서 SSH 서버는 22번 포트에서 접속을 기다리고 있습니다.

아래와 같이 입력하시면, 사용하시는 윈도우 컴퓨터의 10022 포트로 접속하시면, 자동으로 포트포워딩을 통해 우분투 서버의 22번 포트로 접속을 하게되는 것입니다. 확인을 클릭해주시고, 설정 창도 확인을 눌러 닫아줍니다.

cdae026329ce49d1acfc433f50cce281.jpg

윈도우에서 SSH로 접속하기

윈도우에서 편하신 터미널 프로그램 (명령프롬프트, 파워쉘 등) 을 실행해주세요.

7996ae5fa6694a15b25950efc44fb775.jpg

요즘 윈도우에는 ssh 클라이언트 프로그램이 기본 설치되어있습니다. 아래처럼 ssh 명령을 내려보면 ssh 프로그램이 동작함을 확인하실 수 있습니다. 만약 "ssh" is not recognized as an internal or external command 와 같은 메세지가 뜨면서 ssh 프로그램이 없다면 (마이크로소프트 공식문서) OpenSSH 설치 문서를 참고하시어 ssh 프로그램을 설치해주세요.

1a8e4befe0a84fbb996c56f6b12a604a.jpg

이제 서버에 접속해봅시다. 명령은 ssh 아이디@접속주소 -p 접속포트번호 입니다. 우리는 방금 포트 포워딩 설정을 해두었으니, 현재 사용하시는 윈도우 컴퓨터(localhost)의 10022 포트로 접속을 하시면, 우분투 서버의 22 주소로 접속이 됩니다.

그러니, 명령 ssh 아이디@localhost -p 10022 을 실행해주세요. 특정 서버로의 SSH 첫 접속에서는 연결을 진행할 것인지를 confirm 받는 과정이 있습니다. yes를 입력하면, 이렇게 우분투 리눅스 서버에 접속했음을 확인하실 수 있습니다.

0538f440ef414faf9588dbcaa45e599e.jpg

매번 암호입력없이 편리하게 우분투 접속하기

현재 ssh 아이디@주소 -p 포트번호처럼 매번 아이디/암호/주소/포트번호를 입력해야만 우분투 서버에 접속하실 수 있습니다. 매번 입력하는 것은 너무 번거롭죠.

SSH 클라이언트 프로그램에 따라 GUI로 세션을 관리해주기도 합니다만, 명령행에서 ssh 프로그램에서 기본지원해주는 기능을 활용해서 좀 더 편리하게 우분투 서버에 접속해보겠습니다.

아이디/암호 인증이 아니라, 공개키/비밀키 인증 방식을 사용하려 합니다. 공개키/비밀키 쌍을 생성해서 접속할려는 서버에 공개키를 심어두면, ssh 접속 시에 ssh에서 알아서 공개키/비밀키를 매칭해보고 일치한다면 암호 입력없이 자동으로 로그인이 됩니다. 대개의 서버에서 이렇게 인증을 처리합니다.

공개키/비밀키 파일은 윈도우/리눅스/맥 모두 ~/.ssh/ 폴더에 저장/활용합니다. 명령프롬프트에서 "c:/사용자/아이디/.ssh/" 폴더로 이동하셔서 파일/디렉토리 내역을 살펴보시면 known_hosts 파일만 있을 뿐, 다른 파일은 없습니다. 공개키/비밀키 파일이 이미 있다면 id_rsa.pub 파일과 id_rsa 파일이 있어야 합니다.

9ef38b7612b2470abd0e4b547575d62d.jpg

그 파일이 없으시다면 ssh-keygen 명령으로 생성해줍니다. ssh-keygen 명령을 입력하시고, 이어서 물어보는 3번의 프롬프트에는 엔터키를 입력해줍니다. 그럼 공개키/비밀키가 생성이 됩니다.

8cd90b8c939b40b282e90f93f7049de8.jpg

공개키는 말 그대로 공개되는 것이기에 유출되어도 되지만, 비밀키는 절대 유출되어서는 안 됩니다. 유출된 비밀키만 있다면, 쌍이 되는 서버에 암호입력없이 손쉽게 접속할 수 있게 되니깐요. 관리에 주의해주시고 사용하시는 컴퓨터를 바꾸시더라도 .ssh 폴더는 꼭 백업해서 옮겨주세요.

이제 공개키를 우분투 서버에 심어보겠습니다. 명령프롬프트에서는 type 파일명 명령으로 지정 경로의 파일 내용을 표준출력(stdout)으로 출력합니다. 그리고 clip 명령은 표준입력(stdin)으로 받은 문자열을 클립보드에 복사해줍니다. .ssh 디렉토리 안에서 type id_rsa.pub | clip 명령으로 공개키를 클립보드에 복사해주세요.

97fa2d2f4c354252bb2c8dbbb9d5941e.jpg

명령프롬프트에서 ssh 아이디@localhost -p 10022 명령으로 서버에 접속해주세요. 이때 아직 암호를 요구하고 있습니다.

  1. mkdir -p ~/.ssh : 홈디렉토리 밑에 .ssh 폴더가 없을 수도 있으니, 생성해줍니다. -p 옵션을 넣었으니 해당 폴더가 있더라도 오류없이 실행됩니다.
  2. cd ~/.ssh : 디렉토리 이동

공개키를 ~/.ssh/authorized_keys 파일에 추가해야합니다. 이 파일에 다수의 공개키를 등록할 수 있습니다. 파일 끝에 문자열을 추가하는 방법은 다양합니다. vi 에디터를 활용하셔도 좋겠구요. 여기에서는 cat >> 명령을 활용해보겠습니다.

리눅스에서의 파일 편집에 대해서는 리눅스 CLI 에서 텍스트 파일을 편집하는 3가지 방법 포스팅을 참고해주세요.

cat >> ./authorized_keys 명령을 수행하시면 터미널에서 입력을 기다리고 있습니다. 이때 복사했던 공개키를 붙여넣기해줍니다. 명령프롬프트에서는 마우스 우클릭하시면 붙여넣기됩니다. 그리고 입력의 끝을 표현하기 위해 Ctrl-d를 입력하시면 파일 입력이 완료됩니다.

2354bc67424b4bf0ae1862cba0c5dd43.jpg

cat ./authorized_keys 명령은 지정 경로의 파일내용을 화면에 출력합니다. 공개키 문자열이 잘 추가되었는 지도 꼭 확인해주세요.

그리고, 공개키/비밀키 인증이 동작하기 위해서는 ~/.ssh 폴더의 권한이 700 이어야하며, /.ssh/authorized_keys 파일의 권한이 600 이어야 합니다. 아래 명령을 실행해주세요.

  1. chmod 700 ~/.ssh
  2. chmod 600 ~/.ssh/authorized_keys

이제 exit 명령으로 ssh 접속을 종료한 후에 다시 ssh 아이디@localhost -p 10022 접속하시면 암호입력없이 로그인이 됨을 확인하실 수 있습니다.

760d4d091249425c9272b342e292d70c.jpg

아이디/포트번호 지정없이 로그인하기

먼저 윈도우 탐색기에서 "파일 확장명" 옵션을 체크하여, 탐색기 내에서 파일확장자를 노출해주세요. 개발 시에는 확장자를 확인못하면, 본인은 config 파일명으로 파일을 생성했다고 생각하지만 config.txt 파일이라는 엉뚱한 파일명으로 저장되어, 프로그램에서 파일참조를 못하는 경우가 종종 있습니다.

ee3e4564035548709e155e5c32e8bbba.jpg

이제 c:/사용자/아이디/.ssh 폴더에 config 파일을 생성하려 합니다. 절대 config.txt 파일이 아닙니다. 확장자가 없습니다~!!!

config 파일을 생성해주시고,

3cb150bfd2c44d84935a2fc41af9faba.jpg

다음 설정을 입력하시고 저장해주세요.

Host 임의의이름
    HostName localhost
    Port 10022
    User 아이디

"임의의 이름" 항목은 접속에 대한 별칭(alias)입니다. ubuntu 로 지정해보겠습니다. User 항목에는 필히 로그인 아이디를 넣어주세요.

a850d3dacdae4375ac877d3434a31c66.jpg

이제 ssh 별칭 만으로 접속이 가능해집니다. HostName, Port, User 는 자동으로 처리됩니다. 편리하죠? ;-)

da406ca22a1e43c7a99fc3475984591e.jpg

시스템에 설치된 파이썬 버전은 3.8

python --version 명령을 내려보시면, python 명령은 없다고 나옵니다. 대신 python3 --version 명령은 동작합니다.

ec68e1ef8faf49d5abd5916dacc8f88c.jpg

리눅스 시스템에서는 오래 전부터 파이썬을 시스템 기본에서 지원해왔고 수많은 시스템 소프트웨어들이 파이썬으로 작성되어있습니다. 파이썬2와 파이썬3는 동작 상의 큰 차이가 있기 때문에, 파이썬2로 작성된 소프트웨어가 파이썬3로 동작되지 않도록 파이썬3는 python 명령이 아닌 python3 명령으로 동작하는 것입니다. 현재의 리눅스에서는 파이썬2는 제거되었기에 python 명령은 없는 명령인 것이죠.

이는 시스템 명령의 기본이 그렇다는 것일뿐, 유저의 쉘 설정에 따라 python 명령을 추가하실 수 있습니다.

70fcd9d09dde4ecfb237370a7255bdbf.jpg

그리고, 시스템에 기본 설치된 파이썬 버전이 3.8.10 이네요. 2023년 2월 기준으로 파이썬 최신버전은 3.11.2입니다.

파이썬 최신버전을 쓰실려면 시스템에 설치된 파이썬 버전을 업그레이드하시기 보다, 추가로 파이썬을 설치하시기를 권장드립니다. 시스템에 설치된 파이썬은 시스템 소프트웨어들이 사용할테니까, 그대로 두는 것이 좋습니다.

리눅스에서 추가로 파이썬을 설치하실 때 pyenv를 활용하시면 편리합니다. pyenv에 대해서는 곧 다루보겠습니다.

다양한 SSH 클라이언트

윈도우 기본에서 ssh 프로그램을 지원해주지만 조금 불편합니다. 전문적인 ssh 프로그램을 소개합니다.

  • putty : 오랫동안 사랑받아온 SSH 클라이언트입니다. (다운로드 페이지)
  • SuperPutty : putty 기반으로서 여러 세션을 탭으로 관리할 수 있습니다. (공식사이트)
  • Tabby
    • 더 많은 기능을 제공하는 최근에 개발된 오픈 소스 SSH 클라이언트로서, 미려한 UI를 자랑합니다.
    • 공식사이트에서 tabby-1.0.189-setup-x64.exe를 다운받아 설치하실 수 있습니다.

Tabby를 설치하고, 똑같이 SSH 접속을 해봤습니다. 여러분도 해보세요. ;-)

aaf9fb4b504d4381b0bd226a7da4c291.jpg

그리고, 윈도우 컴퓨터 밖에서도 이렇게 윈도우 서버를 경유해서, 우분투 리눅스 서버에 접속할 수 있습니다. 저는 macOS 컴퓨터에서 제 윈도우 아이피를 입력해서 우분투 서버에 SSH로 로그인해봤습니다. (주의: 윈도우에 방화벽이 켜져있다면 방화벽에서 10022 포트를 허용해주셔야 합니다.)

13402d58ae974519a2a9a12885c8eab0.jpg


(계속)

  • 마지막 편집일시 : 2023년 4월 6일 4:08 오후
  • 최초 생성일시 : 2023년 2월 25일 11:47 오전
🌟 본 포스팅이 도움이 되셨다면 댓글 하나 남겨주시고, 널리 공유도 부탁드립니다. 🌟

댓글

Seongwoo_Lukaid's avatar
Seongwoo_Lukaid 2023년 3월 2일 12:17 오후 (KST)

이 시리즈 응원합니다! 배울게 많을 것 같아서 기대하고 있습니다. 참고로 저는 리눅스 pc를 한대 저렴하게 구매해서 집에서 장난감 서버로 사용하고 있습니다. 포트를 열어둬서 외부에서도 ssh접근으로 쉽게 코딩할 수 있어서 좋더라구요