웹 서비스를 런칭하기 위해선...
- 언제나 요청에 응답할 수 있어야 한다. (컴퓨터가 항상 실행 중이어야 한다)
- '모두가 접근할 수 있는' 공개 IP주소로 내 서비스에 접근할 수 있어야 한다.
서버는 그냥 '컴퓨터'이기 때문에 우리는 가상 컴퓨터인 Amazon EC2(인스턴스)를 이용해 구동하기로 한다.
주의사항
아마존은 자선사업가가 아니기 때문에 컴퓨터를 무제한 제공해주지는 않는다.
free tier로 가입을 하더라도 컴퓨터를 계속 켜놓으면 돈이 나간다.
예전에 서버 구동을 따라해보고 깜빡 잊었다가 돈이 나갔었던 기억에 이같은 경고 메세지를 남긴다.
가끔 선량한 대학생이 1학년때 팀프로젝트로 EC2를 돌렸다가 까먹고 대학교 4학년때 billing으로 몇백만원이 청구되었다는 썰도 심심찮게 들리니,
참고로 인스턴스 종료를 누르면 컴퓨터를 반납하는거라서 여러분들의 소중한 작업물이 다 날라간다.
EC2 연결하기
Git bash에서 SSH(Secure Shell Protocol)이라는 방식으로 접속을 할 건데, SSH방식은 그냥 조금 더 보안에 안전한 프로토콜이라고 생각하면 된다. pem키를 받아서 써야 한다.
모자이크된 부분에 본인의 키 위치를 넣고, ubuntu@뒤에는 인스턴스의 공용 IP Address를 누르면 된다.
만약 인스턴스를 중지했다가 다시 켤 경우, 공용 IP주소가 변하기 때문에 바꿔줘야 한다.
다음은 flask 환경에서 설정하는 3단계이다.
#1. python3 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
#2. pip3 -> pip
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
#3. port forwarding
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
- 첫 번째 명령어는 python3 ~~~~ 라고 해야하는 명령어를 python ~~~~로 바꿔주는 명령어다.
프로그래머는 귀찮아해야한다. 그래야 더 나은 방식을 생각할 수 있으니까. - 두 번째 명령어는 flask 환경에서 구동할 때 쓰이는 패키지들을 관리해주는 패키지 툴인 pip3를 설치하고,
이름을 pip로 바꿔주는 것이다. - 이게 가장 중요한데 우리가 계속 진행해왔던 localhost:5000에서 이 포트번호 5000을 포트번호 80으로
리다이렉팅 해준다는 것이다. 리다이렉팅과 포워딩의 차이는 추후에 다시 설명하겠다.
그리고 Filezila에서 다시 연동하고 아마존의 인스턴스에 실행할 app.py나 index 등을 넣어준 후,
ls(list : 데이터 목록 보여주기)
cd(change directory : 디렉토리 변경)
mkdir(make directory : 디렉토리 생성)
pip install packagename(파이썬의 packang
등의 명령어를 입력해 '알아서 잘' 하고 python app.py 명령어로 가동시키면 된다.
인바운드 규칙 추가
인바운드 규칙 추가는 우리가 사용할 인스턴스의 포트번호를 추가해준다.
이렇게 TCP/5000 포트와 HTTP/80포트를 열어주어야 비로소 우리가 만들었던 홈페이지에 접속 가능하다.
80포트의 비밀
우리가 접속하는 대부분의 인터넷 사이트(네이버, 다음 등)는 사실 #http://www.naver.com:80 인데, 80포트가 생략된 것이다. 80은 생략이 가능하기 때문에. 그래서 아까 우리가 포트포워딩으로 5000번을 80에 연결해놓은 것이다. 그러면 접속할때마다 사이트 뒤에 5000포트를 생략해도 된다.
이 포트포워딩은 리눅스에서 자동 지원된다.
nohup 설정하기
nohup은 우리가 인스턴스에서 구동한 app.py를, git bash를 종료해도 구동될 수 있도록 하는것이다. 방법은 매우 쉽다.
그냥 git bash에 nohup python app.py를 써주면 계속 돌아간다.
나는 왜 그런진 모르겠지만 습관적으로 nohub를 써주는 경향이 있어 조금 더 주의를 요해야 한다. 왜 그럴까?
끌때는 다음과 같은 코드를 넣어주면 된다.
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill
OG(Open Graph) tag
OG태그는 위의 사진과 마찬가지로 미리보기 image, title, description등을 삽입하는 것이다.
그냥 <head></head>안에 다음과 같은 3줄을 심어주면 된다.
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="이미지URL" />
이로써 길다면 길고 짧다면 짧았던 5주차(라고 쓰고 5시간짜리) 수업이 끝났다.
웹 개괄을 이보다 더 잘 나타내준 수업은 없었다. 정말 감사한 수업이었다.
'웹개발 > 항해' 카테고리의 다른 글
항해 2주차, 객체지향으로 가는 길 - Week I learned (0) | 2023.01.30 |
---|---|
항해 OT주차 - Week I Learned(수정중) (0) | 2023.01.15 |
항해 웹개발 종합반 4주차, 서버 연습(2) (0) | 2023.01.04 |
항해 웹개발 종합반 4주차, 서버 연습(1) (2) | 2023.01.04 |
항해 웹개발 종합반 4주차, 서버 (0) | 2023.01.04 |