전통적 배포방식: 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 컴퓨터 리소스들을 공유하면서 여러 가지 프로그램을 설치하는 방식이다.
계정을 나누어 여러명의 사용자가 이용할 수 있도록 할 수 있지만 어떤 프로그램을 설치했을 때 다른 앱에 영향을 미친다.
가상화 배포방식: 컴퓨터의 하드웨어를 소프트웨어적으로 구현한 가상머신을 기반으로 배포한다.
한대의 컴퓨터를 가지고 여러개의 OS를 구동할 수 있게 되며 CPU, RAM을 물리적으로 갈아끼는 것이 아니라 설정만으로 개별적으로 할당량을 조절할 수 있다.
- 하이퍼바이저: 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미한다.
하이퍼바이저 위에 여러개의 가상머신을 구축할 수 있고 가상머신 위에
OS, 그리고 OS 위에 앱이 올라가는 형태로 가상머신을 독립적으로 수행할 수 있다.- 클라우드는 가상화 기술을 통해 한대의 하드웨어로 여러명의 사용자들에게 독립적인 클라우드 서비스를 제공 → 여러명의 사용자는 서로 독립된 환경에서 컴퓨팅 가능
- 샌드박스: 독립적으로 가상머신이 구축되어 서로 전혀 상호작용하지 않으며 한 가상 머신위의 프로그램은 다른 가상머신위의 프로그램에서 볼 수 없는 형태
클라우드 서비스 (Off-premise): 기업이 자체 데이터 센터나 로컬 서버에서 소프트웨어와 데이터를 운영하고 관리하는 방식이 아닌, 외부 데이터 센터나 클라우드 컴퓨팅을 통해 서버, 소프트웨어, 인프라를 호스팅하고 관리하는 방식이다.
온프레미스 (On-Premises): 기업이 자체 데이터 센터나 로컬 서버에서 소프트웨어와 데이터를 운영하고 유지 보수하는 방식으로, 데이터와 인프라를 직접 관리한다.
클라우드를 통해 사용자에게 인프라, 플랫폼 또는 소프트웨어를 제공하며 사용자들은 자체 인프라나 하드웨어 설치 없이 애플리케이션과 리소스를 쉽고 비용 효율적으로 이용할 수 있다.
클라우드의 확장성으로 인해 트래픽 증가 등의 예상치 못한 상황에 유연하게 대처할 수 있다.
- IaaS는 사용자가 인프라 자원을 직접 관리하고 필요한 소프트웨어를 설치해야한다.
→ 운영비 효율이 낮을 수 있다- 특정 클라우드 제공 업체에 의존하지 않고, 서비스 및 인프라를 다른 환경으로 이전하거나 다른 제공 업체로 변경할 수 있다.
→ 높은 유연성 및 이식성을 가진다.- AWS의 EC2, NCP 등
- 클릭을 통해 해당 서비스를 이용할 수 있습니다.
→ 플랫폼에 종속적이여서 유연하지 않으며, 이식성이 낮다.
→ 다양한 리소스가 이미 설치되어 있으므로, 운영비 효율이 좋다.- 모니터링, CI/CD가 제공된다.
- AWS Beanstalk, Heroku
- 클라우드에서 해당 소프트웨어의 설치, 업데이트, 보안 등을 모두 관리하므로 사용자는 유지보수와 같은 복잡한 과정에 관여하지 않아도 된다.
- Google Docs, Dropbox, Slack
컨테이너 : 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키징하는 소프트웨어의 표준 단위이다.
컨테이너는 OS를 공유하기 때문에 빠르고 경량화되어있으며, 높은 격리성을 가지고 있다.
- 가상 머신(VM)은 하이퍼바이저 위에서 동작하며, 하이퍼바이저는 하드웨어 가상화를 담당한다.
각 VM은 독립적인 OS 환경을 가진다.- 컨테이너는 일반적으로 컨테이너 오케스트레이션 툴인 Docker와 같은 소프트웨어 위에서 동작하며, OS를 공유하는 운영 체제 수준에서 동작한다.
도커 : 도커는 컨테이너화된 애플리케이션을 실행하기 위한 플랫폼이다.
- 도커파일: 패키지, 환경변수설정 등을 기록하고 빌드하여 도커이미지를 생성
- 도커이미지: 컨테이너 실행에 필요한 파일과 설정값, 데이터 등을 포함된 상태값으로 불변한다.
하나의 이미지에서 여러개의 컨테이너를 생성할 수 있으며 컨테이너의 상태와는 무관하게 이미지는 그대로 존재한다.- 도커컨테이너: 컨테이너가 실행시키면 도커이미지에 설정된 프로그램, 데이터 등이 실제 컴퓨팅자원과 연결되어 애플리케이션이 실행된다.
→ 특정 서버에 환경설정해야 한다면 미리 만들어진 도커이미지를 다운받아서 컨테이너만 만들면 되는 간단한 과정을 가진다.
도커를 통해 Iaas와 Paas의 장점을 모두 가져갈 수 있다.
- Continuous Integration (CI): 코드를 빌드하고 테스트하여 변경 사항을 코드베이스에 통합한다.
→ 빌드 : webpack 등
→ 테스트 : Mocah JS, JUnit
→ 머지 : git, svn- Continuous Delivery (CD): 변경 사항을 스테이징 환경으로 자동 배포하고 테스트한 후, 릴리즈를 준비하는 단계로 이동합니다.
→ 프로덕션 배포는 수동으로 시작
- 스테이징 환경 (Staging Environment): 개발이 완료된 코드 변경 사항을 실제 프로덕션 환경과 유사하게 설정한 환경에서 테스트하고 검증하는 목적으로 사용된다.
- Continuous Deployment (CD): 변경 사항을 스테이징 환경을 거치지 않고 바로 프로덕션 환경으로 자동 배포
→ 배포는 사용자를 위한 서비스 배포뿐만아니라, QA 엔지니어, 관리자페이지를 위한, 데이터 웨어하우스로부터 데이터를 가공해서 백엔드개발자를 위한 배포 등을 포함한다.