오늘은 저도 잘 모르는 AWS를
글을 쓰면서 정리 해보려고 합니다.
사실 이 글은 다른 여타 제 블로그 글과 같이
정보전달을 목적으로 하기 보다는
제가 공부하고 정리하기 위한 기록으로써 글이라고 봐야할 것 같습니다.
AWS에 대해서 deep한 내용은 저도 모르기 때문에
후술할 내용은 매우 기본적인 내용들입니다.
오늘 작성할 내용은 다음 두 영상을 보고 정리된 내용입니다.
https://www.youtube.com/watch?v=IH7mUwunzlo
https://www.youtube.com/watch?v=naMvOo_z2rU
(알팍한 코딩사전 짱입니다.. 다들 두 번 보세요)
클라우드 컴퓨팅
우선 AWS가 제공하는 서비스는 클라우드 컴퓨팅입니다.
클라우드 컴퓨팅에 대한 정의를 알아볼까요?
AWS와 같은 클라우딩 컴퓨팅 서비스를 제공하는
Microsoft사의 azure 홈페이지에 나와있는 공식 설명은 다음과 같습니다.
쉽게 말하면 클라우드 컴퓨팅은 인터넷(“클라우드”)을 통해 서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어, 분석, 인텔리전스 등의 컴퓨팅 서비스를 제공하는 것입니다. 클라우드 컴퓨팅을 통해 더 빠른 혁신과 유연한 리소스를 제공하고 대규모 경영의 이익 효과를 누릴 수 있게 됩니다. 일반적으로 사용한 클라우드 서비스에 대해서만 요금을 지불하므로, 운영 비용을 낮추고 인프라를 보다 효율적으로 운영할 수 있습니다. 그뿐만 아니라, 비즈니스 요구 사항의 변화에 따라 규모를 조정할 수 있습니다.
제가 이해한 방식으로 다시 짧게 정리하면,
내 컴퓨터가 아닌 클라우드, 즉 인터넷에 존재하는 어떤 컴퓨터를 이용해서 서버나 데이터베이스 등의 서비스를 제공하는 기술
위와 같이 정리할 수 있을 것 같습니다.
이러한 서비스를 제공하는 다양한 업체가 있고
그 중 가장 유명한 것이 바로 오늘 알아볼 AWS(Amazon Web Services)일 것 같습니다.
가상화
클라우드 컴퓨팅에 대해서 조금 더 알아보겠습니다.
우선 클라우드 컴퓨팅의 주기술은 '가상화'입니다.
이 기술을 사용하면 물리적 컴퓨터 한 대에 가상의 컴퓨터를 여러 대를 띄울 수 있습니다.
즉 하나의 컴퓨터로 더 효율적인 운용이 가능해집니다.
이 기술이 없다는 가정 하에 두 개의 OS를 실행시키기 위해서는 물리적으로 2대의 컴퓨터가 필요하지만
이 기술이 있음으로써 하나의 컴퓨터의 두 개의 OS를 실행시킬 수 있게 되는 거죠.
'얄팍한 코딩사전'의 유튜브 영상 중에서는
세일 시즌이나 이벤트 기간에 접속량이 폭주하는 등의 상황에
클라우드에서 필요한 만큼 자원을 늘려주거나 줄여줄 수 있기 때문에
가상 컴퓨팅이 효율적이라고 설명하고 있습니다.
클라우드 서비스
클라우드 컴퓨팅에서 주로 들을 수 있는 클라우드 서비스의 종류인 IaaS, PaaS, SaaS도 간단히 정리해보려고 합니다.
On-premise는 클라우드 서비스가 아닌 전통적 방식의 서비스를 말합니다.
전통적으로는 서버, 네트워킹, 가상화, 데이터 등등을 직접 관리하고 운용했어야 했던 것이죠.
이런 방식에서 얼만큼 사용자가 관리하고 얼만큼은 클라우드에서 서비스를 제공하냐에 따라
IaaS, PaaS 그리고 SaaS로 나뉘게 됩니다.
IaaS(Infrastructure as a Service)는 쉽게 말해 하드웨어만 관리하는 것을 의미합니다.
뒤에 알아볼 AWS의 EC2도 여기에 속한다고 하네요.
사용자는 클라우드 서비스에서 제공하는 하드웨어에
직접 OS 및 프로그램을 설치하여 운용해야 합니다.
PaaS(Platform as a Service)는 애플리케이션 개발과 테스트, 배치를 위한 호스팅 환경을 제공하며,
사용자가 직접 데이터베이스나 서버와 같은 인프라를 구축하지 않아도 되는 환경을 제공합니다.
즉, IaaS에서는 클라우드 서비스 업체가 제공하는 하드웨어만을 빌려와서
거기에 내가 Java도 깔고 DB도 구축하고 해야하는데
PaaS에서는 Java와 DB 구축까지 완료되어 있기 때문에
개발자는 코드만 작성해서 테스트하고 실행하면 되는 것이죠.
마지막으로 SaaS(Software as a Service)는 사용자들이 온라인으로 바로 이용할 수 있는 서비스로
유튜브나 구글 이메일, 네이버 MBOX와 같이
온라인 상태에서 바로 접속해서 서비스를 이용할 수 있는 방식을 의미합니다.
때문에 설치형 프로그램과 달리 온라인이 아니라면 이용할 수 없다는 단점도 존재합니다.
AWS
그렇다면 이제 AWS에 대해 알아보겠습니다.
AWS에 대한 공식 소개글은 다음과 같습니다.
Amazon Web Services(AWS)는 전 세계적으로 분포한 데이터 센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이며, 널리 채택되고 있는 클라우드 플랫폼입니다.
즉, 위에서 설명한 클라우드 컴퓨팅을 제공하는 업체 중 본인이 제일 짱짱맨이라는 얘기 같습니다.
AWS에서 자주 사용되는 서비스로는
앞서 언급했던 EC2나 서버를 관리하지 않고 애플리케이션을 실행할 수 있게 해주는 Lambda,
스토리지 서비스인 S3, 관계형 데이터베이스 관리 서비스인 RDS, DNS 관리 서비스인 Route 53 등이 있습니다.
오늘 글에서는 제가 프로젝트에 적용하려고 하는
EC2와 S3, RDS에 대해서만 간단하게 알아보려고 합니다.
EC2
AWS의 EC2는 'Amazon Elastic Compute Cloud'의 줄임말로
AWS 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다.
쉽게 말하면 아마존의 클라우드에 존재하는 컴퓨터를 사용한다는 의미라고
생각하면 될 것 같습니다.
여기서 아마존의 컴퓨터 한 대를 '인스턴스'라고 생각하면 됩니다.
현재 저는 지역을 서울로한 인스턴스를 하나 만들어서 사용중인데
(인스턴스 생성에 관해서는 따로 다루지 않겠습니다. 워낙 정리를 잘한 좋은 글들이 많아서..)
이렇게 인스턴스를 생성함으로써 저는 서울에 있는 아마존 컴퓨터 한 대를 사용할 수 있게 됐습니다.
인스턴스를 생성하는 과정 자체는 굉장히 짧은 시간 안에 이뤄집니다.
모든 절차를 알고 있다는 가정 하에 약 1분 남짓한 시간 안에 인스턴스 하나를 생성할 수 있습니다.
이 편의성이 생각해보면 굉장히 놀랍습니다.
제가 서버를 구축해야 하는 상황이라고 할 때
실제 물리적인 컴퓨터를 이용해 서버를 구축해야 한다면
컴퓨터를 구입하든 설치하든 해서 목적에 맞는 운영체제를 설치하고
세부적인 설정을 해야 서버로써 동작할 수 있게 됩니다.
말로 듣기만 해도 굉장히 수고스러운 과정들이죠.
이런 과정을 단 1분 만에 AWS의 EC2 서비스를 이용해 해낸 것이니..
소개에 짱짱맨이라고 본인들을 소개한 이유가 있는 것 같습니다.👍👍
이렇게 생성한 인스턴스는 임의로 실행/정지가 가능한데
이렇게 필요에 따라 실행/정지가 가능한 인스턴스를 온디맨드 인스턴스라고 합니다.
이렇게 실행/정지가 가능한 인스턴스는 사용하지 않을 때는 정지시킬 수 있기 때문에
좋은 가격 경쟁력을 갖게 됩니다.
이러한 온디맨드 인스턴스와 살짝 다른 개념을 갖는 것이 예약 인스턴스입니다.
예약 인스턴스는 사용 계약 기간에 따라 할인 혜택을 제공해줍니다.
만약 제가 하나의 웹 서버를 1년 동안 끄지 않고 돌려야 한다면
온디맨드 인스턴스를 사용하기 보다는 예약 인스턴스를 사용해 할인 혜택을 받는 것이
가격에 있어서 더 좋은 선택이됩니다.
위 화면이 제 컴퓨터에서 원격의 컴퓨터를 띄운 모습
참으로 신기하다..
저는 AMI(Amazon Machine Image)로 윈도우를 선택하였는데
윈도우의 경우 IIS(Internet Information Services)라는 윈도우 서버가 존재합니다.
이를 이용해 한 번 서버에 접근하여 'Hello World'를 화면에 출력해보려고 합니다.
위와 같은 파일 경로에 'Hello World'를 작성한 html 파일을 담아둡니다.
AWS에서는 다음과 같이 domain 주소를 얻을 수 있습니다.
위 도메인으로 접근하게 되면 다음과 같이 'Hello World'가 출력되는 것을 볼 수 있습니다.
이렇게 Web Server를 만들고 난 뒤에 후에 사용량이 많아지면 어떻게 될까요?
우선 저는 프리티어이기 때문에 사용자가 조금만 많아져도 버벅일 겁니다.
이럴 경우 처음 해볼 수 있는 생각이 무엇일까요?
바로 Scale-Up입니다. 말 그대로 스케일을 키운다는 것이죠.
프리티어 단계가 아니라 더 좋은 사양, 더 큰 용량을 갖고 있는 EC2 서비스를 선택해서
서버를 옮기는 것입니다.
서버를 옮길 때는 본래 운영하던 자신의 인스턴스를 이미지화해서
옮기는 서버에서 이미지를 가져와 그대로 사용할 수 있습니다.
또한 Scale-Out 정책을 사용할 수도 있습니다.
Scale-Out은 egoing님의 생활코딩 강의의 한 장면을 통해 쉽게 설명할 수 있는데요
위의 그림과 같이 하나의 클라우드 컴퓨터에서 제공하던
웹 서버, 미들웨어, 데이터베이스를 다른 컴퓨터에서 동작하게 분리하고,
데이터베이스가 무거워질 경우 데이터베이스 서버를 증설하는 등
제공하는 서비스별로 컴퓨터를 분리하는 것이 Scale-Out입니다.
미들웨어도 데이터베이스와 같이 부하가 걸릴 경우 증설이 가능합니다.
그렇다면 웹 서버는 어떨까요?
공인 IP와 DNS를 갖고 있는 웹 서버를 증설해도 되는 걸까요?
정답은 가능합니다.
이때 두 가지 방식이 존재하는데,
첫 번째는 DNS에 여러 개의 IP를 할당해 웹 서버를 증설하는 방식이고
두 번째는 'Load Balance'라는 것을 웹 서버 앞에 두어, Load Balance가 DNS나 IP 정보를 갖게 하고,
사용자의 요청에 우선적으로 Load Balance가 응답한 후에 실행할 웹 서버를 선택해주는 방식입니다.
AWS에서는 이러한 Load Balance의 기능을 제공하기 위해
ELB(Elastic Load Balance)라는 기능을 제공하고 있습니다.
S3(Simple Storage Service)
S3는 쉽게 말해 파일을 저장하게 해주는 서비스입니다.
로컬 환경에 파일을 저장하는 경우 하드가 고장나거나 유실하게 되는 경우
데이터가 모두 날라가기 때문에 굉장히 치명적인 문제가 발생할 수 있습니다.
아마존의 S3를 사용하는 경우 99.999999999%의 확률로 데이터를 안전하게 보관해준다고 하니
만약 기업이나 웹 서비스를 제공하는 개인의 경우 데이터 유실의 위험이 있다면
S3를 통해 효율적으로 데이터를 저장하고 관리할 수 있게됩니다.
현재 진행 중인 프로젝트에 프로필 사진이나
게시글을 업로드 하는 기능을 구현 중인데
이런 파일을 로컬에 저장하는 것이 아닌
AWS의 S3를 이용한다면 보다 효율적으로 안전한게 파일 관리를 할 수 있겠네요.
RDS(Relational Database Service)
AWS에서 제공하는 관계형 데이터베이스 서비스입니다.
AWS의 RDS를 사용한다면 데이터베이스 시스템을 보다 안정적으로 운용할 수 있습니다.
쉽게 말해 데이터베이스를 개인이 관리하게 된다면
데이터의 유실 가능성과, 데이터베이스 서버가 다운되는 경우 심각한 서비스 오류가 발생할 수 있습니다.
AWS의 RDS는 이런 위험을 차단하고
사용자가 데이터베이스 스키마 설계나, 쿼리 작성에 집중하게 할 수 있는 서비스입니다.
저는 현재 프로젝트를 위해 'doit'이라는 데이터베이스를 만들었는데
DBeaver를 이용해 연결한 모습입니다.
자세한 RDS 인스턴스 생성 방법은
앞서 언급한 EC2처럼 워낙 잘 정리되어 있는 다른 블로그들이 많기 때문에
생략하겠습니다.
AWS에 대한 기본적인 개념과
자주 사용되는 AWS 서비스인 EC2, S3, RDS에 대한 간단한 내용을 알아봤습니다.
글을 쓰기 전에는 굉장히 모호했는데
정리하다보니 AWS가 왜 인기가 있는지 알 것 같습니다.
글을 작성하면서 egoing님의 2015년도 강의를 많이 봤는데
예전 강의라 현재와 맞지 않는 부분이 많을까 걱정을 했는데
사용법이 크게 다르지 않고 강의 내용이 너무 좋아서
AWS를 처음 접하시는 분들은 egoing님 강의를 참고하시면 좋을 것 같습니다!
'내가 공부하려고 올리는 > Network' 카테고리의 다른 글
네트워크(Network) - TCP와 UDP (0) | 2021.09.15 |
---|---|
네트워크(Network) - TCP,IP와 TCP/IP 4계층 (0) | 2021.09.15 |
네트워크(Network) - OSI 7계층 (0) | 2021.09.15 |
네트워크(Network) - 기본 이해하기(네트워크 장비) (0) | 2021.09.14 |
댓글