AWS는 대표적인 on-demand(사용자가 원하면 바로 사용 가능한) infrastructure 클라우딩 서비스다.
Cloud computing이란...
- 그리드 컴퓨팅 + SaaS(Software as a service)를 합친 개념으로, 언제 어디서나 응용 프로그램/데이터를 사용할 수 있는 컴퓨터 환경
- Cloud는 on-premise와 반대되는 개념, 3가지 종류로 나뉨
- IaaS(Infrastructure as a service), 하드웨어만 대여
- PaaS(Platform as a service), 플랫폼 자체가 서비스로 제공되어, 배포까지 담당해줌
- SaaS(Software as a service), 배포까지 다 완성된 소프트웨어 자체를 제공해줌 (e.g. 이메일,유튜브,AWS 등등)
- on-premise: 회사가 자체적으로 보유한 공간에 하드웨어 장비를 설치해 직접 서버를 운영하는 방식
인터넷만 연결되어 있다면, 필요할 때 언제든지 데이터 스토리지 & 리소스를 제공받을 수 있다.AWS는 현재 가장 많이 사용되고 있는 클라우딩 서비스 브랜드로, key service는 아래와 같다.
0
기본 설정
aws에서 EC2 인스턴스를 생성하고,
데이버베이스 인스턴스를 추가로 생성해야 한다
(파라미터 - character_set, collate 등 다양한 설정이 필요)
1
dump 파일 생성
로컬에만 존재하는 데이터파일을 sql로 변환 (aws에 연동하기 위함)
mysqldump -u root -p [database명] > 파일명.sql
비밀번호는 mysql local 비번 사용
2
dump 파일을 이관하려는 aws 데이터베이스 인스턴스에 데이터베이스 생성하기
mysql -h [aws database hostaddress] -u root -p
이 때 비밀번호는 local mysql 비밀번호가 아닌, aws 비밀번호를 쳐야 한다
create database [database명] character set utf8mb4 collate utf8mb4_general_ci;
그리고 나오기
exit
3
mysqldump로 생성한 sql파일을 aws 데이터베이스로 넣기
mysql -h [aws database hostaddress] -u root -p [database명] < [mysqldump파일명].sql
비밀번호는 aws 계정 비번
4
aws 데이터베이스가 hosting된 계정 접속
mysql -h [aws database hostaddress] -u root -p
비밀번호는 aws 계정 비번
5
데이터베이스 확인
6
EC2서버에 접속하기
pem 파일이 있는 곳으로 가서, ssh -i [pem파일명.pem] ubuntu@[EC2 IP주소]
입력
그런데 먼저 pem 파일의 권한을 아래와 같이 바꿔줘야 ssh 접속에 사용할 수 있다.
chmod 400 pem파일명.pem
그 후, 가상환경 설치 + 실행권한을 부여, 실행한다 (linux installers)
1 wget [설치 링크]
: 링크 주소 복사 누르기
2 chmod +x [파일명.sh]
: 파일명.sh는 1번 진행 후, ls
명령어 치면 나옴
3 ./[파일명.sh]
로컬 환경처럼 bash script 설치해주기
source .bashrc
: 명령 라인 앞에 (base)
가 생김
7
패키지 업그레이드하기 (apt 명령어)
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc
sudo apt-get install libmysqlclient-dev
8
프로젝트 폴더 생성 후, 프로젝트 파일 clone
conda create -n [가상환경명] python=3.8
conda activate [가상환경명]
git clone [repo 주소]
9
requirements.txt에 있는 내용 그대로 설치, 필요한 패키지들 설치 확인
pip install -r requirements.txt
(일괄 설치 명령어)
pip freeze
로 설치 내용 확인
10
settings.py에 가서, EC2 public IP주소 추가하기
vi settings.py
> ALLOWED_HOSTS
, ip주소 추가
(ALLOWED_HOSTS = ['*', 'ip주소', 'ip주소:8000']
)
11
my_settings.py 생성
local에 있는 내용 복사해서 넣기
이 때, DATABASES
내용은 RDS mysql host/비번이어야 함
12
server 동작하기
python manage.py runserver 0:8000
이 후, postman으로 API 호출이 되는지 확인하기
13
gunicorn(WAS, web application server) 설치
multi thread를 지원하고 있으므로, gunicorn 설치해 배포하기
pip install gunicorn
nohup gunicorn --bind ... ~
(background로 동작시킴)
ps -ef | grep python
(PID, process identifier 확인)
postman으로 API 호출 가능한지 확인
14
서버 끄기
kill [PID]
ps -ef | grep python
(서버가 제대로 꺼졌는지 확인)
postman으로 API 호출하면, 연결이 안되어 있음을 확인할 수 있다
Difference between CDN and proxy server
- AWS 세션때 실제로 멘토님께 질문드렸던 내용이다
- newbie에게는 CDN과 proxy server가 얼핏 비슷하게 들리는데, 둘은 다른 개념
- CDN은 전세계에 분산되어 있는 proxy server의 네트워크로, 사용자와 최대한 가까운 위치에 있는 proxy server에 콘텐츠를 캐싱/서빙하는 것
(가장 가까운 서버를 알려주는 것은 DNS의 역할)- proxy server는 사용자 서버와 origin server 중간에 위치한 서버로, forward proxy/reverse proxy로 나뉨
- reverse proxy: 클라이언트(사용자)의 요청을 적절한 internal service로 전달해주는 역할, ngnix가 reverse proxy를 제공하는 대표적인 솔루션
- forward proxy: 클라이언트(사용자)의 요청을 받으면, origin server에 통신해 그 결과를 클라이언트에게 전달하는 것
Web server, WAS와 Nginx
- Web server
- 아파치, Nginx, IIS 등이 대표적인 웹 서버
- 정적/가벼운 동적 리소스(DB와 연동)들을 제공하는 역할 외에도, reverse proxy역할을 제공해 서버 보안을 한층 높여줌
- load balancing도 웹 서버의 역할 중 하나
- WAS, Web Application Server
- 웹 애플리케이션과 서버 환경을 만들고 이를 동작시켜주는 소프트웨어 프레임워크
- 동적 웹을 처리하며, 톰캣 등이 있으며 django에서는 gunicorn과 비슷
- Nginx
- 아파치는 다중 프로세스 (multi process module) 기반이라면, Nginx는 event 기반
- 아파치는 mpm 기반이다보니 context swtiching이 많이 일어나는 반면 Nginx는 event 별로 처리 (컴퓨터에 부담이 적음)
- (220415 update) context switching이란, 2개의 프로세스가 자신의 상태를 바꾸는 작업. (실행 상태에 있던 프로세스는 현재까지의 작업 결과를 저장한 채 멈추고, 새 프로세스가 CPU에 저장됨)
참고 자료
https://youtu.be/IH7mUwunzlo
https://web.archive.org/web/20130525082356/http://www.dt.co.kr/contents.html?article_no=2007031902012231727002
https://stackoverflow.com/questions/7651458/how-to-get-started-with-web-caching-cdns-and-proxy-servers
https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html
https://youtu.be/Zimhvf2B7Es