-
개발일지 Week 5 / 웹서비스 런칭하기 (AWS EC2)예대 출신의 코딩 도전기 2021. 9. 12. 23:47
예대출신의 코딩 도전기 5주차
공부하며 정리한 내용입니다. 틀린 사항이 있으면 덧글로 알려주시면 감사하겠습니다.
웹서비스 런칭하기
마지막 5주차는 그동안 만든 웹서비스를 런칭하기 위해 필요한 부분을 다룬다. 도메인과 AWS 서버 구매, 서버 세팅 등을 다루었다. 그 중 중요하다 여겨지는 내용을 추렸다.
- 웹서비스를 런칭하기 위해서는 클라이언트의 요청에 항상 응답할 수 있어야한다. 그러기 위해서는
- 컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야한다.
- 모두가 접근할 수 있도록 공개 IP 주소를 주어야함.
- 이를 위해 AWS라는 클라우드 서비스를 이용한다.
AWS 서버 구매하기
- AWS의 인스턴스는 무엇인가?
인스턴스는 클라우드의 가상 서버입니다. 시작 시 구성은 인스턴스를 시작할 때 지정한 AMI의 사본입니다.
하나의 AMI에서 다양한 인스턴스 유형을 실행할 수 있습니다. 인스턴스 유형에 따라 인스턴스에 사용되는 호스트 컴퓨터의 하드웨어가 기본적으로 결정됩니다. 각 인스턴스 유형은 서로 다른 컴퓨팅 및 메모리 기능을 제공합니다.
(출처 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-instances-and-amis.html )
- 상단의 Launch Instance 클릭
- AMI 선택 : 수업 실습용으로 Free tier에서 사용 가능한 것으로 선택한다. Ubuntu Server 18.04 LTS (HVM), SSD Volume Type 선택
- Instance Type 선택 : t2.micro
- launch 후, 새로운 키페어를 생성한다.
키페어란?
- 원격 컴퓨터(인스턴스)에 원격 접속을 위한 보안 키. 이걸 잊으면 AWS측도 안 찾아준다.
EC2 접속하기
- SSH(Secure Shell Protocol)란?
다른 컴퓨터에 접속할 때 쓰는 프로그램으로 보안이 상대적으로 뛰어남. 접속할 컴퓨터의 22번 포트가 열려있어야 접속 가능. AWS EC2의 경우, 이미 22번 포트가 열려있다.
맥 OS는 ssh가 있어서 명령어로 바로 접근 가능하다. 윈도우는 git bash라는 프로그램을 이용해야한다.
#Mac OS에서 EC2 접속하는 방법
- Terminal 실행
- 받은 나의 Keypair의 접근 권한을 바꿔주기
sudo chmod 400 받은키페어를끌어다놓기
- SSH로 접속하기
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내IP #다음과 같은 모습이다 ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
간단한 리눅스 명령어
- mkdir(스페이스바 후 이름넣기) : 라는 폴더(directory)생성하기
- ls : 현 위치에 있는 디렉토리, 파일등을 확인 한다
- cd 이름/ : '이름'에 해당하는 디렉토리에 들어감
- cd .. : 현재 디렉토리에서 나가기
서버세팅하기
- Filezilla를 이용해 서버에 파일을 업로드하였다.
Filezilla를 실행해서 좌상단에 있는 사이트 관리자 아이콘을 클릭, New site에 다음과 같이 세팅한다. (포트 입력칸에 22입력)
그 후로는 마우스로 드래그해서 파일을 업로드/다운로드 할 수 있다.
서버환경 통일하기
- 막 구매한 EC2는 깡통상태라 아무 것도 없기 때문에, 세팅(업그레이드, DB설치, 명령어 통일 등)을 해줘야한다.
- 실제 업무에서는 인프라 엔지니어 또는 개발 팀장급이 하는 경우가 많다고 한다.
- 강좌에서는 편한 진행을 위해 **세팅용 .sh파일 (셸 스크립트)**를 공유해주었다.
- 세팅 내용은 다음과 같다 :
- 한국시간 세팅
- 파이썬 (python3 → python)
- pip( pip3 →pip)
- mongoDB 설치
- 포트포워딩 (80포트 → 5000포트)
포트포워딩(Port Forwarding) 개념
포트번호를 떼고 접속하고 싶다..!
설정 전에는 http://내AWS의IP/:5000 으로 접속이 되는데, 여기서 포트번호 없이 접속할 수 있도록 하는 작업이다.
- http 요청에서는 80포트가 기본이기에, 굳이 :80을 붙이지 않아도 자동으로 연결된다. (우리가 접속하는 사이트들은 뒤에 ':80'이 숨어 있는 것!)
- 이런 자동 접속을 이용하기 위해, 우리는 80포트로 오는 요청을 5000포트로 전달하게하는 포트포워딩을 사용한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
AWS에서 포트 열기
다음과 같이 flask 서버를 위한 5000, mongoDB를 위한 27017 포트를 열어주었다.
포트 80은 https의 기본 포트 번호이다. 5000은 flask, 27017는 pymongo
nohup 설정하기
SSH 접속을 끊어도 서버가 동작하도록 만들기
- 원격접속 종료시에도 서버 돌아가게 하기
nohup python app.py &
- 서버 종료하기 - 강제로 종료하는 방법
# 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep 'app.py' # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값]
og 태그 설정
링크 공유 할 시 정보를(이쁘게) 잘 보여줘서 세팅하는 것이 좋다. <head>~</head> 사이에 넣기
<meta property="og:title" content="내 사이트의 제목" /> <meta property="og:description" content="보고 있는 페이지의 내용 요약" /> <meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />
5주차 개발일지를 마무리하며
강의 수간 기간 동안 프리랜서 일을 겸하면서 강의 마감일에 겨우 맞추어 완강하게 되었다. 그 동안 만든 것이 실제 도메인 주소를 갖고 인터넷에 서비스되는 것을 보는 게 처음이라 신기하고 재밌다. 그동안 강의를 들으며 가장 궁금한 것은 자바스크립트와 API를 만드는 부분이었던 것 같다. 앞으로 관련 내용을 더 배우고 싶다.
'예대 출신의 코딩 도전기' 카테고리의 다른 글
개발일지 Week 4 / Flask 프레임워크를 이용해 서버 구동, API만들기 (0) 2021.09.08 개발일지 Week 3 / Python 웹스크래핑, MongoDB (0) 2021.08.10 Week 2 / JQuery, Ajax 기초와 다뤄보기 (0) 2021.07.14 M1 Mac 환경에 Homebrew(홈브루) 설치하는 법 (0) 2021.07.12 HTML/CSS 기초를 활용해 미니 쇼핑몰 웹페이지 만들기 (0) 2021.07.06