과거 물리적인 공간과 하드웨어를 갖춘 서버실을 구축하기 위해 막대한 시간과 비용을 들여야했지만 이젠 클라우드를 통해 클릭 몇 번 혹은 코드 몇 줄로 거대한 서버실에 해당하는 네트워크를 구축할 수 있게 되었다. 또한, 유지보수 측면에서도 큰 변화가 있었다.
자체 서버실 유지, 운영, 구축하기 위해 초기 비용과 유지/관리 비용이 들었다면 클라우드를 사용하게 된 지금은 사용한 만큼 비용을 지불하는 온디맨드(On-Demand)방식의 요금제가 도입되어 보다 합리적으로 서비스 운영이 가능하게 되었다.
대부분의 클라우드 서비스 업체는 다음과 같은 기본 장점을 가진다.
- 신속한 인프라 구축
- 유연한 인프라 관리
- 예상치 못한 트래픽 폭주 대응
- 손쉬운 글로벌 서비스
- 강력한 보안과 장애 없는 서비스
- 합리적인 요금제
기존 서버의 방식
클라우드 등장 이전흔히 말하는 전산실 등에 컴퓨터를 배치하고 인터넷을 연결하여 서비스를 제공했다.
하지만 기존 서버의 방식에는 아래와 같은 문제점들이 있다.
- 서버가 요청에 대한 수용 능력이 한계에 도달할 경우, 같은 공간에 더 많은 컴퓨터를 제공하여 요청을 여러 컴퓨터가 나누는 방식을 사용하거나 컴퓨터의 성능을 높이는 방식을 사용해야 한다.
- 주기적인 유지 관리가 필요하다. ➡️ 인력 및 비용 발생
- 공간적 한계가 존재한다.
이러한 문제점으로 추가적인 서버 증설이 어렵게되자 일부 거대 기업들은 데이터 센터라는 거대한 건물을 세워 데이터 센터의 유휴 자원을 대여하는 서비스가 등장했다. 즉, 서버의 자원 공간 및 네트워크 환경 제공을 빌려 사용하는 클라우드 컴퓨팅을 사용하기 시작했다.
클라우드 컴퓨팅(Cloud Computing)
앞서 말한 데이터 센터에서는 서버의 자원과 공간 및 네트워크 환경을 제공하는데, 이를 "온 프레미스" 라고 부른다.
현대의 클라우드 컴퓨팅은 데이터 센터와 비슷한 역할을 하지만 물리적인 컴퓨터가 아닌 가상의 컴퓨터를 대여한다는 개념이 다르다.
이는 가상화(Virtualization) 기술의 발전으로부터 비롯되었다.
온 프레미스(On-premise)
기업의 서버를 클라우드와 같이 '가상의 공간'이 아니라, 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식
최근의 가상화 기술을 사용하는 클라우드 서비스는 기존의 온 프레미스 방식과 다르게 아래와 같은 장점이 있다.
- 필요에 따라 컴퓨팅 능력을 유연하게 제어할 수 있다.
- 고정적인 비용이 들어가는 온프레미스와는 달리 사용한 만큼의 비용만 지불하면 된다.
- 컴퓨터의 스냅샷(=이미지)을 이용해 다른 컴퓨터로 즉시 이주(migration)가 가능하다.
단점
운영 환경 자체가 클라우드 제공자에게 종속되어 버리므로, 클라우드 서비스에 문제가 생기면 배포하고 관리하는 환경에도 영향을 미친다.
운영 환경이 특정 클라우드 사업자(Vendor)에게 종속된다는 말은 백엔드 구성 자체가 특정 회사의 기술로만 구성해야만 하는 경우가 발생할 수도 있다는 말과 같다. 따라서 클라우드 사업자가 제공하는 기술을 익히는 것도 중요하지만 인프라 자체에 대한 이해가 더욱 중요하다.
클라우드 서비스 형태
대표적인 서비스 및 기본 제공 서비스 범위는 아래와 같다.
- IaaS(Infrastructure as a Service) - 물리적 자원(인프라) 제공
- 가장 기본적인 IT 인프라를 제공하는 서비스로, 공급자가 네트워크, 스토리지, 서버를 가상화하여 제공하고 관리
- AWS의 EC2, S3.. etc
- PaaS(Platform as a Service) - 소프트웨어 개발 및 관리에 필요한 환경(플랫폼) 제공
- IaaS 서비스로 제공되는 인프라 위에 사용자가 원하는 서비스 혹은 응용 프로그램을 개발 할 수 있는 운영체제, 미들웨어, 애플리케이션과 같은 실행환경(Platform)을 가상화해서 제공하고 관리
- ex) 구글의 앱/웹 엔진, 마이크로소프트 Azure...
- SaaS(Software as a Service) - 최종 사용자에게 소프트웨어 제공
- 웹 애플리케이션 프로그램의 완전한 패키지를 제공하는 서비스로, 하드웨어에서 애플리케이션에 이르는 모든 시스템 계층을 제공하고 관리
- ex) 웹 기반 개인용 스토리지 서비스(DropBox, NDriver 등), 구글 드라이브(문서, 스프레드 시트, 프레젠테이션 등)
배포(Deploy)
개발한 서비스를 사용자들이 사용할 수 있게 하는 일련의 과정으로 보통 4단계로 거쳐서 개발한 서비스를 배포한다.
- 로컬개발환경(Development)
- Local 환경에서 샘플 데이터를 이용하여 개발 및 테스트
- 변경 사항이 있어도 문제가 되지 않고 모든 구성원이 각자 환경에서 진행
- 통합개발환경(Integration)
- 각자의 구성원의 환경에서 개발된 부분을 취합
- 코드 간 충돌이 없는지 확인하는 단계로 작성한 코드가 다른코드에 문제를 발생시키지 않는지 체크
- 스테이징환경(Staging)
- Production 단계와 가장 유사한 환경에서 테스팅 (복제된 실제 데이터로 테스팅)
- 모든 관계자들에게 검증하는 단계
- 운영 환경(Production)
- 실제 서비스가 제공되는 단계로 개발 환경과는 구분된 환경
- 실제 데이터 사용
⭐️ 배포에서는 환경의 차이를 이해하고 환경 설정 코드를 분리하는 것이 중요하다.
- 절대 경로가 아닌 상대 경로를 사용한다.
- 환경에 따라 포트를 분기할 수 있도록 환경 변수를 설정한다.
- Docker와 같은 개발 환경 자체를 통일 시키는 솔루션을 이용한다.
배포를 위한 다양한 플랫폼
Amazon Web Service, heroku, DigitalOcean, Microsoft Azure, Firebase 등등 .
'DevOps' 카테고리의 다른 글
[AWS] EC2, RDS, S3 (0) | 2023.07.24 |
---|