AWS - 개념정리 ( 배포 , 호스팅 ) , Amazon EC2로 서버 만들기 , Back 서버 연결하기 ( Port forwarding )

dev_swan·2022년 5월 11일
2

AWS

목록 보기
2/2
post-thumbnail

배포

  • 정의
  • 배포란 사용자에게 소프트웨어를 전달하는 과정입니다.
  • 배포를 하기위해서는 제3자가 접속할 수 있는 컴퓨터가 있어야하고 그 컴퓨터는 항상 켜져있어야 합니다.

호스팅

  • 정의

제 3자가 접속할 수 있고 24시간 켜져있는 것을 서버컴퓨터라고 하고 그 서버컴퓨터를 빌려주는것을 호스팅이라고 합니다.

  • 종류
    • 웹 호스팅 : 서버를 빌려주지만 컴퓨터 한대를 잘게 쪼개서 빌려주는 행위, 사용범위가 좁고 제한적입니다.
    • 서버 호스팅 : 서버 컴퓨터를 통채로 대여해주는 행위
    • 클라우드 : 클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것 입니다.

호스팅 참조

AWS ( Amazon Web Service )

  • 정의

AWS는 2006년 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼 서비스로, 전세계 클라우드 컴퓨팅 분야에서 독보적인 제계 1위의 점유율을 차지하고 있습니다.

  • AWS 장점

이미지 참조

  • AWS 제품
    • Amazon EC2 : 소프트웨어 시스템을 구축하고 호스팅하는데 사용하는 크기 조정 가능한 컴퓨팅 용량(말 그대로 Amazon 데이터 센터의 서버)을 제공하는 웹 서비스입니다.
    • Amazon Lambda : AWS 람다는 아마존 웹 서비스에서 제공하는 서비리스 컴퓨팅 서비스입니다.
      서버리스 컴퓨팅 : 애플리케이션을 실행하기 위한 별도의 서버 셋업 없이 곧바로 코드를 실행해주는 서비스입니다.
    • Amazon S3 : S3는 AWS에서 제공하는 클라우드 스토리지 서비스입니다.
      클라우드 스토리지 : 데이터 스토리지를 서비스로서 관리하고 운영하는 클라우드 컴퓨팅 공급자를 통해 데이터를 인터넷에 저장하는 클라우드 컴퓨팅 모델입니다
    • Amazon RDS : 관계형 데이터베이스로 세상에 존재하는 많은 데이터베이스 서비스들을 Amazon에서 제공해줍니다.

Amazon EC2로 서버 만들기

우측 상단 지역 설정 -> 솔루션 구축 -> 가상 머신 시작 (EC2 사용)

이름 및 태그 설정

이름 및 태그 설정을 해줍니다. 그리 중요한 정보는 아닙니다.

애플리케이션 및 OS 이미지 -> 사용할 운영체제 선택

OS의 사용할 버전을 선택합니다.

인스턴스 유형 -> 프리 티어 사용 가능 선택( 무료 )

키 페어 -> 새 키 페어 생성

키 페어 이름을 입력후 기본 설정되있는 값으로 키 페어 생성
생성된 키 페어는 잘 가지고 있어야합니다.

네트워크 설정 -> 우측 상단 편집 -> Add security group rule

http 와 https 에 관련된 정보를 허용해주어 누구나 들어올수있게 합니다.

인스턴트 생성 -> 모든 인스턴트 보기 -> 인스턴트 생성 확인

생성한 인스턴트가 실행중이면 서버가 실행중인 것입니다.


vs_code에서 서버 실행하기

인스턴스 -> 체크박스 체크 -> 연결 -> SSH 클라이언트 -> 예 : 복사하기

vs_code 세팅

express 설치후 기본적인 server.js 파일 생성후 생성한 키페어를 넣어주고 .gitignore로 키페어가 github에 올라가지 않도록 주의합니다.

터미널 -> 백서버 디렉토리

위에서 복사해온것을 터미널에 입력합니다.
ssh -i "AWS_Test.pem" ubuntu@ec2-3-34-198-160.ap-northeast-2.compute.amazonaws.com

WARNING: UNPROTECTED PRIVATE KEY FILE!
에러 발생시 터미널에서 chmod 600 파일이름.pem 입력후 다시 복사해온것을 터미널에 입력합니다.

터미널이 이런식으로 변하면 성공입니다.

서버 컴퓨터에 node.js와 npm 설치 ( mysql )

sudo apt update
sudo apt upgrade -y 
sudo apt install -y build-essential
sudo apt install net-tools
sudo apt install curl

# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

source ~/.bashrc

# nvm 버전확인
nvm --version

# nodejs LTS 설치
nvm install node --lts

# 설치된 노드 버전 확인
nvm ls
node --version
npm --version

# mysql 설치 방법
sudo apt install mysql-server -y
mysql --version

# service 명령어로 mysql 서버 실행
sudo service mysql start

sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'root';

# mysql setting 하기
exit mysql 나가기
sudo mysql_secure_installation / 위에서 설정한 root계정 password 입력 

1. validate password plugin 개발용, 테스트 이기 때문에 mysql 초기 비번 없게 해도 괜츈 (비활성화해주기)
2. root 계정 패스워드 ? Y (1번에서 root 계정 비번 활성화 안했으니까 상관 x / 활성화했다면 비번 2번 넣어주고 설정) 
3. 익명사용자 삭제할거냐 (remove anonymous user)?  Y 입력해서 삭제
4. 외부에서 root계정으로 DB 접근 허용 안해줄거 (disallow)? Y 입력해서 접근 못하게 해주기
5. TEST DB 삭제할거 (remove test db) ? Y 입력해서 삭제 허용
6. privileges table reload 할거냐? Y 입력
-> all done 나오면 끝

sudo mysql -uroot -p[패스워드]

create user 'ID'@'%' identified WITH mysql_native_password by 'Password' / 신규 계정 생성 ID , Password 설정

grant all privileges on *.* to '[생성한 ID]'@'%' with grant option; / 계정 권한 부여

FLUSH PRIVILEGES;

exit

# mysql 외부 접속 설정
sudo netstat -ntlp | grep mysqld 

# ## mysqld.cnf 파일 찾기
cd /etc/mysql/mysql.conf.d
ls

sudo vi mysqld.cnf / bind-address 부분을 0.0.0.0 으로 바꿔주기

service mysql restart
sudo netstat -ntlp | grep mysqld

ifconfig

AWS 인스턴스 보안그룹 인바운드 규칙 mysql ( 3306 PORT ) 추가 

서버 컴퓨터에 git clone 및 npm install

배포할 프로젝트 git clone

package.json 파일이 있는 디렉토리로 들어가서 npm install

보시는것처럼 HTTP 포트 범위는 80입니다. 하지만 저희의 express 서버는 3000포트입니다. 80 포트로 들어오는 요청을 포트 포워딩을 통해 3000포트로 변환해줄것입니다.

  • 포트 포워딩 (port forwarding) : 포트포워딩은 컴퓨터 네트워크 상에서 패킷이 방화벽이나 라우터 같은 네트워크 게이트를 지날 때 IP 주소와 포트 번호 결합의 통신 요청다른 곳으로 넘겨주는 네트워크 주소 변환의 응용입니다.

  • 포트 포워딩 설정 : sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport [요청 받는 포트] -j REDIRECT --to-port [요청 보낼 포트]

  • 포트 포워딩 조회 : sudo iptables -t nat -L --line-numbers

  • 포트 포워딩 삭제 : sudo iptables -t nat -D PREROUTING [NUM]

node server로 Back-Server를 열여줍니다.

생성한 퍼블릭 IPv4 주소에 :80을 붙여 생성한 서버 컴퓨터에서 돌아가고 있는 3000포트에 HTTP 통신을 할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2022년 5월 26일

도움이 되었습ㄴ니다

답글 달기