IT 공부하다보면 클라우드 컴퓨팅 개념이 필수로 등장하기에 이참에 정리해보려고 한다.
1. Server
서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 또는 장치를 의미한다. https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B2%84 단어 자체에서 알 수 있듯이 무언가를 제공하는 주체다. 웨이터와도 비슷한 의미로 쓰이는데, 음식이나 서비스를 제공하는 주체로서의 의미를 갖는다. 내가 카페 일하면서 쓰는 서버라는 단어는 추출한 커피를 담는(제공하는) 유리병을 의미한다. 크롬(웹 브라우저)를 사용해 네이버 웹툰(웹 사이트)에 접근할 때 크롬이 클라이언트 역할을 하고, 네이버 웹툰의 콘텐츠가 있는 컴퓨터가 서버다. 서버와 클라이언트로 구성된 시스템을 클라이언트-서버 시스템이라고 한다. 개인적인 생각이지만 서버라는 개념은 아래 3가지로 구성된다고 볼 수 있을 것 같다.
- 사용자의 요청을 받아서 이걸 처리하고, 사용자에게 다시 응답을 주는 일련의 프로세스
- 이 프로세스를 코드로 구현한 프로그램
- 이런 프로그램을 설치하고, 데이터를 저장할 수 있는 장치
우리가 인터넷으로 제공받고 있는 모든 정보는 각기 다른 역할의 서버로부터 제공받는 서비스다. 서버는 역할에 따라 다양하게 구분된다. 이 때, 역할 = 프로그램이라고 정의할 수는 없지만, 프로그램이 역할을 구분짓는데 큰 요인이라고 할 수는 있다. 한 대의 서버에 여러 역할이 혼재해 있을 수도 있고, 여러 서버에 각각 역할을 부여하여 사용할 수도 있다. 공통점이라면, 서버의 정의에서도 나와있듯이 네트워크를 요하는 작업이라는 점을 고려하자.
- 웹 서버: 웹사이트를 관리하는 서버
- DNS 서버: 도메인을 관리, 제공하는 서버
- 이메일 서버: 이메일을 관리하는 서버
- 파일 서버: 파일을 관리, 제공하는 서버
- 프린터 서버: 프린터를 제어하는 서버
물리적인 장치 관점에서 논하자면, 회사의 커다란 서버실에 즐비한 큰 기계 장치를 떠올릴 수 있지만, 내가 사용하는 이 작은 노트북도 네트워크만 연결되어 있다면 서버로 사용할 수 있다. 이러한 장치를 서버 컴퓨터라고 하는데 일반 컴퓨터와 구조는 비슷하나 성능이 높다는 차이가 있다. 이런 고성능 서버를 여러 대 증축해서 분산처리하는 것이 일반적인 경우다. 예를 들어 클라이언트 규모가 작다면 파일 서버, 프린터 서버, 통신 서버를 한 대의 서버에서 담당하지만, 클라이언트 규모가 크다면 여러 서버를 설치해 역할을 세분할 수 있다.
1-(1). 서버 구축
만약 내가 나만의 서버를 만들고 싶다면 어떻게 해야할까? 그냥 내 노트북에 소프트웨어를 설치하고 실행하면 된다. 이 소프트웨어를 서버 소프트웨어라고 한다. 예를 들어 웹 서비스를 제공하는 웹 서버 소프트웨어를 내 노트북에 설치하면, 내 노트북이 웹 서버가 된다.
이 중 당연히 유료인 서버 소프트웨어도 있을 것이다. 그러면 내가 네트워크를 통해 어떤 서비스를 제공하고자 할 경우, 실질적으로 장치 비용 + 서버 소프트웨어 설치 비용에 서버 운용 비용까지 지불해야 할텐데 생각보다 만만치 않은 작업이라는 것을 알게 되었다. 일단 어느 서버를 만들어야 할지 결정하는 것도 오래 걸릴 것 같다. 스타트업 개발자 서버 구축기 이 분은 개인이 가상 서버 호스팅 + 도커를 활용해 서버를 구축하는 과정을 정리한 것인데 참고하면 좋다.
호스트 서버라는 한 대의 서버 안에 Wordpress, Nginx, Golang, React, MySQL 등 여러 서버 소프트웨어를 설치해서 구축한 것 같다.
2. Network
서버는 결국 네트워크를 통해 클라이언트에게 서비스를 제공한다. 그럼 네트워크가 뭐길래? 어떻게 무형의 정보, 서비스를 직접 만나지도 않고 제공해줄 수 있는걸까? 사실 네트워크라는 개념을 너무나 추상적으로 받아들이고 있어 이해가 안될 때가 많았는데, 이 참에 어떤 물리적 표상으로 정리를 해보고 싶다. 네트워크는 학교에서 배운 것 처럼 노드와 엣지로 구성된다고 볼 수 있다. 친구를 예로 들면, 친구 자체는 노드가 되고, 그 사이를 잇는 우정은 엣지가 된다. 이러한 구조 전반을 네트워크라고 하는데, 이 포스트에서 네트워크는 컴퓨터와 컴퓨터 간 연결을 의미한다고 한정짓겠다. 컴퓨터 네트워크를 통해 서버는 요청을 받고, 그에 대한 서비스를 제공한다. 즉, 요청이란 데이터와 제공할 서비스라는 데이터를 네트워크를 통해 받고, 전달하는 셈인데 이 데이터를 케이블 또는 전파에 실어 나른다.
그럼 인터넷은 뭘까? 이는 Internetwork의 준말로, 전세계의 네트워크를 연결하는 거대한 네트워크를 의미한다. LAN은 Local Area Network의 준말로, 회사같이 비교적 좁은 범위 내에 존재하는 컴퓨터를 연결하는 네트워크를 뜻한다. 흔히 말하는 랜선은 결국 LAN 케이블과 동일하며, 조직 내 네트워크에 접근하기 위해 케이블이라는 유선 매개체를 이용해 데이터를 전송하는 역할을 한다. 그러면 어떻게 케이블 하나 연결했다고 데이터가 전송될 수 있는걸까? 또 대륙 간 네트워크를 위해 해저에 거대한 케이블을 설치했다는데, 이게 진짜라면 이것도 결국 유선 케이블의 일종인건가? 이런 내용을 정리하려고 찾아보니, 너무나 많은 지식의 홍수에서 나한테 필요한 정보를 찾기 어렵다. 네트워크만 해도 무엇을, 어떻게 잘, 어떻게 빠르게, 어떻게 잡음 없이 등등 관련 지식이 너무나 많아 일단 보류하고 싶다…일단 말도 안되는 것 같지만, 전선에 흐르는 전류에 비트 단위로 쪼갠 데이터를 전송시키는 방식이라고만 받아들이고 나중에 고치자.
3. Clound Computing
드디어 이 포스트의 목적인 클라우드 컴퓨팅이다. 사실 이 포스트를 작성하게 된 계기는 AWS를 공부하던 중, ‘힘들게 비싼 돈 주고 서버 살 필요 없이 아마존에만 내면 땡’이라는 글을 읽고 더 자세히 알고 싶어 정리해보기로 한 것이다.
클라우드 컴퓨팅이란 데이터 스토리지, 컴퓨팅 파워 등의 컴퓨터 시스템 리소스를 on-demand availabilty 하는 것으로 일종의 서비스다. 그렇기에 다양한 종류의 클라우드 서비스가 제공되고 있는데, 제공 범위에 따라 아래와 같이 구분지을 수 있다.
가상화에 주목해야 하는데, 클라우드 컴퓨팅이란 곧 기존 자산을 완벽하게 가상화시키는 것이기 때문이다.
클라우드 컴퓨팅 시장은 아래 3강이 대표적이며 AWS가 가장 큰 점유율(30%, 2018 기준)을 갖는다. 이 외 Alibaba, IBM, NTT, Tencent 등이 뒤따르고 있다.
- AWS
- Microsoft Azure
- Google Cloud Platform