2022. 9. 26. 01:07ㆍDevOps
Server
“서버에 배포한다”, “서버에 올린다”, “서버가 터졌다” 이런 말들을 많이 들어봤을 것이다. 그러면 여기서 말하는 “서버”는 무엇일까? 사전적 의미의 Server는 무언가를 제공해주는 사람이나 물건을 의미한다. 좀 더 나아가서 우리가 일상생활, 그리고 IT 업계에서 말하는 서버는 “무언가를 제공해주는 컴퓨터”이다.
우리는 인터넷으로 특정한 웹사이트나, 리소스에 접근한다. 하지만 정확히 말하자면 우리가 접근하는 대상은 웹사이트, 리소스 자체가 아니라 해당 웹사이트와 리소스를 응답해주는 컴퓨터에 접속하는 것이다.
추상적으로 서비스가 운영되고 제공되는 과정을 알아보자면, 먼저 서비스를 운영하기 위해 특정 컴퓨터를 가동하고, 해당 컴퓨터에서 특정 프로그램을 실행시켜서 컴퓨터에 네트워크를 통해 접근하면 특정한 리소스를 응답해주도록 만든다. 그리고 인터넷을 통해서 이 컴퓨터를 외부에서 접근 가능하도록 설정한다. 이러한 동작을 하는 컴퓨터를 서버라고 부른다.
서버는 물리적인 실체가 있는 컴퓨터다. 그리고 컴퓨터는 CPU, GPU, RAM, Memory 등으로 이루어져 있고 각기 사양을 가지고 있다. 흔히 “서버가 터졌다"라고 말하는 것은 서버 컴퓨터가 사용 가능한 사양을 넘어서는 계산이 필요해진 경우 컴퓨터가 제대로 모든 계산들을 처리해내지 못하는 상황 또는 서버 컴퓨터에서 실행 중이던 프로그램이 의도치 않게 종료되어서 더 이상 운영이 안 되는 상황, 인터넷을 통해서 서버 컴퓨터에 접근을 할 수 없는 상황 등을 의미한다.
이러한 서버 컴퓨터를 운영하는 방식으로 어떤 방법이 있는지 알아보자.
서버 운영 방식
서버 컴퓨터를 운영하는 방법은 크게 두 가지로 나뉜다. 첫 번째는 기존의 전통적인 서버 운영 방식인 온 프레미스 방식, 두 번째는 현재 개발 업계에서 주류를 차지한 클라우드 컴퓨팅 방식이다. 두 가지 방식이 어떤 것이고 무슨 차이를 가지고 있는지 알아보자.
온 프레미스 (On-premise)
온 프레미스는 서버를 운영하는 측에서 서버에 필요한 물리적인 공간, 컴퓨터, 제반 시설 등을 직접 구축해서 활용하는 방식을 의미한다. 온 프레미스 방식은 직접 물리적인 서버를 구축하고 관리할 수 있는 전문 인력이 하드웨어를 구입해서 서버실을 구성하고 설계한다.
온 프레미스 방식은 서버를 운영하는 가장 기본적인 방식이지만 서버에 필요한 하드웨어를 직접 구매해서 사용하므로 추후 필요한 하드웨어 사양이 변경되었을 경우 그에 맞춰서 하드웨어를 다시 판매 및 구축하기 어렵다는 점, 컴퓨터를 제외하고도 서버에 필요한 물리적인 제반 시설을 모두 갖추고 문제가 생기진 않는지 모니터링을 해야 한다는 점 등 급변하는 소프트웨어에 맞춰서 유지 보수하기가 어렵다는 단점으로 인해 많은 기업들이 현재는 온 프레미스 방식을 벗어나서 클라우드 컴퓨팅 기반의 환경으로 변경하고 있다.
다만 서버를 물리적인 부분까지 온전히 통제할 수 있다는 장점으로 인해서 보안이 중요한 환경에서는 여전히 온 프레미스 방식을 활용하기도 한다. 나도 전 직장에서 온 프레미스 방식 서버를 구축하고 관리해본 경험이 있다.
클라우드 컴퓨팅 (Cloud Computing)
클라우드 컴퓨팅은 컴퓨터를 인터넷을 이용한 클라우드 서비스를 통해서 사용하는 것을 의미한다. 클라우드 컴퓨팅은 직접 물리적인 서버를 구매해서 관리할 필요 없이 클라우드 서비스 프로바이더를 원하는 사양을 원하는 시간만큼 대여해서 사용할 수 있다.
클라우드 서비스 프로바이더는 전 세계에 걸쳐 서버를 운영할 수 있는 인프라를 구축해두고 여기서 물리적인 컴퓨터를 관리하고 있으며 이를 가상화 기술을 통해 원하는 만큼 분리해서 서비스의 사용자에게 제공할 수 있다. 클라우드 컴퓨팅의 사용자 입장에서는 물리적인 관리에 대한 필요성이 없어지며 개별 기업에서 운영하는 것보다 훨씬 더 안정적인 환경을 제공받을 수 있기에 관리상에 이점이 있다.
또한, 클라우드 컴퓨팅을 사용할 경우 내가 필요한 사양을 필요한 시간만큼만 대여해서 사용할 수 있기에 비용 측면에서 효율적이며 단순히 클릭 몇 번으로 컴퓨터의 사양 또는 개수를 늘릴 수 있기 때문에 서비스의 확장 측면에서도 이점을 가지고 있다.
클라우드 컴퓨팅의 구분
클라우드 컴퓨팅은 제공하는 서비스의 수준에 따라서 3 계층으로 구분 지을 수 있다.
IaaS (Infrastructure as a Service)
IaaS는 클라우드 컴퓨팅의 가장 기본적인 형태로서, 인프라를 구축하기 위해 필요한 컴퓨터를 대여해주는 것을 의미한다. IaaS는 대여받은 컴퓨터의 대부분의 리소스에 접근해서 서비스를 구성하고 관리할 수 있으므로 가장 많은 제어권을 가지고 있지만 반대로 가장 많은 부분을 사용자가 일일이 구성하고 관리해줘야 한다는 단점이 있다.
e.g., Amazon EC2
PaaS (Platform as a Service)
PaaS는 IaaS에 더불어 소프트웨어를 개발하고 운영하기 위해 필요한 구성요소들을 플랫폼화 해서 제공해주는 서비스다. PaaS를 사용하면 개발자들은 소프트웨어의 운영에 대한 관리를 PaaS에 위임할 수 있기 때문에 효율적인 개발이 가능하다. 다만, 플랫폼의 형태로 제공된다는 점으로 인해 특정 플랫폼에 종속적이 될 수 있다는 점, 해당 플랫폼에서 접근을 허용하지 않는 부분은 제어할 수 없다는 점, IaaS에 비해 더 높은 비용을 지불해야 할 수도 있다는 점 단점들도 있다.
e.g., AWS Elastic BeanStalk, Heroku, Github Pages
SasS (Software as a Service)
SaaS는 클라우드 서비스에 더불어, 고객이 이를 사용할 수 있는 소프트웨어가 함께 제공되는 형태를 의미한다. 클라우드 서비스를 통해서 제공받기에 명시적으로 애플리케이션을 PC에 설치할 필요가 없으며, 서비스를 활용하기 위해 만들어진 소프트웨어가 제공되기에 이를 통해 편리하게 여러 기능 등을 제공받고 활용할 수 있는 형태다.
e.g., DropBox, iCloud, Netflix, Google Apps, Slack
참고하기 좋은 관련 자료
클라우드 저장소와 온-프레미스 저장소 비교하기: 유의해야 할 9가지 요소
비즈니스 정보를 온-프레미스와 클라우드 중 어디에 저장할 것인지 또는 한 곳에서 다른 곳으로 마이그레이션할 것인지 결정해야 할 때 이 모든 것이 복잡하고 어렵게 느껴질 수 있습니다. 그런
www.microsoft.com
https://cloud.google.com/learn/what-is-cloud-computing?hl=ko
클라우드 컴퓨팅이란 무엇인가요? | Google Cloud
클라우드 컴퓨팅에 대해 헷갈리시나요? 퍼블릭 클라우드 컴퓨팅은 확장 가능한 주문형 서비스를 제공합니다. 클라우드 컴퓨팅 유형에 대해 자세히 알아봅니다.
cloud.google.com
'DevOps' 카테고리의 다른 글
트렁크 기반 개발(Trunk-based development) 개념 정리 (0) | 2022.12.14 |
---|---|
애자일 소프트웨어 개발(Agile software development) 개념 정리 (0) | 2022.12.12 |
단일 저장소(Monorepo)에 대한 개념 정리 (0) | 2022.12.11 |
Firebase란? - Firestore, Cloud Functions, Hosting (0) | 2022.11.27 |
CI/CD란? - 테스트, 배포 자동화 (0) | 2022.10.25 |