서버개발자가 되는법 [1] - 서버 개발환경 셋팅, AWS EC2만들고 Django 프로젝트 실행해보기

     

목차

2020/09/29 - [Study/서버] - 서버개발자가 되는법 - 목차

 

 

 

 

유튜브 - 간단하게 보실분은 유튜브 동영상을 생략하셔도 됩니다.

 

 

 

들어가기 전에

서버개발자가 되는 법에 대한 글? 강의? 를 준비하면서 가장 많이 고민했던 부분은 '서버 개발환경 세팅을 넣어야하나?' 입니다. 경력 서버 개발자라면 모르겠는데, 주니어 서버개발자한테 회사가 바라는 것은 서버 개발환경을 구축하는 것이 아니기 때문입니다. 물론 케바케이긴 해서 어떤 회사에서는 쥬니어 개발자에게 서버 환경까지 구성해주길 원하기도 할 테지만, 이제 막 시작하는 스타트업이 아니고서는 왠만하면 각자의 서버가 이미 구축된 상태일 것입니다.

 

하지만 서버 환경을 구축하는 내용이 쥬니어 개발자가 할 업무가 아니어도, 어떻게 구성되어 있고 구성해본 경험이 있다는 것은 아주 큰 강점이 될 것 같아요. 내가 면접관으로 들어가도 적어도 AWS 사용 여부 정도는 물어보니까...

 

예외가 또 있는데, 대기업에 IT계열사나 금융권에 들어가기를 원하는 사람들은 이 부분에 우선순위를 조금 낮춰도 될 것 같습니다. 대기업 같은 경우 자체 IDC를 구성해놓고 자신들만의 프레임워크를 쓰기 때문에 회사 밖에 사람들이 그 시스템을 들여다보기 힘듭니다. 가뜩이나 주니어의 경우 그 어마어마한 인프라를 잘 알기는 어려워요. 게다가 대기업 같은 경우 인프라 구축을 위한 팀(요즘엔 DevOps라고 부르는 것 같음)이 존재하기 때문에 개발자가 실제로 서버를 건드는 일이 없습니다.

 

 

여기서 구성할 개발 환경은 AWS EC2를 사용해 Django를 서버에 올리고 미들웨어인 nginx를 사용해서 어플리케이션 서버를 구동시켜보겠습니다. DB는 mysql을 사용할 예정이고 docker를 이용해 같은 EC2 서버에 올릴 예정입니다. 추후 redis도 사용할 예정이긴 한데, 그건 추후에 데이터가 어느 정도 쌓이면 할 예정이라서 살짝 미루도록 하겠습니다.

 

 

 

AWS EC2 만들고 연결해보기

일단 AWS에서 EC2를 만들어야 한다. 이 글이 AWS EC2 만들기! 글은 아니기 때문에 자세한 설명은 구글링을 해보길 권장합니다. 

 

ununtu 이미지 생성

 

예~~~ 전에는 EC2 인스턴스를 누르고 그다음 OS를 선택할 수 있었던 것 같은데 요즘은 OS별로 이미지를 선택하게 되네요. 아니면 전체적인 UI가 바뀐 건지.. 아무튼 EC2 인스턴스 생성 단계 첫 번째에서 AMI(Amazon Machin Image)를 선택하게 됩니다. 여기서는 ubuntu 18.04를 선택합니다. Amazon Linux 2도 많이 쓰기는 하는데 아무래도 ubuntu가 좀 더 레퍼런스가 많이 검색돼서 ubuntu로 결정했어요. 저는 전 회사에서 redhat을 많이 써서 redhat이 편하긴 한데, 개인 프로젝트할 때는 ubuntu가 최고인 듯..

 

 

당연히 1년 공짜로 쓸 수 있는 t2.micro사용

돈 내고 쓸건 아니기 때문에 프리티어로 사용 가능한 t2.micro를 선택합니다. 그밖에 설정은 그냥 Default로 하시면 됩니다. 가장 중요한 건 마지막에 key-pair를 선택하게 되는데, 새로 생성을 누르고 다운받은 *.pem은 ssh접속을 할 때 키로 사용되기 때문에 꼭 잘 보관해주세요~

 

 

인스턴스 목록에 running중인 인스턴스가 있을꺼에요
키 이름이 인스턴스 생성시 만들었던 key-pair와 같은지 확인합니다.
putty에 aws 인스턴스의 ip주소를 적어줍니다.

 

맥에서 작업할 때는 맥 터미널로 접속하는데, 윈도우 터미널은 적응이 잘 안되더라고요. 그래서 putty를 사용해서 접속합니다. ip주소랑 aws에서 다운받은 key를 세팅하면 바로 접속이 됩니다. 

 

putty로 키를 세팅할 때 한 가지 처리해줘야 하는 절차가 있는데, aws에서 키를 받으면 *.pem파일로 받습니다. putty에서는 *.ppk파일이 필요하기 때문에 pem -> ppk 작업을 해줘야 합니다. putty를 설치하면 자동으로 putty gen이라는 프로그램이 설 되는데, 이 프로그램으로 키 형태를 바꿔줄 수 있습니다. 스크린샷을 찍으려는데 자꾸 에러가 나네요. 아래 url을 참고하시면 됩니다.

https://www.puttygen.com/convert-pem-to-ppk

 

putty에서 ip주소와 키를 세팅하고, open을 누르면 명령 프롬프트 창이 하나 실행됩니다. 여기서 어떤 계정으로 로그인할지를 묻는데, ubuntu는 기본 루트 계정이 ubuntu이기 때문에 Login as를 ubuntu로 입력합니다.

 

접속 완료

 

정상적으로 접속이 되면 위 그림처럼 못생긴 터미널 창이 실행됩니다. 폰트도 그렇고 색도 그렇고 정말 올드하네요ㅋㅋㅋㅋㅋㅋ 나중에 터미널을 이쁘게 꾸미는 글도 올릴 테니 참고해주세요.

 

AWS에서 이미지를 생성하고 접속까지 해보았습니다. 아무 짓도 하지 않았기 때문에 서버에는 아무것도 설치되어있지 않습니다. 이제 Django 프로젝트를 만들고 서버에 올려보도록 하겠습니다. 어떻게 서버에 소스를 올리는지를 먼저 고민해보고 따라 하시면 도움이 될 것 같습니다.

 

 

 

 

 

Django 프로젝트 만들고 서버에 올리기

 

일단 로컬에서 Django 프로젝트를 만듭니다. 서버에 올리는 건 git을 활용해 올릴 예정이기 때문에 로컬에서 프로젝트를 만들고 git에 등록한 다음 서버에서 pull 할 예정입니다.

 

github에 올리는 거 맨날 까먹는데 github에서 새로운 repo를 만들면 어떻게 해야 하는지 자세하게 나옵니다. 

 

echo "# tobeserverdeveloper" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/tkdlek11112/tobeserverdeveloper.git
git push -u origin master
                

 

요렇게 하면 됩니다. 

저 같은 경우는 처음에 github에 붙일 때는 커맨드 라인을 쓰지만 그 뒤로는 source tree라는 앱으로 관리하고 있습니다. source tree 짱 편해요. 윈도우용은 좀 별로긴한데;; 맥용은 좋습니다. 

 

source tree, 요런식으로 관리해줍니다.
github에도 잘 올라갔습니다. 

 

기본 프로젝트를 github에 올렸습니다. venv는 빼고 올렸기 때문에 나중에 서버에서 가상 환경을 만들어주고 띄워야 합니다. 일단 로컬에서 이 Django 프로젝트가 정상 동작하는지 테스트해보겠습니다. pycharm에서 run을 실행합니다.

 

정상동작확인

이제 이 소스를 고대로 서버에 올려서 띄워봅시다. 사실 올린다는 의미가 정확하지는 않습니다. 왜냐면 실제로는 로컬에서 github으로 올리고, 서버는 github에서 다운받기 때문이죠. 뭐 전체적으로 봤을 땐 올리는 게 맞긴 한데, 실제로는 서버에서 github에 대고 pull 하는 느낌이라.. 그냥 뭉텅이로 서버에 올린다고 표현하겠습니다. 

 

다행히 ubuntu에 git은 설치되어 있네요. 하지만 python3와 pip를 설치하셔야 합니다. python과 pip를 설치하고 나서 가상 환경을 만들기 위해 virtualenv를 설치합니다. 

 

sudo apt update
sudo apt install python3
sudo apt install python3-pip
sudo apt install virtualenv
pip install virtualenv

 

pip install virtualenv만 해서는 ubuntu에서 실행이 안되길래 sudo apt install virtualenv도 해주었습니다. 이것까지 설치하니까 되더라고요. 이제 가상 환경을 만들고 실행을 시켜봅시다.

 

virtualenv venv --python=python3

루트 경로에서 위와 같은 명령어를 입력하면 venv폴더가 생기고 venv가상 환경이 만들어집니다. python3로 버전을 선택하는 것을 잊지 마세욤.

 

폴더에 이렇게 되었다면 완성입니다!

 

 

이제 가상 머신을 실행시키기 위해 source venv/bin/activate를 입력합니다. 그럼 라인 맨 앞에 (venv)가 생기면서 가상 환경 안으로 진입됩니다. Django를 실행시키기 위해 python manage.py runserver를 입력합니다.

 

요롷코롬 에러나는게 정상입니다.

 

사실 우리가 python3를 설치하고 pip도 설치하고 venv도 만들어줬지만, Django 패키지를 설치하진 않았습니다. 그 밖에도 여러 패키지가 필요할 텐데 이를 동기화시키려면 requirements.txt 파일이 필요합니다. 로컬에서 pip freeze > requirements.txt를 입력합니다.

 

 

pip freeze는 설치된 패키지 목록을 보여주는 명령어입니다.

 

명령어를 실행하면 루트 폴더에 requirements.txt 파일이 생긴 것을 알 수 있습니다. 이걸 git에 등록해서 푸시하고, 서버에서 pull로 받아봅시다.

 

 

source tree에서 새로생긴 파일을 commit하고 바뀐 내용을 즉시 푸시!!!
서버에서는 pull하기! requirements.txt가 생겼습니다.

 

이제 requirements.txt에 명시된 패키지를 설치해보겠습니다. 간단하게 명령어 한 줄이면 됩니다.

 

pip install -r requirements.txt

 

자기가 알아서 버전에 맞게 설치합니다

 

이렇게 requirements.txt 파일을 활용하면 로컬에서 설치한 패키지들을 서버에서도 똑같이 설치할 수 있습니다. 로컬과 서버의 패키지를 동기화시켜주는데 아주 도움을 많이 주고 있는 녀석입니다. 서버가 여러 대라면 더욱 그렇구요. 이제 다시 서버를 가동해봅니다. runserver~!! 는 또 뭐라고 빨갛게 나오네요...

 

migrate 하래요

migrate 하라니까 migrate 해줍니다... 그리고 다시 실행!

 

이제 정상가동됩니다!

이제 정상가동되었습니다. 정말 제대로 되었는지 서버에 접속해볼까요? 아까 putty로 접속했던 aws의 ip주소를 입력하고 뒤에 포트번호 :8000을 입력해봅시다.

 

아마 입력하면 페이지를 찾을 수 없다고 나올 겁니다. ^오^

일단 여러 가지 이유에서 안될 건데, 첫 번째는 Django내에서 보안이 걸려있고, 두 번째로 runserver실행 시 IP주소를 127.0.0.1로 하면 안 되고, 세 번째로 aws에서 방화벽 설정이 되어있습니다. 하나씩 풀어볼게요.

 

일단 첫 번째는 tobeserverdeveloper/settings.py에 있습니다.

 

tobeserverdeveloper/settings.py

...

ALLOWED_HOSTS = ['*'] # '*'를 추가해서 모든 호스트를 허용합니다.

...

 

두 번째는 runserver 실행 시 뒤에 옵션으로 0.0.0.0:8000을 실행하면 됩니다.

세 번째는 AWS console에 들어가서 설정합니다.

 

인스턴스에 보안그룹을 클릭하면 보안그룹 설정 페이지로 이동됩니다.
인바운드 규칙 편집을 선택합니다. 기본적으로 SSH만 등록되어 있을거에요

 

장고에서 사용할 8000번 포트를 등록합니다. 위치무관을 등록하면 ::/0이 등록됩니다.

 

이제 모든 준비는 끝났습니다. 서버에서 python manage.py runserver 0.0.0.0:8000을 입력합니다. 아 그전에 소스를 수정했으니 git에 push 하고 서버에서 pull 하는 것을 잊지 맙시다. (저는 까먹어서.....)

 

드디어 실행 완료~!

드디어 서버에서 Django 프로젝트가 돌아갑니다. 앞으로 로컬에서 개발하고 git에 push 하면, 서버에서 git pull을 통해 변경된 소스를 반영할 수 있게 되었습니다. 

 

이제 남은 작업은 docker로 mysql 띄워서 연동하기와 nginx세팅입니다. 하나에 포스트에 쭈욱 쓰려고 했는데 생각보다 양이 많아졌네요. 

 

남은 몇 개는 다음 포스팅에 적기로 하고 이번 포스팅은 여기서 마무리하겠습니다.

 

 

정리하기

 

이번 포스팅에서는 AWS에서 EC2 인스턴스를 생성하였고, 로컬 환경에서 Django 프로젝트를 만들어 Github에 연동했습니다. 그리고 AWS EC2에서 git을 활용해 우리가 만든 Django 프로젝트를 불러와 실행해 보았습니다. 생각보다 많은 것을 했군요.

 

이제 어느 정도 환경을 잡아놨기 때문에 소스를 수정하고 서버에 반영하기 쉬워졌습니다.

 

1. 로컬에서 소스 수정

2. commit 후 push

3. 서버에서 git pull로 변경된 소스 반영

 

회사에서는 보통 이런 일련의 과정을 좀 더 고도화하고 자동화해서 CI/CD라는 이름으로 부르고 있습니다. CI/CD에 대한 개념은 구글링 하시면 쉽게 나오기 때문에 참조하시면 될 것 같습니다.

 

다음 포스팅에서는 얘기한 대로 docker를 이용한 mysql DB 생성 후 Django 연동, nginx를 이용한 django 어플리케이션 실행을 하도록 하겠습니다.  

 

 

 

 

2020/05/05 - [Study/서버] - 서버개발자가 되는법 [2] - 서버 개발환경 셋팅, Nginx와 uWSGI 설치해서 연결하기 + docker로 mysql 띄우기

 

 

 

 

 

 

 

 

 

 

반응형

댓글

Designed by JB FACTORY