1. 서버란?
사전적 의미의 Server는 무언가를 제공해주는 사람이나 물건을 의미한다. 좀 더 나아가서 우리가 일상생활, 그리고 IT 업계에서 말하는 서버는 “무언가를 제공해주는 컴퓨터” 이다.
우리는 흔히 인터넷으로 특정한 웹사이트나, 리소스에 접근하는데 정확히 말하자면 우리가 접근하는 대상은 웹사이트, 리소스 자체가 아니라 해당 웹사이트와 리소스를 응답해주는 컴퓨터에 접속하는 것이다.
추상적으로 서비스가 운영되고 제공되는 과정을 알아보자면 서비스를 운영하기 위해서는 특정한 컴퓨터를 가동시킨다. 그리고 해당 컴퓨터에서 특정 프로그램을 실행시켜서 컴퓨터에 네트워크를 통해 접근하면 특정한 리소스를 응답해주도록 만든다. 그리고 인터넷을 통해서 이 컴퓨터를 외부에서 접근 가능하도록 설정한다. 이러한 동작을 하는 컴퓨터를 우리는 흔히 “서버"라고 부른다.
서버는 물리적인 실체가 있는 컴퓨터다. 그리고 컴퓨터는 CPU, GPU, RAM, Memory 등으로 이루어져있고 각기 사양을 가지고 있다. 우리가 흔히 “서버가 터졌다"라고 말하는 것은 서버 컴퓨터가 사용가능한 사양을 넘어서는 계산이 필요해진 경우 컴퓨터가 제대로 모든 계산들을 처리해내지 못하는 상황 또는 서버 컴퓨터에서 실행중이던 프로그램이 의도치 않게 종료되어서 더이상 운영이 안되는 상황, 인터넷을 통해서 서버 컴퓨터에 접근을 할 수 없는 상황 등을 의미한다. 그렇다면 이러한 서버 컴퓨터를 안정적으로 운영하기 위한 방법은 어떤 것이 있을까?
2. 서버를 운영하는 방법
서버 컴퓨터를 운영하는 방법은 크게 두가지로 나뉜다. 첫번째는 기존의 전통적인 서버 운영 방식인 온 프레미스방식이며 두번째는 현재 개발 업계에서 주류를 차지한 클라우드 컴퓨팅방식이다. 이 두가지 방식이 어떤 것이고 무슨 차이를 가지고 있는지 알아보자!
2-1. 온 프레미스(On-Premise)
온 프레미스는 서버를 운영하는측에서 서버에 필요한 물리적인 공간, 컴퓨터, 제반 시설등을 직접 구축해서 활용하는 방식을 의미한다. 온 프레미스 방식은 직접 물리적인 서버를 구축하고 관리할 수 있는 전문 인력이 하드웨어를 구입해서 서버실을 구성하고 설계한다.
- 온 프레미스 방식은 서버를 운영하는 가장 기본적인 방식
- 서버에 필요한 하드웨어를 직접 구매해서 사용하므로 추후 필요한 하드웨어 사양이 변경되었을 경우 그에 맞춰서 하드웨어를 다시 판매 및 구축하기 어렵다는 점
- 컴퓨터를 제외하고도 서버에 필요한 물리적인 제반 시설을 모두 갖추고 문제가 생기진 않는지 모니터링을 해야한다는 점
- 급변하는 소프트웨어에 맞춰서 유지보수하기가 어렵다는 단점
이러한 점들로 많은 기업들이 현재는 온 프레미스 방식을 벗어나서 클라우드 컴퓨팅 기반의 환경으로 변경하고 있다. 다만 서버를 물리적인 부분까지 온전히 통제할 수 있다는 장점으로 인해서 보안이 중요한 환경에서는 여전히 온 프레미스 방식을 활용하기도 한다.
2-2. 클라우드 컴퓨팅(Clouding Computing)
컴퓨터를 인터넷을 이용한 클라우드 서비스를 통해서 사용하는 것을 의미한다. 클라우드 컴퓨팅은 직접 물리적인 서버를 구매해서 관리할 필요 없이 클라우드 서비스 프로바이더를 원하는 사양을 원하는 시간만큼 대여해서 사용할 수 있다.
클라우드 서비스 프로바이더는 전세계에 걸쳐 서버를 운영할 수 있는 인프라를 구축해두고 여기서 물리적인 컴퓨터를 관리하고 있으며 이를 가상화 기술을 통해서 원하는 만큼 분리해서 서비스의 사용자에게 제공할 수 있다.
클라우드 컴퓨팅의 사용자입장
- 관리상에서의 이점 - 물리적인 관리에 대한 필요성이 없어지며 개별 기업에서 운영하는 것보다 훨씬 더 안정적인 환경을 제공받을 수 있다.
- 비용측면에서 효율적 - 클라우드 컴퓨팅을 사용할 경우 내가 필요한 사양을 필요한 시간만큼만 대여해서 사용할 수 있다.
- 서비스의 확장 측면에서 이점 - 간단한 클릭 몇 번을 통해 컴퓨터의 사양 또는 갯수를 늘릴 수 있다.
3. 클라우드 컴퓨팅의 구분
클라우드 컴퓨팅은 제공하는 서비스의 수준에 따라서 3개의 계층으로 구분지을 수 있다.
3-1. IaaS (Infrastructure as a Service)
- IaaS는 클라우드 컴퓨팅의 가장 기본적인 형태로서, 인프라를 구축하기 위해 필요한 컴퓨터를 대여해주는 것을 의미
- IaaS는 대여받은 컴퓨터의 대부분의 리소스에 접근해서 서비스를 구성하고 관리할 수 있으므로 가장 많은 제어권을 가지고 있지만 반대로 가장 많은 부분을 사용자가 일일이 구성하고 관리해줘야 한다는 단점
- e.g., AWS EC2
3-2. PaaS (Platform as a Service)
- IaaS에 더불어 소프트웨어를 개발하고 운영하기 위해 필요한 구성요소들을 플랫폼화해서 제공해주는 서비스
- PaaS를 사용하면 개발자들은 소프트웨어의 운영에 대한 관리를 PaaS에 위임할 수 있기 때문에 효율적인 개발이 가능
- 하지만, 플랫폼의 형태로 제공된다는 점으로 인해 생기는 단점들
- 특정 플랫폼에 종속적이 될 수 있다는 점
- 해당 플랫폼에서 접근을 허용하지 않는 부분은 제어할 수 없다는 점
- IaaS에 비해 더 높은 비용을 지불해야 할 수도 있다는 점 - e.g., AWS Elastic BeanStalk, Heroku, Github Pages
3-3. SaaS (Software as a Service)
- SaaS는 클라우드 서비스에 더불어, 고객이 이를 사용할 수 있는 소프트웨어가 함께 제공되는 형태를 의미
- 클라우드 서비스를 통해서 제공받기에 명시적으로 애플리케이션을 PC에 설치할 필요가 없으며, 서비스를 활용하기 위해 만들어진 소프트웨어가 제공되기에 이를 통해 편리하게 여러 기능 등을 제공받고 활용 할 수 있는 형태
- e.g., DropBox, iCloud, Netflix, Google Apps, Slack
4. AWS (Amazon Web Service)
AWS(Amazon Web Service)는 클라우드 컴퓨팅 서비스를 제공하는 프로바이더 중 하나로서, 현재 전 세계에서 가장 많이 사용되고 있는 클라우드 컴퓨팅 서비스다. AWS는 단순 컴퓨팅 자원을 제공해주는 것 뿐만 아니라 이를 편리하게 관리할 수 있는 서비스, 서버리스 서비스 등 수많은 서비스를 확장성, 안정성, 높은 보안수준과 함께 제공한다.
5. AWS S3
AWS의 S3서비스는 Simple Storage Service를 의미한다. Storage 라는 표현 그대로 특정한 파일을 저장하고 인터넷상으로 접근할 수 있게 해주는 서비스다. 보통 서비스에 필요한 이미지나 파일등을 저장해두는 용도로 사용하지만 정적인 파일들을 안정적으로 제공할 수 있다는 점을 이용해서 정적 웹사이트 호스팅에도 사용할 수 있다.
Create React App을 이용해서 만든 리액트 프로젝트의 경우 build 명령어를 실행하면 정적인 build 파일들이 생성되고 이를 브라우저에서 접근해서 실행하면 Client Side Rendering을 통해서 동작하는 특징을 이용해서 S3서비스를 통해서 배포를 할 수 있다.
- CRA 배포용 S3 Bucket Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucket-name>/*"
}
]
}