2주차 - 1) AWS를 활용한 서버 구축

변현섭·2023년 5월 17일
1

Ⅰ. 핵심 키워드

1. GUI / CLI

먼저 GUI란, Graphical User Interface의 줄임말로 사용자와 컴퓨터가 그래픽을 통해 소통하는 방식을 의미한다. 여기서 그래픽이란 구체적으로 그림이나 아이콘, 버튼, 스크롤 바, 마법사 등이 해당한다. 또한 명령이 키보드와 마우스로 주로 이루어지기 때문에 초보 사용자에게 용이한 인터페이스이다. 직관적이고 숙달이 쉬워 사용자에 불필요하게 많은 지식을 요구하지 않는다.

반면 CLI는 Command Line Interface의 줄임말로 사용자와 컴퓨터가 문자의 입출력으로 소통하는 방식을 의미한다. 보통 윈도우에서는 cmd, 맥과 리눅스에서는 terminal이라고 부르는 것이 CLI에 해당한다. 명령은 주로 키보드와 명령어로 수행된다. 사용자는 명령을 작성하고 시스템에서는 이에 맞는 응답을 프롬프트에 내보낸다.

CLI는 컴퓨터 지식이 거의 없는 사용자에게는 부적합하거나 어려울 수 있다. 또한 잘못 입력함에 따라 혼란을 야기하거나 위험한 상황을 초래할 수도 있으며 명령이 직관적이지 못하다는 단점이 있다.

보통 CLI는 GUI보다 정확하지만, 명령과 구문 숙달이 전제되어야 한다. 따라서 CLI는 정밀한 입력이 요구되는 컴퓨팅 작업에 적합하고, GUI는 일반 사용자들이 컴퓨터를 사용하는 데에 적합하다.

2. URL / URI

먼저, URL은 Uniform Resource Locator의 줄임말로 자원이 실제로 존재하는 위치를 가리키고, URI는 Uniform Resource Identifier의 줄임말로 자원의 위치를 가리킴과 동시에 자원에 대한 고유 식별자 역할을 수행한다. 즉, URI는 URL을 포함하는 개념인 것이다.

URL과 URI는 보통 비슷한 상황에서 사용되기는 하지만 엄밀히 말하면 차이가 있다. 이를 이해하기 위해선 인터넷 환경에서 자원을 식별하는 방법을 알아야 한다. 그 방법에는 두가지가 있는데 첫째는 Path Variable, 두번째는 Query Parameter이다. 쉽게 말하자면 Path Variable 방식은 특정한 자원을 보여주고, Query Parameter 방식은 이러한 자원을 필터링한 결과를 보여준다.

본론으로 돌아와서, 보통 URI의 형식은 다음과 같다.

scheme://host[:port][/path][?query]

scheme은 사용할 프로토콜의 종류로 보통 http이며, host와 :port는 보통 도메인을 입력하면 DNS가 알아서 ip와 port로 변경해주거나 직접 ip와 port를 설정해줄 수 있다(https프로토콜의 경우 port의 기본값은 443이다). 그리고 디렉토리와 파일을 계층구조에 맞게 입력하면 된다. 여기서는 /path 부분까지가 URL에 해당된다.

query값은 path에 입력되는 값으로 필터링에 이용된다. 예를 들어 웹툰을 생각해보자. 웹툰의 제목이 무엇인지, 업로드 되는 요일은 언제인지, 몇 화인지 등을 query값으로 받아 path에 전달하면 알맞는 html문서를 연결해 줄 것이다.

3. 도메인 리다이렉션 / 도메인 포워딩

도메인의 종류가 여러가지이다보니 방문자 입장에서 도메인 주소가 헷갈리는 경우가 생길 수 있다. 이러한 혼란을 줄이기 위해 리다이렉션을 사용한다. 리다이렉션을 통해 어떤 도메인으로 입력하든지 해당 사이트로 이동이 가능하다.

사실 리다이렉트와 비슷한 개념으로 도메인 포워딩이 있다. 하지만 리다이렉트는 클라이언트가 페이지 전환의 주체이기 때문에 다른 URL로 직접 접속해야하는 반면 포워딩은 페이지 전환의 주체가 서버여서 같은 URL주소임에도 다른 응답을 사용할 수 있다. 구체적인 예시를 보자.

1) 리다이렉션


클라이언트에서 kotlinworld.com/21을 서버에 요청했는데, 서버에서 해당 내용이 kotlinworld.tech/2로 이동된 것을 확인한 경우 kotlinworld.tech/2로 리다이렉션할 것을 명령하게 된다. 그러면 클라이언트는 다시 kotlinworld.tech/2를 요청하며 서버는 해당 URL의 html문서를 반환해준다. 당연히 이 과정에서 클라인트도 페이지 전환이 이루어졌음을 인식할 수 있다.

2) 포워딩


클라이언트에서 kotlinworld.com/95를 서버에 요청했는데 서버에서 해당 내용의 리소스가 kotlinworld.com/WEB-INK/95에 있음을 확인한 경우 kotlinworld.com/WEB-INK/95의 리소스를 확인하여 클라이언트에 응답한다. 이 과정에서 클라이언트의 요청 정보는 바뀌지 않고 그대로 유지된다. 그러므로 클라이언트는 페이지 전환이 이루어졌는지 알지 못한다.

이러한 점에서 리다이렉트는 클라이언트의 요청에 의해 서버 DB의 변화가 생기는 회원가입 등의 작업에 사용된다. 리다이렉트에 요청이 중복되는 것을 방지하는 효과가 있기 때문이다. 반면 포워드는 외부에 공개되어선 안 될 부분을 가릴 때나 단순 데이터 조회에 사용된다.

4. AWS

1) AWS

AWS란, Amazon Web Service의 줄임말로 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼이다. 먼저 클라우드 컴퓨팅이란 리소스를 인터넷을 통해 서비스로 사용할 수 있는 주문형 서비스를 말한다. 이를 사용할 경우 기업에서 직접 리소스를 조달하거나 구성 및 관리할 필요가 없어진다. 물론 사용한만큼의 비용을 지불해야 한다.

참고로 AWS에서는 IaaS(Infrastricture as a Service)방식 즉, 서비스로 컴퓨터 리소스를 사용할 수 있도록 하는 방법을 채택하고 있다. AWS의 모든 서비스는 API 중심으로 설계되어 있어 모든 기능을 API로 제어할 수 있다.

AWS는 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공하고 있다. 또한 웹 서비스를 통해 확장 가능한 애플리케이션을 구축할 수 있도록 다양한 기능을 제공한다. AWS의 장점은 다음과 같다.

  • 저렴한 비용
  • 빠른 속도 및 민첩성: 전세계에 배포하는 과정이 매우 신속. 언어 및 운영체제에 전혀 구애받지 않음.
  • 빠른 설치 및 관리 용이: 서버 구축이 매우 빠르고 수요에 즉각 반응하여 기준을 축소하는 것도 가능. 기준에 부합하는 요금만 청구됨.

2) AWS EC2

EC2(Elastice Compute Cloud)란 AWS에서 제공하는 클라우드 컴퓨팅 서비스로, 쉽게 말해 독립된 컴퓨터(Instance) 한 대를 임대해서 사용할 수 있게 해주는 서비스이다. 이 서비스를 활용하여 아마존이 각 세계에 구축한 데이터 센터의 서버용 컴퓨터들의 자원을 원격으로 이용할 수 있다. EC2의 장점은 다음과 같다.

  • 용량을 줄이거나 늘릴 수 있는 탄력성
  • 사용한만큼만 비용을 지불
  • 사용자가 인스턴스를 완전히 제어 가능
  • 보안 및 네트워크 구성, 스토리지 관리가 효율적

AWS는 나라별로 데이터 센터(컴퓨터들이 모여있는 공간)를 가지고 있다. 그렇기 때문에 어느 나라에 위치한 데이터센터에서 컴퓨터를 빌릴지 설정해주어야 하는데 이를 EC2의 Region을 지정한다고 한다(실제 위치와 서버가 가까워야 작업 속도가 빠름). 아래와 같이 Region을 서울로 지정하면 된다.

Instance란 하나의 컴퓨터를 의미한다. Instance 생성과정은 실습에서 자세히 다룰 예정이므로, 간략하게만 짚고 넘어가겠다. 현재 사용 중인 인스턴스를 확인하는 방법은 아래와 같다.

위의 인스턴스 시작버튼을 클릭하여 인스턴스를 생성 가능하며 생성 시 컴퓨터의 스펙과 OS를 설정할 수 있다. 인스턴스 생성과정은 아래의 단계를 거친다.

① AMI 선택

  • AMI는 인스턴스를 시작하는 데 필요한 소프트웨어 구성이 포함된 템플릿을 의미
  • AMI에 리눅스 이미지를 사전에 구성 후 선택
  • AMI를 만들어 둔 게 없다면 AWS에 지원하는 OS를 선택해도 됨.

    ※ 프리티어
    회원가입일을 기준으로 1년 동안 AWS의 특정 자원을 무료로 사용할 수 있는 상태를 의미한다. 모든 서비스가 무료는 아니라는 것에 주의해야 하고, 당연히 유료 서비스에 비해 스펙이 낮다는 점도 감안해야 한다.

② 인스턴스 유형 선택

  • 컴퓨터 스펙을 결정(프리티어의 경우 스펙 제한)
  • 유형의 prefix로 컴퓨터의 성능을 파악 가능
    (CPU 성능에 중점을 두는 경우 c, Memory 성능에 중점을 두는 경우 m등)

③ 인스턴스 구성

  • 인스턴스 개수 결정
  • 스팟인스턴스(미사용 EC2 용량에 입찰) 결정
  • 네트워크(가상 프라이빗 클라우드 공간 설정, 독립된 네트워크처럼 동작) 결정
  • 서브넷(하나의 ip 주소를 나누어 여러개의 네트워크로 사용) 결정
  • 퍼블릭 ip 자동할당(외부 ip에서 인스턴스에 접속할 수 있는지) 여부 결정
  • IAM(인스턴스를 특정 사용자만 사용가능하도록 할지) 결정
  • 종료방식(컴퓨터 종료시 인스턴스를 중지할지 삭제할지) 결정
  • 모니터링(AWS에서 지원해주는 cpu와 memory에 대한 모니터링 시스템을 사용할지) 여부 결정

④ 스토리지 추가

  • 디스크 지정(프리티어의 경우 최대 30GB, 프리티어가 만료된 경우 사용한 만큼 요금이 부과될 수 있음)
  • 볼륨 유형으로는 주로 범용 SSD를 사용
  • 새 볼륨을 추가하여 파티션을 나누는 것도 가능

⑤ 태그 추가

  • 인스턴스가 많은 경우 인스턴스를 태그로 묶어 관리해야 함.
  • 작은 규모의 서버에선 거의 사용되지 않음.

⑥ 보안 그룹 구성

  • 어느 ip를 허용할 건지, 어떤 port를 열어줄 것인지 지정
  • ip에 0.0.0.0을 입력하면 모든 ip를 허용하겠다는 의미

⑦ 검토

  • 인스턴스 생성이 완료됨.

Ⅱ. 보충 설명

1. 클라우드 컴퓨팅

클라우드 컴퓨팅은 컴퓨팅 리소스를 인터넷을 통해 서비스로 사용할 수 있는 주문형 서비스이다. 클라우드를 통해 서버, 스토리지. 데이터 베이스 등 필요한 IT 자원을 제공한다. 클라우드 컴퓨팅의 종류에는 Saas, PaaS, IaaS가 있다.

① IaaS(Infrastructure as a Service)

  • 가장 기본적인 클라우드 컴퓨팅 서비스로
  • 스토리지, 네트워크, 운영 체제와 같은 IT 인프라를 대여
  • AWS가 여기에 해당됨.

② PaaS(Platform as a Service)

  • 개발자에게 여러 플랫폼을 제공해 빠르게 개발할 수 있도록 함.
  • 개발에 필요한 서버, 스토리지 등 기본 인프라를 설정하거나 관리할 필요가 없음.

③ SaaS(Software as a Service)

  • 서비스로 제공되는 소프트웨어로, 인터넷을 통해 액세스 하기만 하면 됨.
  • 최종 사용자 애플리케이션이라고 생각하면 됨.
  • 구글 메일, 구글 독스 등이 여기에 해당됨.

2. AWS에서 제공하는 서비스

  • EC2: 클라우드 가상 머신

  • IAM: 사용자 설정 및 액세스 관리

  • Route53: DNS설정 관리

  • CloudFront: 컨텐츠 전송 네트워크 솔루션(배포를 돕는 PaaS와 같은 서비스)

  • RDS: 관계형 데이터 베이스 서비스

  • Lambda: 서버를 사용하지 않는 모델로 백엔드 없이 코드를 트리거할 수 있게 해줌.

    ※ 트리거
    테이블에 INSERT, UPDATE, DELETE 이벤트가 발생할 때 자동으로 실행되는 코드를 의미한다.

3. AWS Spot Instance VS On-demand

EC2를 구축하는 대표적인 두 방법이 바로 Spot Instance와 On-demand이다. 먼저 On-demand는 우리가 흔히 사용한 방식으로 사용한 만큼의 돈을 지불한다. 위의 실습에서도 On-demand방식을 사용했다. 반면, Spot instance는 EC2 인스턴스의 여유 자원(놀고 있는 서버 공간)을 빌려서 사용하는 방식이다.

어차피 남는 공간을 사용하는 만큼 On-demand에 비해 70~90%정도 저렴한 가격으로 사용 가능하다. 하지만, 사용자가 제시한 입찰가보다 인스턴스 시장 가격이 높아지게 되면 인스턴스가 종료된다(AWS에서 할당된 공간을 회수한다). 즉, 안정성에 대한 보장이 없다. 인스턴스 시장가격은 수요와 공급의 법칙을 따르므로, 인스턴스의 크기나 리전에 따라 달라질 수 있다. Spot Instance 방식은 단기적으로 EC2를 빌릴 때에 유리한 방식이다.

4. AWS 프리티어 과금

  • AWS 프리티어는 새로운 AWS계정에서 특정 유형의 리소스를 1년 동안 무료로 사용할 수 있게 된다. 단, 프리티어에 포함되지 않는 모든 리소스에 대해서는 요금이 부과될 수 있다.

  • 프리티어에 해당하는 서비스의 경우에는 한도가 정해져 있다. 한도를 초과할 시에는 요금이 부과될 수 있다. 우리가 자주 사용하는 서비스에 대한 한도만 알아보자. EC2의 경우 750시간/달까지 무료이고 인스턴스 유형은 t2.micro 또는 t3.micro만 무료이다. RDS의 경우도 750시간/달까지 무료이고 범용 DB 스토리지, 백업 및 스냅샷 용 스토리지는 최대 20GB까지만 사용 가능하다.

  • 한 달에 750시간이라는 의미는 인스턴스 1개는 한달 내내 켜 놓고 있어도 과금이 안된다는 뜻이다. 단, 인스턴스가 2개일 경우 시간이 2배로 간다는 점을 유의하여야 과금을 예방할 수 있다. 따라서 인스턴스는 되도록 1개만 사용하도록 하고, 사용이 끝난 인스턴스는 곧바로 중지시키는 습관을 들여야 한다.

  • EC2 생성 시, 고급 세부 정보에서 스팟 인스턴스 요청을 선택하지 않아야 하고(기본 값이므로 별도 설정 필요 없음), 테넌시 설정에서 공유됨 – 공유된 하드웨어 인스턴스 실행을 선택해야 한다. 탄력적 IP의 경우 한 개만 사용하고 EC2에 연결되어 있다는 조건에서만 무료이다.

  • RDS 생성 시 스토리지 자동 크기 조정 활성화를 선택하지 않아야 하고(기본 값이므로 별도 설정 필요 없음), 추가 구성의 자동 백업 활성화를 선택하지 않아야 한다. 이 중 하나라도 선택할 경우 과금이 발생한다. (RDS에 대해서는 다음 주차에 자세히 다룰 예정이다.)

[이미지 출처]

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글