[others] aws 기본 개념 및 데이터베이스 연동하기

EMMA·2022년 4월 16일
0
post-thumbnail

아마존 해외직구만 사용하던 내가 AWS를 사용하게 되다니...! 🚀

실제로 사용해보니, AWS는 정말 강력한 tool 이었다...


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는 아래와 같다.

  • Elastic compute cloud(EC2)
    • AWS상에서 사용하는 서버로, 이 곳에 API를 배포한다
    • 내가 필요한 사양의 EC2 인스턴스를 선택, 사용
    • security group 설정(가상 방화벽)을 해줘야 HTTP/SSH 접속이 가능
    • 인스턴스 유형은 3가지로 나뉨
      • computing optimized
      • memory optimized
      • storage optimized
  • VPC(Virtual Private Cloud)
    • 사용자가 정의한 가상 네트워크를 할당 받아 사용 및 제어할 수 있도록 하는 서비스
    • IP 주소 범위 선택, 서브넷 생성, 게이트웨이 구성 등
  • RDS (Relational Database Service)
    • AWS에서 제공하는 관계형 데이터베이스
    • 직접 데이터베이스 설치/운영하는 것보다 더 저렴
  • S3 (Simple Storage Service)
    • 객체 스토리지, 데이터를 저장하고 관리할 수 있음
  • ELB (Elastic Load Balancing)
    • HTTP 요청들을 서버에 분산하는 역할
  • Route 53
    • AWS의 DNS 서비스, API를 실제 도메인과 연결해줌
  • Cloud Front/CDN(Content Delivery Network)
    • 콘텐츠 전송 네트워크로, ISP에 직접 연결해 데이터를 전송해 병목 현상(시스템에 저장된 데이터의 집중적인 사용으로 인해, 전체 시스템의 속도 및 성능 저하까지 연결되는 현상)을 피할 수 있다
    • 사용자의 요구가 잦은 콘텐츠를 ISP에 설치한 CDN 서버에 미리 캐싱해 최적의 경로로 사용자에게 콘텐츠를 전달하는 것 (사용자의 가장 가까운 지점에서 콘텐츠를 전송)
    • Slack talks about AWS CloudFront

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
데이터베이스 확인

로컬에 있던 csv 파일이 잘 연동되어 들어간 것을 확인할 수 있다

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

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글