사전 스터디(웹개발 종합반 5주차)

[수업 목표]
1. Flask 프레임워크를 활용해서 API를 만들 수 있다.
2. '버킷리스트'를 완성한다.
3. EC2에 내 프로젝트를 올리고, 자랑한다!

✍️새로 학습한 내용


프로젝트 배포하기

배포한다는 것은 누구나 내가 만든 서비스를 이용할 수 있도록 하는 웹 서비스 런칭이다.
즉, 클라이언트가 브라우저를 통하여 요청 시 응답을 줄 수 있는 서버에 프로젝트를 실행시켜주는 것이다. 

 

  • 요청에 응답하기 위해서는
  1. 서버를 담당하는 컴퓨터가 항상 켜져있고, 프로그램(=프로젝트)를 실행하고 있어야 한다.
  2. 외부에서 접근 가능한 공개 IP주소로 웹 서비스에 접근할 수 있도록 해야한다.

 

AWS EC2 클라우드 환경 서버 구축

1.)AWS에 접속하여 로그인 수행(계정이 없을 시 회원가입 진행 후 로그인)

 

2.) 언어/ 지역을 맞게 변경해준다

3.) EC2 서버 구매 : 검색해서 EC2로 이동 -> 인스턴스 클릭

(EC2 인스턴스 : https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2) 

 

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2%29

 

ap-northeast-2.console.aws.amazon.com

4.) 인스턴스 시작 클릭

5) 키 페어 생성

6. 인스턴스 시작 클릭 -> 인스턴스 상태(대기중 -> 실행 중)

  • EC2 서버 종료방법(1년 후 자동결제 방지)

인스턴스 중지 : 컴퓨터를 끄는 것

인스턴스 종료 : 컴퓨터를 반납하는 것 <- 자동결제 방지를 위해서는 기간이 지나기 전 반납

 


AWS EC2 접속

  • SSH(Secure Shell Protocol)
다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. 

 

  • Window에서 접속 : ssh가 없기에, git bash 프로그램 사용
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피

 

  • AWS IP주소 찾기

👉 접속완료

 


AWS EC2 서버 세팅하기

# python3 -> python (파일 실행을 위한 세팅)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

# pip3 -> pip (패키지 설치를 위한 pip 세팅)
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

# port forwarding (이후 접속 포트를 위한 세팅)
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

 


로컬 PC 프로젝트 EC2 서버로 옮기기(파일질라)

  • EC2 서버에서 패키지 설치
pip install 패키지명(flask, pymongo, dnspython ← 등등 프로그램 수행에 필요한 패키지가 있으면 설치)

 


Flask 서버 실행

python app.py 

http://[내 EC2 IP]:5000/ << 처음에는 포트가 열려있지 않아서 접속이 안될 것이다.
  • EC2 서버 포트 열기

👉 다시 접속 시 접속완료

👉 http://[내 EC2 IP]:80/ , http://[내 EC2 IP]:5000/ , http://[내 EC2 IP]  모두 접속 가능

→ 웹 접속 기본 포트는 80이기에 생략가능하며, 80 → 5000으로 포트포워딩을 해두었기에 접근 가능

 

nohup 설정  / 프로세스 강제종료

문제발생)
현재 git bash를 통해서 ssh 접속으로 app.py를 실행시킴으로 서버가 돌아가고 있는 상황이다. 그렇기에 ssh 접속을 끊으면 돌아가던 서버도 종료가 되며, 접속을 할 수 없게된다. 이때, ssh 접속을 끊더라도 서버는 구동되게 설정을 해주어야 한다.

해결방안)
nohup python app.py & << 명령으로 서버 구동 시 ssh 접속이 끊어져도 서버는 돌아가게 한다.
문제발생)
기존에는 ssh 접속을 하여 직접 서버를 구동 시켰기에 ctrl + c를 통해서 직접 종료가 가능했으나 nohup 설정과 백그라운드에서 돌아가게 했기에 직접 서버를 종료시킬 수 없게 되었다.

해결방안)
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill << 명령어를 통해서 프로세스를 강제종료 시킨다.

 


도메인 연결하기

지금까지는 EC2 서버에 접속하기 위해서는 직접적인 IP주소가 필요했다. 우리의 목표는 누구나 어디서든 내 서버에 접속할 수 있게하는 것인데, 외부에서 접속하는 클라이언트 입장에서는 이 IP주소를 외워서 접근한다는 것이 쉬운 일은 아닐 것이다. 그래서 IP주소 대신 누구나도 쉽게 접근할 수 있는 도메인주소를 통해서 접근할 수 있도록 연결해준다.

 

  • 가비아 접속하기

링크: https://dns.gabia.com/

 

웹을 넘어 클라우드로. 가비아

 

dns.gabia.com

👉 네임서버에 도메인-IP가 매칭되는 시간이 필요

👉 매칭이되면 도메인으로 접속 가능

 


og 태그

👉 나의 프로젝트를 공유 시 예쁘게 나오도록 꾸며주는 태그
👉 <head></head> 태그 안에 다음과 같이 설정하고 싶은 부분들을 설정해준다.
<head>
    <meta property="og:title" content="내 사이트의 제목" />
    <meta property="og:description" content="보고 있는 페이지의 내용 요약" />
    <meta property="og:image" content="이미지URL" />
</head>


💻과제


  • 마지막 주차 과제는 AWS 클라우드 서버에 팬명록을 올리고 도메인을 공유하는 과제였다.

🖊 회고


마지막 5주차까지 2회독 완료를 하였다. 5주차에서는 그 동안 과제로 완성시켜 온 팬명록을 AWS EC2 서버에 배포하고 공유 시 꾸며지는 부분들을 다루기 위한 og태그를 활용해 보았다. 

 

그래도 기본적으로 리눅스에 대해서 자격증도 있고 다뤄봤다보니 크게 어려움은 없었던 것 같다. 

 

1~5주차까지 중 5주차가 실제로 내 프로젝트를 배포하는 부분이다보니 가장 재밌기도 했고, og태그도 처음 알게되었다. 그리고 보통은 공부를 할 때 EC2 IP주소로 배포한 서버에 접속하는 부분까지에서 끝나는 경우들이 많았는데 실제로 도메인을 사서 매핑까지 해 본 기회가 정말 좋았다고 생각한다.

 

조금 씁쓸한 부분은 이전에 AWS EC2 서버를  사용했어서 그런지 아침에 일어났는데 23,000정도가 결제되어있었다..... 좀 더 신경써서 종료를 해놓을껄..... 씁쓸하다.

 

최종적으로 2회독을 해보면서 생소했던 부분들도 점점 익숙해지고 외우고 그러려고 하지도 않았는데, 자연스럽게 이해되는 부분들도 생겼던 것 같다. 

 

사실 아직 항해를 시작했다고 봐야할 지 모르겠으나, 어떤 항해가 될 지? 얼마나 성장할 지? 나름 기대가 된다.