학습 내용 요약
- 클라우드 서버
- 프로젝트 공개 배포
- 추가 사항
1) 정의
클라우드 환경에서 운영되고 인터넷을 통해 접근할 수 있는 가상 서버. 물리적 서버와 달리 서버를 구축할 물리적인 공간이 필요 없기 때문에 구축하는데 큰 비용이 들지 않는다. 또, 가상의 공간에 구축되기 때문에 사용 시 네트워크 환경으로 쉽게 접근해서 이용할 수 있다.
클라우드 서버의 유형에는 크게 두 가지를 많이 사용하는데, 공개용(public)과 내부용(private)으로 나뉜다. 이 중 공개용 클라우드 서버를 이용해 개발 공부를 해보자.
2) 많이 이용하는 서비스
크게 3개 정도의 기업이 운영하는 클라우드 서버가 있다.
① AWS(아마존)
② Azure(마이크로소프트)
③ GCP(구글)
이들 중 AWS가 가장 많이 사용되는 서버이고, 이번 부트캠프에서 활용하여 개발 공부를 할 것이다.
1) 프로젝트 배포
프로젝트를 배포한다는 것은 누구나 서비스를 이용할 수 있도록 공개적으로 런칭한다는 뜻이다. 누구나 서비스를 이용하려면 배포하는 측이 항상 클라이언트의 요청에 응답할 수 있는 서버에 프로젝트를 실행시켜야 한다. 그러기 위해서는 아래와 같은 조건이 필요하다.
2) 준비 사항
(1) 클라우드 서버 구매
우선, 아마존 웹 서비스 EC2에 들어가서 시작하기 로그인 및 회원가입 후 시작하기 탭에 들어간다. 그리고 서버 구매 단계를 따라한다.
(2) EC2 접속
서버 구매 후, EC2에 접속해 보자.
※ EC2에 접속하는 컴퓨터는 22번 포트에 열려있어야 접속 가능하다고 한다. AWS EC2의 경우, 이미 22번 포트가 열려있다.
SSH라는 다른 컴퓨터에 접속할 때 쓰는 보안이 뛰어난 프로그램으로 접속하는데, 윈도우 OS는 SSH가 없기에 git bash로 접속해보자.
리눅스는 윈도우와 달리 마우스가 없어 쉘 명령어로 OS를 조작한다. 그래서 잠깐 리눅스 커널에서 쓰는 명령어 몇 가지를 알아보자.
(3) 서버 세팅
서버 환경 통일을 위해 git bash에서 아래의 명령어를 입력하자.
python3 명령어를 python으로 쓸 수 있게 함
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
pip3 설치
sudo apt-get update
sudo apt-get install -y python3-pip
pip3 대신 pip라고 쓸 수 있게 함
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
포트 포워딩(80포트로 들어오는 요청을 5000포트로 넘김)
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
그리고 FileZilla를 설치 후, 간단히 작성된 python파일을 올려보자.
파일질라 실행 후 설정
정보 입력 후 확인(host: 내 ec2 ip, user: ubuntu)
왼쪽(내 컴퓨터)에서 오른쪽(ec2서버)로 파이썬 파일 드래그&드롭
git bahs에서 python '파일명.py' 입력하고 파이썬 파일 실행
(4) flask 서버 실행
파이썬 패키지 설치
pip install '패키지명' 입력하고 설치(flask, pymongo, dnspython)
AWS에서 5000포트를 열어주기
AWS EC2에서 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있다. 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.
우선, ec2 관리 콘솔에서 보안그룹을 눌러 들어간다.
다음 과정을 진행한다.
규칙 추가로 두 가지 포트 추가, Anywhere-IPv4 클릭, 여기서 80포트는 HTTP 접속을 위한 기본 포트이고, 5000포트는 flask 기본 포트이다.
리눅스를 이용하면 기본으로 제공하는 포트 포워딩으로 통해 80포트로 오는 요청을 5000포트로 전달하게 할 수 있다. 위에서 git bash로 미리 작업했으니 이용해보자.
※ ssh 접속을 끊어도 서버가 계속 작동하도록 하기
git bash에서 nohup python app.py & 입력
서버를 강제로 종료시키려면
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill 입력
(5) 도메인 준비
도메인 주소까지 준비해서 만든 웹사이트를 다른 사람과 공유하려고 주소를 공유해서 카톡 같은 곳에 공유할 때, 이미지와 타이틀 등의 정보가 보이도록 하려면 추가적인 설정을 해야 한다. 바로 og태그를 html파일에 작성해야 한다.
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="이미지URL" />
이렇게 입력하고 공유하면, 아래와 같이 정보가 뜰 것이다.
만약, 이미지 등을 수정했는데 기존 og image가 그대로 나온다면 각 sns사이트에서 처음 것을 한동안 저장하기 때문이다. 따라서 각 사이트의 개발자 페이지에서 og 태그 초기화 작업을 해야 한다.
물론, 작업 파일을 수정할 때는 서버를 끄고 작업 후 다시 업로드 하고 서버를 실행해야 한다.
어렵거나 완전히 이해 못한 내용
한 번씩 따라 하면서 전반적인 흐름이 어떤지는 이해했다. 그리고 생각보다 복잡하거나 어렵지 않아서 다행이다. 그래도 일련의 과정을 혼자서 생각해보고 그려보라고 하면 버벅일 것 같다. 개인 과제든 팀 과제든 하면서 진행 과정을 손에 익혀야 자연스럽게 작업할 수 있을 것이다.