Cloud Computing / Deploy

yezo cha·2021년 8월 11일
0
post-thumbnail

Cloud Computing

클라우드 컴퓨팅은 인터넷(클라우드)를 통해 서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어 등의 컴퓨팅 서비스를 제공하는 것이다.

등장 배경

클라우드 등장 이전의 방식은 흔히 말하는 서버실과 같은 곳에 컴퓨터를 배치하고 인터넷을 연결하여 서비스를 제공했다.(온프레미스)
그런데 만약 서버가 요청에 대한 수용 능력이 한계에 도달한다면 어떻게 대처할까? (컴퓨팅 능력이 더 필요하다면?)

같은 공간에 더 많은 컴퓨터를 제공하여 한 대가 해결할 수 있는 요청을 여러 대가 나누는 방식을 사용할 수 있다.
또는 컴퓨터 성능을 업그레이드 해준다.

하지만 이런 방식은 몇 가지 문제점들이 있다.
먼저, 주기적인 유지 관리가 필요하다.
또한 공간의 한계가 있다.
서버실이라는 공간에 컴퓨터를 배치해두고 필요할 때마다 컴퓨터를 추가하는 방식으로 수용 능력을 향상해 왔는데, 이러한 방식은 공간이 부족하여 컴퓨터를 더이상 배치할 수 없는 문제에 직면하게 된다.

이런 상황에서 추가적인 서버 증설이 어렵게 되자 데이터 센터라는 거대한 건물을 세우기 시작했고, 이때부터 데이터센터의 유휴 자원을 대여하는 서비스가 등장하기 시작한다.

즉, 서버의 자원과 공간 그리고 네트워크 환경을 빌려 사용하는 클라우드 컴퓨팅이 시작된 것이다.

장점

  • 필요할 때마다 컴퓨팅 능력을 유연하게 조절할 수 있다.
  • 고정적인 비용이 들어가는 온프레미스와는 달리 사용한 만큼의 요금만 지불하면 된다.
  • 컴퓨터의 스냅샷을 이용해 다른 컴퓨터로 즉시 마이그레이션이 가능하다.

단점

  • 운영 환경 자체가 클라우드 제공자에게 종속되어 버리기 때문에, 클라우드 서비스에 문제가 생기면 내가 배포하고 관리하는 환경에도 영향이 미친다.

서비스 형식 : IaaS, PaaS, SaaS

IaaS(Infrastructure as a Service)

클라우드 컴퓨팅 서비스의 가장 기본적인 범주.
서버, 스토리지, 네트워킹 등과 같은 IT 인프라를 서비스 형태로 제공한다.
사용한 만큼 비용을 지불한다.
AWS의 EC2, S3

PaaS(Platform as a Service)

클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우 대부분 PaaS에 해당한다.
IaaS처럼 PaaS에는 서버, 저장소, 네트워킹 뿐만 아니라 미들웨어, 개발 도구, BI 서비스, 데이터베이스 관리 시스템 등도 포함되어 있다.

SaaS(Software as a Service)

클라우드에서 완전한 소프트웨어 솔루션을 제공.
클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우 대부분 SaaS에 해당한다.

Deployment

배포는 개발한 서비스를 사용자가 이용 가능하게 하는 과정이다.
회사마다 추가적인 과정이 있을 수 있지만, 기본적으로 Development, Intergration, Staging, Production 이렇게 4단계를 거쳐서 개발한 서비스를 배포하게 된다.

  • Development
    • Local 컴퓨터 환경에서 코드를 작성하고 테스트 하는 과정.
    • 개발 단계이기 때문에 더미데이터를 이용해서 테스트한다.
    • 변경사항이 있어도 문제가 되지 않는다.
    • 모든 구성원이 각자의 환경에서 진행한다.
  • Intergration
    • 각자의 환경에서 작성한 코드를 취합하는 과정.
    • 작성한 코드가 다른 코드에 문제를 발생시키지 않는지, 코드간 Conflict가 없는 지 확인하는 단계.
  • Staging
    - Production단계와 가장 유사한 환경에서 테스트를 진행.
    • 실제 데이터를 복사해 다양한 환경에서 테스트를 진행.
    • 모든 관계자들에게 검증하는 단계.
  • Production
    • 개발된 서비스를 출시하는 단계.
    • 사용자가 접속할 수 있는 Production환경에서 코드를 구동하고 서비스를 제공.
    • 실제 데이터를 이용해서 실제로 서비스가 제공되는 단계. 문제 생기면 안된다..

배포에서는 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.

작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면 ?

환경변수에 설정을 저장한다.(.env)
환경 변수는 코드 변경없이 배포 때마다 쉽게 변경할 수 있다.
잘못해서 코드 저장소에 올라갈 가능성도 적다.

  • 절대경로가 아닌 상대경로를 사용한다.
  • 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정해준다.
  • Docker 사용.
    • Docker와 같은 가상화 도구는 환경 자체를 메타데이터로 담아서 모든 개발 환경을 통일시킨다.
profile
(ง •̀_•́)ง

0개의 댓글