내일배움단 Web5.2
[웹개발 종합반] 5주 2일차 개발일지(5주 9-19강, 숙제)
💻TIL Web.502
웹 서비스 런칭하기
1. 내 프로젝트를 서버에 올리기
서버는, 기본적으로 클라이언트(브라우저)가 요청하면 브라우저에 그릴 것을 주거나, 뒤에서 Ajax로 요청을 하면 그에 대한 답변으로 데이터를 주거나, 가운데에서 클라이언트의 요청을 받는 역할을 수행한다. 어떤 컴퓨터든지 서버의 역할을 수행할 수 있으므로, 서버는 그냥 컴퓨터라고 생각해도 된다.
웹 서비스를 런칭하기 위해서는, 클라이언트의 요청에 항상 응답할 수 있는 서버에 프로젝트를 실행시켜야 한다. 서버가 클라이언트의 요청에 언제나 응답하기 위해서는, 컴퓨터가 항상 켜져 있고 프로그램(app.py
)이 실행되어 있어야 한다. 또한 모두가 접근할 수 있는 공개 IP주소(Public IP Address)로 웹서비스에 접근할 수 있도록 해야 한다. 앞서 말했듯 서버=컴퓨터이기 때문에, 외부 접속이 가능하게 한 다음 내 컴퓨터를 서버로 사용할 수도 있다. 하지만 보안 등 여러 문제들로, 통상적으로는 내가 사용하는 컴퓨터 대신 클라우드 환경, 즉 인터넷 환경의 컴퓨터를 사서 프로그램(코드)을 올려둔 후 사람들에게 그 페이지로 접속하게 만든다. AWS(Amazon Web Service)라는 클라우드 서비스에서, 항상 켜둘 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용해보자.
2. AWS 서버 구매하기
먼저, AWS 로그인 후 EC2 콘솔 페이지에 접속, 페이지 오른 상단 지역이 ‘서울’로 설정되었는지 확인한다. 페이지 왼쪽 탭 바를 보면 인스턴스가 보이는데, 이는 컴퓨터 한 대 한 대를 의미한다.
1) EC2 구매하기


인스턴스 > 인스턴스 시작 > AMI: Ubuntu Server 선택 > 인스턴스 유형: t2.micro
Ubuntu Server는 리눅스 OS(Operation System, 운영체제) 기반이다. 하지만 우리가 자주 사용하는 OS는 윈도우 또는 맥이다. 리눅스 운영체제의 특징은 오픈소스, 즉 무료라는 것이다. 서버는 통상적으로 여러 대의 컴퓨터를 운영해야 하므로 라이센스 비용이 들지 않는 오픈소스 OS를 이용한다. Ubuntu는 여러 리눅스 계열들 중 하나다.
새 키 페어 생성 ‘spartakeypair’ > 인스턴스 시작
인스턴스(컴퓨터)를 샀기 때문에, 나는 해당 컴퓨터에 원격으로 접속해 컴퓨터를 조작하고, 프로그램을 깔고 실행할 수 있는데, ‘키’란 컴퓨터에 원격으로 접속할 때 필요한 키다. 이 키는 잊어버리면 복구할 수 없으므로 잘 기록해 둘 것!


위 사진과 같이 인스턴스(컴퓨터)가 생성 후 켜진 모습을 확인할 수 있다. AWS는 구매한 t2.micro 사이즈의 인스턴스에 대해 1년 동안만 무료 이용이 가능하다. 1년이 지나면 자동 결제가 되기 때문에, 오른쪽 클릭 후 ‘인스턴스 종료’를 누르면 컴퓨터를 반납할 수 있다.
2) EC2 원격 접속하기
윈도우는 Git Bash, Mac은 terminal을 켜고, 아래와 같이 입력한다. ssh -i
뒤의 주소는 바탕화면에 저장해둔 키페어 주소를 그대로 끌어 온다. 엔터키 > yes 를 치면 ubuntu@ip-
형식이 뜨고, Git Bash 창 주소도 같은 형식으로 바뀌며 원격 접속이 완료된다.
$ ssh -i 키페어주소 ubuntu@퍼블릭IPv4주소
3) 리눅스 명령어 배워보기
리눅스에서는 대부분 마우스가 없으므로 모든 것이 명령어로 이루어진다. 폴더 만들기 등의 쉬운 작업들도 명령어로 실행된다. 자주 사용되는 간단한 리눅스 명령어들을 배워보자.
mkdir sparta
mkdir
은 ‘make directory’의 약자로, ‘sparta’라는 이름의 폴더를 만드는 명령어다.
ls
ls
는 ‘list’의 약자로, 지금 내가 위치한 폴더에 어떤 파일이나 디렉토리가 있는지를 알려준다. ls
엔터를 치면 sparta가 뜨는데, 이는 지금 내 위치(~
)에서 sparta
라는 폴더가 하나 있다는 뜻이다.
cd sparta/
cd
란 ‘change directory’의 약자로, sparta 폴더로 들어가라는 명령어다. 명령어를 실행시키면 현재 위치 경로가 ~
에서 ~/sparta
로 바뀐다.
cd ..
반대로 폴더에서 나가고 싶다면 cd ..
을 입력한다. 실제 아래 FileZilla 프로그램을 실행시키면, 모든 폴더의 최상단에 ..이라는 폴더가 있는데, 이를 클릭하면 상위 폴더로 이동한다.
3. 서버 세팅하기
1) filezilla를 이용해 파일 올리기
FileZilla는 내 컴퓨터에 있는 파일을 업로드 또는 다운로드하는 프로그램이다. 프로그램을 실행하고, 화면 왼쪽 상단 ‘사이트 관리자 열기’를 클릭한 다음 아래 사진과 같이 세팅한다. ‘프로토콜’은 STFP, ‘호스트’는 구매한 인스턴스의 퍼블릭 IPv4 주소를 입력한다. 포트는 반드시 22를 사용해야 하며, ‘로그온 유형’에서 키 파일을 선택, ‘사용자’에는 ubuntu를 입력하고 ‘키 파일’은 바탕화면의 키페어 파일을 선택한다.
세팅 후 ‘연결’을 누르면 프로그램 오른쪽 창이 아래 사진처럼 뜨는데, 이는 내가 산 컴퓨터의 폴더 구조다. 앞서 만들었던 sparta 폴더도 볼 수 있다. 프로그램 왼쪽 창은 내 컴퓨터, 오른쪽 창은 내가 파일을 올리고 받을 컴퓨터다.
2) 파이썬 파일 실행하기
print('hello sparta!!')
위 코드가 담긴 ‘test.py’를 내 컴퓨터에서 구매한 서버의 sparta 폴더로 옮긴다. cd sparta/
로 폴더 안에 들어간 다음 ls
를 입력하면 test.py
가 뜬다.
python3 파일명
파이썬 파일을 실행시키려면 위 명령어를 입력한다. 현재 python3 버전을 쓰고 있으므로 python3
을 입력한다. python3 test.py
를 입력하고 엔터를 치면 hello sparta!!
가 출력되는 것을 볼 수 있다.
3) 서버 환경 통일하기
내 컴퓨터에서 mongoDB 등 여러 프로그램을 깔아서 서버를 만들고 데이터를 관리한 것처럼, 구매한 인스턴스에도 이러한 프로그램을 설치하고, 명령어를 통일하고, 업그레이드하는 등의 작업이 필요하다. 통상적으로 이러한 세팅들은 실제 업무에서는 인프라 엔지니어분들이 해두시는 경우가 많다. 링크된 스크립트를 이용해 서버를 한번에 세팅할 수 있다. 다운로드된 파일을 EC2의 sparta 폴더 안에 끌어 옮긴다. 이 파일은 Git Bash에서 입력할 명령어를 모아둔 파일이다. Git Bash 창으로 돌아가 ls
를 입력하면 test.py와 initial_ec2.sh 파일이 뜨는 것을 볼 수 있다.
sudo chmod 755 initial_ec2.sh
파일 안의 명령어들이 실행될 수 있도록 파일 권한을 조정하기 위해 위 코드를 입력 실행한다. 파일명은 두세 글자를 입력하고 Tab 키를 누르면 자동 완성된다.
./initial_ec2.sh
파일 실행을 위해 위 코드를 입력 실행한다.
initial_ec2.sh 파일은 EC2 컴퓨터의 시간대를 한국으로 맞추고, python3
를 python
으로 바꾸는 등의 서버 세팅과, pip나 mongoDB 설치와 같은 기능을 담고 있다. 이러한 기능들을 구글에 ‘리눅스 ubuntu 명령어’로 검색해 한 줄 한 줄 복사 붙여넣기해도 되지만, 세팅되어 있는 스크립트 파일을 이용하는 것도 편리한 방법이다.
서버 세팅 후, mongoDB가 설치되었으므로 Git Bash 창에 mongo
를 입력하면 mongoDB 안으로 접속할 수 있다. mongoDB에 접속한 상태에서는 mongoDB에 명령을 내리는 상태로 창이 바뀐다. exit
을 입력하면 프로그램이 종료된다.
4. Flask 서버 실행/pip로 패키지 설치하기
# flask 서버 기본 코드
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
파이참에서 ‘app.py’ 파일을 생성, 위 코드를 붙여넣고 실행한다. 다음으로 FileZilla에서 해당 파일을 EC2 서버로 전송한 후, Git Bash에서 python app.py
를 입력 후 실행한다. 그러면 출력창에 ModuleNotFoundError: No module named 'flask'
라는 에러가 뜬 것을 볼 수 있다. EC2 서버에도 파이참에서 flask
, requests
, pymongo
등 여러 라이브러리를 설치한 것처럼 패키지들을 설치해야 한다.
pip install flask
pip install pymongo
위 코드와 같이 pip
를 이용해 flask
와 pymongo
를 설치한다. pip
는 파이썬의 라이브러리들을 쉽게 설치해주는 라이브러리로, pip install
명령어를 이용하면 여러 프로그램들을 쉽게 깔 수 있다.
5. AWS에서 포트 열어주기
Git Bash 창에서 python app.py
명령어로 flask 서버를 실행한 후, 크롬 브라우저 주소창에 퍼블릭IP주소:5000
을 입력한다. 이는 내 컴퓨터인 ‘localhost’ 대신, EC2 컴퓨터(서버)에서 파일을 실행시키는 것이다. 하지만 이 페이지는 아직 작동하지 않으며, AWS에서 추가 설정이 필요하다.
위 주소가 작동하지 않는 이유는 AWS 서버 자체에서 방화벽처럼 포트들을 막아두었기 때문이다. 이 포트들을 풀어주어야 주소에 접속이 가능하다.
인스턴스 > 하단 ‘보안’ 탭 > 보안 그룹 > 인바운드 규칙 편집 > 규칙 저장
위 사진처럼 포트 5000, 포트 80(http 기본 포트), 포트 27017(몽고DB)를 추가한다. 설정을 마치고 다시 크롬 브라우저 주소창에 퍼블릭IP주소:5000
을 입력하면, ‘This is Home!’ 텍스트가 있는 기본 화면이 뜬다. 이 주소는 내 컴퓨터를 비롯한 어느 컴퓨터에서나 접속할 수 있다. 따라서 만든 프로젝트를 EC2 서버에 올리기만 하면 모두가 해당 프로젝트를 볼 수 있게 되는 것이다.
Git Bash 창에서 app.py
를 실행시키면 다른 명령어를 인식하지 못한다. 이때 Ctrl + C
를 누르면 프로그램을 끌 수 있다. 프로그램을 끈다는 것은 곧 서버를 끄는 것이기 때문에, 프로그램을 종료하면 사이트의 연결도 끊긴다.
Leave a comment