코드스테이츠 Optionals [AWS]

Lumi·2021년 11월 5일
2
post-thumbnail

🔥 Amazon Web Service

아마존 웹 서비스에 대해서 전반적으로 다루어 보는 글이 될 것이다.

기본 개념부터 실습까지 진행해보도록 하겠다!!

🌪 Cloud Computing

일단 클라우드가 등장하게된 배경이 중요하다.

클라우드 시스템이 존재하지 않았던 시대에는 전산실에 다수의 컴퓨터를 두고 서버를 운영하였다.

하지만 서버는 한계점이 명확하게 존재하기 때문에 수용능력이 한계에 도달하면 새로운 전산실을 구축하거나 컴퓨터를 추가로 구축을 해야했다.

이 방법은 금액적으로 또는 공간적으로도 매우 비효율적인 방법이라는 것을 누구나 알수 있을 것이다.

이러한 문제점들로 인해서 클라우드 서비스가 등장하게 되었다.

  • 가상의 컴퓨터를 대여한다는 의미이다.

몇가지 장점에 대해서 다루어 보자면

1. 사용하는 만큼만 비용이 발생한다

2. 컴퓨터 능력을 유연하게 조절 가능하다.

3. 스냅샷(이미지)를 이용해 다른 컴퓨터로 이주(migration)이 가능하다.

반대로 단점도 존재한다.

  • 단점이 없는 것은 없다고 생각한다.
AWS에 종속되는 서비스를 사용하기 떄문에 AWS의 상태에 따라서 서비스에 영향이 가게 된다.

클라우드는 기본적으로 모든 것을 서비스화 하는 것을 말한다.

SaaS : 모든 것을 클라우드화 해서 서비스 한다.

Pass : 네트워크, 하드웨어, 운영체제, DB만 클라우드화 한다.

IaaS : 하드웨어만 클라우드화 한다.

🌪 Delpoy

앞서 배포를 한번 다루었기 때문에 세세하게는 다루지 않겠다.

실제 실무에서는 총 4가지 과정을 통해서 배포가 이루어 진다.

1. Development
- 코드를 짜고 구성원들이 각자의 환경에서 서비스를 구현 하는 것

2. Integration
- 각자의 환경에서 개발된 부분을 취합하는 과정
- 오류를 잡는 과정

3. Staging
- 테스트를 해보는 과정

4. Production
- 실제로 서비스가 배포 되는 과정

이 과정을 반드시 지켜야 한다는 것은 아니다

  • 유도리 있게 이러한 과정 안에서 진행 된다.

기본적으로 다른사람과 나누어서 작업을 하는 것이기 떄문에 환경 설정이 다르게 된다.

  • DB의 비밀번호 등등

그러기 떄문에 혼동을 피하기 위해서는 몇가지 사항을 지켜주어야 한다.

  • 필수는 아니지만 편리를 위해서 이다.
1. 절대경로 대신 상대경로를 사용
2. 포트를 분기할 수 잇도록 환경변수를 설정(.env)
3. Docker와 같은 개발 환경 자체를 통일시킴

🌪 EC2

아마존의 대표적인 클라우드 서비스를 말한다.

  • 가상의 컴퓨터를 하나 빌리는 것을 말한다.

장점

1. 구성하는데에 필요한 시간이 짧다.

2. 필요한 용도에 따라 다양한 운영체제 선택이 가능하다.(AMI이용)

EC2를 활용하여 할수 있는 가장 기본적인 일은
웹서버를 설치 및 서비스를 제공 하는 것이다.

앞서 말했듯이 가상의 컴퓨터를 하나 빌리는 것과 같으며 이를 인스턴스를 생성 한다 라고도 한다.

AMI는 소프트웨어 구성이 기재된 일종의 템플릿 이다.

  • 운영체제를 선택하는데에 사용이 된다.
  • 이미 만들어 놓은 AMI템플릿을 이용할수도 있지만
  • 입맛에 맞게 스스로 만들어서 사용 할 수도 있다.

즉 정리하자면

AWS EC2는 AMI를 토대로 만들어진 가상의 컴퓨터를 하나 빌리는 것이다.

🌪 RDS

AWS에서 제공하는 관계형 데이터 베이스를 말한다.

우리는 굳이 RDS를 사용할 필요가 없다고 생각할 수 도 있다.

  • 왜냐하면 mysql을 사용 하면 되니깐

하지만 앞서 말했듯이 다른 사람이 관리를 해주는 것은 사용자 및 개발자에게 편의를 준다.

  • 이러한 이유로 AWS의 DB인 RDS에서는 AWS가 관리를 대신 해 주기 떄문에 사용 하는 것이다.

🌪 S3

AWS에서 제공하는 클라우드 스토리지 이다.

  • 클라우드 스토리지는 인터넷 상의 저장공간을 말한다.
  • Google Cloud가 대표적이다.

일단 기본적으로 데이터를 무한히 저장이 가능하다.

  • 무한히 확장 가능하다.
  • 또한 사용한 만큼만 비용을 지불하면 된다.

또한 강력한 내구성을 지니고 잇다.

  • 저장된 데이터를 잃어버릴 확률이 거의 없다.

S3의 스토리지들

Standard 클래스
- 범용적으로 사용하기 좋다.
- 처리 속도가 빠르지만 오래보관하기에는 좋은 용도가 아니다.

Glacier 클래스
- Standard와 반대되는 성질을 가지고 있다.

S3사용시에는 정적인 웹 사이트 호스팅이 가능하다.

일단 정적파일은 서버를 다루지 않는 파일을 말한다.

  • 다 알고 있을 것이다.

S3에서는 버킷이라는 곳에 정적 웹사이트를 배포할 수 있는 공간을 제공하게 된다.

버킷

  • 쉽게 말해 파일들을 담는 바구니 이다.(최상위 디렉터리)
  • S3의 모든 파일은 버킷에 저장이 되어야 하고 무한한 양을 저장할 수 있다.
  • 버킷의 이름은 각 리전(DNS)에서 저장 되어 있어야 한다.

버킷에 담기는 파일은 객체라고 부른다

  • 키 + 값 의형태를 띄고 있기 떄문에

이 객체는 파일과 메타데이터로 구성이 되어있다.

파일에 대해서 먼저 알아보면 실제 데이터를 저장하는 곳이라고 생각하면 된다.

메타데이터는 생성일, 크기, 유형과 같은 객체에 대한 정보가 담겨 있는 곳이다.

또한 모든 객체는 유일한 URL주소를 가지고 있다

🔥 서버 배포 [실습]

EC2를 활용하는 실습이다.

🌪 인스턴스 생성


EC2를 만들기 시작하면 처음으로 보는 화면으로 운영체제를 선택한다.


그후 RAM, CPU등을 선택한다.


그러면 이렇게 바로 간단하게 끝나게 된다.

  • 바로 끝나는 이유는 우리는 이미 만들어져 있는 것들을 사용했기 떄문이다.

이 부분에서 키를 생성 해야 한다.

  • 생성되는 인스턴스를 원격으로 제어하기 위해서는 SSH연결을 통한 원격 접속이 필요하고
  • 원격접속을 위해서는 Key가 필요하다.


key까지 생성이 되면 이렇게 인스턴스가 생성이 되는 것을 알수가 있다.

이렇게 생성된 인스턴스를 제어하기 위해서는 앞서 말했듯이 원격으로 제어가 필요하고 방금전에 생성한 key파일이 필요하다.

오른쪽위 연결 버튼을 누른뒤에 SSH연결을 진행 해보면

대략적인 방법을 알수가 있다.

  • 일단 chomd명령어를 통해서 key에 권한을 부여한다.
  • 그뒤 아래 있는 ssh명령어를 통해서 실행을 하면 된다.


그렇게 되면 이렇게 경고창이 뜨는데 이 부분은 그냥 처음접속할떄 나오는 경고 메시지 이다.

이후 터미널에서

이러한 문구가 보인다면 원격으로 접속이 완료가 된 것이다.

🌪 서버 연결 후 실행

앞서 인스턴스 생성을 통해 빌린 가상의 컴퓨터에서 서버를 구축 해보아야 한다.

일단 기본적으로 컴퓨터를 처음 새로 구매한 것과 같기 떄문에 필요한 프로그램들을 설치 해야한다.

  • sudo apt update를 입력한다.

몇개의 업데이트가 끝난뒤 nvm, node.js, npm 등을 설치한다.

  • 설치 후에는 반드시 nvm -v로 정상적으로 설칙 되었는지 확인하자

이후 원하는 데이터를 clone 해주면 된다.

  • 나는 서버를 작동시킬 것이기 때문에 서버 파일을 clone 해주었다.
  • git이 바뀌어서 원래는 비밀번호만을 입력하면 되는데 따로 토큰을 입력해 주어야 한다.
  • 토큰을 생성하는 부분은 google에 많이 나와있으니 그부분을 참고하자

이렇게 clone을 정상적으로 진행하게 된뒤 ls를 입력하면 내가 clone받은 파일이 보일 것이다

  • 그후 npm i를 통해서 기본적인 것들을 설치를 해주자

그후 npm start를 진행하면 되는데 이렇게 하면 오류가 발생 할 것이다.

  • 왜냐하면 관리자 권한이 필요하기 떄문이다.

그러기 떄문에 sudo npm start를 진행하면 된다.

  • 짜잔~~ 정상적으로 서버가 작동하는 것을 알수가 있다!!

  • 인스턴스에서도 확인을 해보면 두가지 주소가 있다는 것을 알 수가 있다.
  • 두가지중 어떠한 것을 사용해도 상관이 없다.

하지만 접속을 시다하면 오류가 발생 할 것이다.

  • 이것은 보안 그룹을 설정하지 않았기 떄문이다.

🌪 보안 그룹 설정

보안그룹이란 인스턴스로 들어가고 나가는 트래픽에 관한 가상 방화벽이다.

  • 들어가는 것은 인바운드, 나가는 것은 아웃바운드 라고 한다.

기본적으로는 인바운드 설정만을 조율하며 아웃바운드 설정은 기본값인 모든 트래픽 허용을 선택한다.

  • 이걸로도 해킹이 유발될수 있다.


인스턴스 내에서 보안으로 들어가 규칙을 수정해 보자.

  • SSH는 원격접속을 위한 보안 그룹이며
  • HTTP는 클라이언트와 소통하기 위한 보안 그룹이다.


자 이번에는 내가 접속을 해본 결과이다.

  • 전에는 오류가 발생을 했지만 인바운드 규칙에 HTTP를 허용해줌으로써 문제없이 접속을 할수 있게 되었다.

PostMan으로도 테스트 해볼수 있다.

서버 연결 같은 경우에는 별 어려움 없이 할수 있을 것이라고 생각을 해본다.

  • 나도 처음 하는 것이였지만 천천히 따라해 보았다.

🌪 PM2

프로세스 및 ps명령어 에 대한 내용이다.

내가 만약 SSH를 통해서 터미널에 EC2를 연결하고 강제 종료 하게 되는 상황을 생각해 보자.

1. 로컬의 SSH 프로세스가 강제 종료된다.

2. EC2상의 node프로세스가 강제 종료된다.

3. 서버가 종료가 된다.

하지만 우리는 서버를 지속해서 작동 시켜야 하고 node프로세스가 항상 실행이 되어야 한다.

  • kill, & , fg등 다양한 명령어를 활용할수 있다.

하지만 이러한 명령어들을 대신해주는 프로세스가 있는데 이를 PM2라고 한다.

  • 실행되는 프로세스 관리 및 백그라운드 실행을 담당한다.
  • 이 외에도 다양한 옵션들을 제공한다.

npm i pm2 -g를 통해서 pm2를 설치부터 해보자

이후 pm2 start 파일명을 입력해주면 백그라운드에서도 node.js가 작동이 된다.

  • 이 외에도 stop, restart, ls, log등등 다양한 명령어가 있다.

하지만 우리는 이전 실습에서 관리자 권한이 필요하다는 것을 알고 있다.

  • pm2 ls로 상태를 확인후 pm2 log를 통해서 로그를 확인해보면


이렇게 로그가 발생하게 된다.

즉 관리자 권한이 필요하다는 오류기 이기 떄문에 authbind라는 패키지가 필요하다.

  • 이부분은 나도 정확하게 모르겠다... 단지 적으라는 것을 따라 적었다.
sudo apt-get update

sudo apt-get install authbind

sudo touch /etc/authbind/byport/80

sudo chown ubuntu /etc/authbind/byport/80

sudo chmod 755 /etc/authbind/byport/80

authbind --deep pm2 update

이렇게 순차대로 입력을 해주면 authbind설치가 끝나게 된다.

그후 실행중인 프로세스를 종료시킨뒤
authbind --deep pm2 start 파일명
을 통해 실행시켜주면 관리자 권한으로 실행이 완료가 된다.

🔥 클라이언트 배포 [실습]

정적 웹 사이트 호스팅 과정

1. 페이지 빌드
2. 버킷 생성 및 정적 웹 사이트 호스팅 용으로 구성
3. 빌드된 정적 웹 페이지 업로드
4. 퍼블릭 액세스 차단 해제 및 정책 생성

빌드 -> S3에 버킷을 생성 -> 버킷에 업로드 -> 접근권한 및 설정

일단 우리는 페이지를 build해야 한다.

  • 단순히 build하면 된다.

나 같은 경우에는 env파일을 이용하여 url을 다루었다.

이후 S3에 들어가 버킷만들기를 클릭한다.

단순히 원하는 이름의 버킷을 만든뒤 만들어진 버킷을 확인해보면


이와 같다.

이후 정적 웹 사이트 호스팅을 활성화 해주게 되면 기본적인 셋팅은 끝나게 된다.

이후 객체 란에 가서 build안에 있는 파일들을 모두 업로드 해준다.

  • build폴더가 아닌 build안에 잇는 파일들을 업로드 해주어야 한다.


이처럼 성공메시지가 뜨면 성공한 것이다.

이후 보안 설정을 수정해야 한다.

이번에는 권한 메뉴로 가서 퍼블릭 액세스 차단을 모두 해제해 주자.

그뒤에는 버킷 정책을 편집해주어야 한다.

  • 정책 생성기를 통해서 새로운 정책을 만들어 준다.
  • 이부분은 구글을 참고해보자 나도 그냥 단순히 따라만 했다.

이후 성공적으로 버킷 정책이 결정된뒤에 호스팅 하는 url을 클릭하면

이처럼 오류없이 화면이 보이게 된다!!

🔥 DB연결 [실습]

RDS를 활용해 보는 부분이다.

RDS - 데이터 베이스 메뉴에서 데이터 베이스 생성을 클릭해 보자.

이후 DB를 선택하고 마스터 사용자 이름과 암호를 입력하자.

  • 이 정보는 후에 DB연결을 할떄 사용되는 부분이니 꼭 기억하도록 하자.

이후 연결부분에서 퍼블릭 액세스 기능을 허락하고

보안그룹은 default

추가 연결 구성에서 포트 연결은 13306으로 지정하자

  • 보통은 3306을 사용한다.

이후 맨 아래 추가 구성에서 서버에 작성된 DB이름을 적어주자(초기 DB이름)

  • 나 같은경우에는 서버에서 test라고 저장을 하였다.

이후 생성을 하게 되면 된다.

다음으로는 MySQL클라이언트를 활용하여 DB 인스턴스에 연결해 보자.

RDS가 생성이 되면 생성된 DB에 들어가 엔드 포인트를 복사해 온다.

그후 mysql을 통해서 DB인스턴스에 접속을 해보자
mysql -u [마스터 이름] --host [엔드포인트 주소] -P 13306(포트번호) -p

RDS를 생성할떄 마스터이름과 암호를 입력주면 된다.

접속이 완료된뒤에 show databases를 입력해 아까 RDS를 만들때 작성한 초기 DB이름이 있다면 정상적으로 연결이 된 것이다.

후기

글을 처음 읽어보시는 분들이 이 글을 읽고 도움이 되었으면 한다.

  • 읽을지는 모르겠지만;;

글을 작성한 목적은 내가 공부한 내용을 정리하고자 였고 하다보니 누군가에게 알려주는 듯한 느낌으로 작성을 하게 된것 같다...

나도 아직 익숙하지 않는 영역인데 제대로 설명이 되었는지는 모르겠다

전반적으로 AWS에서 주로 사용하는 부분에 대해서 다루어 보았고 꽤 흥미로웠다

다음주 월요일부터 본격적으로 내가 전공을 바꾼 목적인 블록체인이 시작이 된다.

이떄까지의 과정도 아직 완전하다고 할수는 없지만 그래도 계속해서 공부를 해 나가볼 것이다

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글