아마존 웹 서비스에 대해서 전반적으로 다루어 보는 글이 될 것이다.
기본 개념부터 실습까지 진행해보도록 하겠다!!
일단 클라우드가 등장하게된 배경이 중요하다.
클라우드 시스템이 존재하지 않았던 시대에는 전산실에 다수의 컴퓨터를 두고 서버를 운영하였다.
하지만 서버는 한계점이 명확하게 존재하기 때문에 수용능력이 한계에 도달하면 새로운 전산실을 구축하거나 컴퓨터를 추가로 구축을 해야했다.
이 방법은 금액적으로 또는 공간적으로도 매우 비효율적인 방법이라는 것을 누구나 알수 있을 것이다.
이러한 문제점들로 인해서 클라우드 서비스가 등장하게 되었다.
몇가지 장점에 대해서 다루어 보자면
1. 사용하는 만큼만 비용이 발생한다
2. 컴퓨터 능력을 유연하게 조절 가능하다.
3. 스냅샷(이미지)를 이용해 다른 컴퓨터로 이주(migration)이 가능하다.
반대로 단점도 존재한다.
AWS에 종속되는 서비스를 사용하기 떄문에 AWS의 상태에 따라서 서비스에 영향이 가게 된다.
클라우드는 기본적으로 모든 것을 서비스화 하는 것을 말한다.
SaaS : 모든 것을 클라우드화 해서 서비스 한다.
Pass : 네트워크, 하드웨어, 운영체제, DB만 클라우드화 한다.
IaaS : 하드웨어만 클라우드화 한다.
앞서 배포를 한번 다루었기 때문에 세세하게는 다루지 않겠다.
실제 실무에서는 총 4가지 과정을 통해서 배포가 이루어 진다.
1. Development
- 코드를 짜고 구성원들이 각자의 환경에서 서비스를 구현 하는 것
2. Integration
- 각자의 환경에서 개발된 부분을 취합하는 과정
- 오류를 잡는 과정
3. Staging
- 테스트를 해보는 과정
4. Production
- 실제로 서비스가 배포 되는 과정
이 과정을 반드시 지켜야 한다는 것은 아니다
기본적으로 다른사람과 나누어서 작업을 하는 것이기 떄문에 환경 설정이 다르게 된다.
그러기 떄문에 혼동을 피하기 위해서는 몇가지 사항을 지켜주어야 한다.
1. 절대경로 대신 상대경로를 사용
2. 포트를 분기할 수 잇도록 환경변수를 설정(.env)
3. Docker와 같은 개발 환경 자체를 통일시킴
아마존의 대표적인 클라우드 서비스를 말한다.
장점
1. 구성하는데에 필요한 시간이 짧다.
2. 필요한 용도에 따라 다양한 운영체제 선택이 가능하다.(AMI이용)
EC2를 활용하여 할수 있는 가장 기본적인 일은
웹서버를 설치 및 서비스를 제공 하는 것이다.
앞서 말했듯이 가상의 컴퓨터를 하나 빌리는 것과 같으며 이를 인스턴스를 생성 한다
라고도 한다.
AMI
는 소프트웨어 구성이 기재된 일종의 템플릿 이다.
즉 정리하자면
AWS EC2는 AMI를 토대로 만들어진 가상의 컴퓨터를 하나 빌리는 것이다.
AWS에서 제공하는 관계형 데이터 베이스를 말한다.
우리는 굳이 RDS를 사용할 필요가 없다고 생각할 수 도 있다.
하지만 앞서 말했듯이 다른 사람이 관리를 해주는 것은 사용자 및 개발자에게 편의를 준다.
AWS에서 제공하는 클라우드 스토리지 이다.
일단 기본적으로 데이터를 무한히 저장이 가능하다.
또한 강력한 내구성을 지니고 잇다.
S3의 스토리지들
Standard 클래스
- 범용적으로 사용하기 좋다.
- 처리 속도가 빠르지만 오래보관하기에는 좋은 용도가 아니다.
Glacier 클래스
- Standard와 반대되는 성질을 가지고 있다.
S3사용시에는 정적인 웹 사이트 호스팅이 가능하다.
일단 정적파일은 서버를 다루지 않는 파일을 말한다.
S3에서는 버킷이라는 곳에 정적 웹사이트를 배포할 수 있는 공간을 제공하게 된다.
버킷
버킷에 담기는 파일은 객체라고 부른다
이 객체는 파일과 메타데이터로 구성이 되어있다.
파일에 대해서 먼저 알아보면 실제 데이터를 저장하는 곳이라고 생각하면 된다.
메타데이터는 생성일, 크기, 유형과 같은 객체에 대한 정보가 담겨 있는 곳이다.
또한 모든 객체는 유일한 URL주소를 가지고 있다
EC2를 활용하는 실습이다.
EC2를 만들기 시작하면 처음으로 보는 화면으로 운영체제를 선택한다.
그후 RAM, CPU등을 선택한다.
그러면 이렇게 바로 간단하게 끝나게 된다.
이 부분에서 키를 생성 해야 한다.
key까지 생성이 되면 이렇게 인스턴스가 생성이 되는 것을 알수가 있다.
이렇게 생성된 인스턴스를 제어하기 위해서는 앞서 말했듯이 원격으로 제어가 필요하고 방금전에 생성한 key파일이 필요하다.
오른쪽위 연결 버튼을 누른뒤에 SSH연결을 진행 해보면
대략적인 방법을 알수가 있다.
chomd
명령어를 통해서 key에 권한을 부여한다.
그렇게 되면 이렇게 경고창이 뜨는데 이 부분은 그냥 처음접속할떄 나오는 경고 메시지 이다.
이후 터미널에서
이러한 문구가 보인다면 원격으로 접속이 완료가 된 것이다.
앞서 인스턴스 생성을 통해 빌린 가상의 컴퓨터에서 서버를 구축 해보아야 한다.
일단 기본적으로 컴퓨터를 처음 새로 구매한 것과 같기 떄문에 필요한 프로그램들을 설치 해야한다.
sudo apt update
를 입력한다.몇개의 업데이트가 끝난뒤 nvm, node.js, npm
등을 설치한다.
nvm -v
로 정상적으로 설칙 되었는지 확인하자이후 원하는 데이터를 clone 해주면 된다.
이렇게 clone을 정상적으로 진행하게 된뒤 ls
를 입력하면 내가 clone받은 파일이 보일 것이다
npm i
를 통해서 기본적인 것들을 설치를 해주자그후 npm start
를 진행하면 되는데 이렇게 하면 오류가 발생 할 것이다.
그러기 떄문에 sudo npm start
를 진행하면 된다.
하지만 접속을 시다하면 오류가 발생 할 것이다.
보안그룹이란 인스턴스로 들어가고 나가는 트래픽에 관한 가상 방화벽이다.
기본적으로는 인바운드 설정만을 조율하며 아웃바운드 설정은 기본값인 모든 트래픽 허용을 선택한다.
인스턴스 내에서 보안으로 들어가 규칙을 수정해 보자.
자 이번에는 내가 접속을 해본 결과이다.
PostMan으로도 테스트 해볼수 있다.
서버 연결 같은 경우에는 별 어려움 없이 할수 있을 것이라고 생각을 해본다.
프로세스 및 ps명령어 에 대한 내용이다.
내가 만약 SSH를 통해서 터미널에 EC2를 연결하고 강제 종료 하게 되는 상황을 생각해 보자.
1. 로컬의 SSH 프로세스가 강제 종료된다.
2. EC2상의 node프로세스가 강제 종료된다.
3. 서버가 종료가 된다.
하지만 우리는 서버를 지속해서 작동 시켜야 하고 node프로세스가 항상 실행이 되어야 한다.
하지만 이러한 명령어들을 대신해주는 프로세스가 있는데 이를 PM2
라고 한다.
npm i pm2 -g
를 통해서 pm2를 설치부터 해보자
이후 pm2 start 파일명
을 입력해주면 백그라운드에서도 node.js가 작동이 된다.
하지만 우리는 이전 실습에서 관리자 권한이 필요하다는 것을 알고 있다.
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해야 한다.
나 같은 경우에는 env파일을 이용하여 url을 다루었다.
이후 S3에 들어가 버킷만들기를 클릭한다.
단순히 원하는 이름의 버킷을 만든뒤 만들어진 버킷을 확인해보면
이와 같다.
이후 정적 웹 사이트 호스팅을 활성화 해주게 되면 기본적인 셋팅은 끝나게 된다.
이후 객체 란에 가서 build안에 있는 파일들을 모두 업로드 해준다.
이처럼 성공메시지가 뜨면 성공한 것이다.
이후 보안 설정을 수정해야 한다.
이번에는 권한 메뉴로 가서 퍼블릭 액세스 차단을 모두 해제해 주자.
그뒤에는 버킷 정책을 편집해주어야 한다.
이후 성공적으로 버킷 정책이 결정된뒤에 호스팅 하는 url을 클릭하면
이처럼 오류없이 화면이 보이게 된다!!
RDS를 활용해 보는 부분이다.
RDS - 데이터 베이스 메뉴에서 데이터 베이스 생성을 클릭해 보자.
이후 DB를 선택하고 마스터 사용자 이름과 암호를 입력하자.
이후 연결부분에서 퍼블릭 액세스 기능을 허락하고
보안그룹은 default
추가 연결 구성에서 포트 연결은 13306으로 지정하자
이후 맨 아래 추가 구성에서 서버에 작성된 DB이름을 적어주자(초기 DB이름)
이후 생성을 하게 되면 된다.
다음으로는 MySQL클라이언트를 활용하여 DB 인스턴스에 연결해 보자.
RDS가 생성이 되면 생성된 DB에 들어가 엔드 포인트를 복사해 온다.
그후 mysql을 통해서 DB인스턴스에 접속을 해보자
mysql -u [마스터 이름] --host [엔드포인트 주소] -P 13306(포트번호) -p
RDS를 생성할떄 마스터이름과 암호를 입력주면 된다.
접속이 완료된뒤에 show databases를 입력해 아까 RDS를 만들때 작성한 초기 DB이름이 있다면 정상적으로 연결이 된 것이다.
글을 처음 읽어보시는 분들이 이 글을 읽고 도움이 되었으면 한다.
글을 작성한 목적은 내가 공부한 내용을 정리하고자 였고 하다보니 누군가에게 알려주는 듯한 느낌으로 작성을 하게 된것 같다...
나도 아직 익숙하지 않는 영역인데 제대로 설명이 되었는지는 모르겠다
전반적으로 AWS에서 주로 사용하는 부분에 대해서 다루어 보았고 꽤 흥미로웠다
다음주 월요일부터 본격적으로 내가 전공을 바꾼 목적인 블록체인이 시작이 된다.
이떄까지의 과정도 아직 완전하다고 할수는 없지만 그래도 계속해서 공부를 해 나가볼 것이다