[Cloud] 운영 환경 구성
클라우드 서비스 장점
- 신속한 인프라 구축
- 유연한 인프라 관리
- 예상치 못한 트래픽 폭주 대응
- 손쉬운 글로벌 서비스
- 강력한 보안과 장애 없는 서비스
- 합리적인 요금제
Amazon Web Service
Cloud Computing
기존 방식의 한계
직접 컴퓨터를 여러대 연결 혹은 성능향상을 통해 서버를 구축하는 데이터 센터 방식의 한계점
- 주기적인 관리가 필요
- 공간의 한계
온프레미스
- 데이터 센터에서 제공하는 서버의 자원과 공간, 및 네트워크 환경
온프레미스(On-premises)는 기업이나 개인이 자체적으로 구축한 데이터 센터나 서버를 이용해 IT 인프라를 관리하는 방식을 의미한다. 온프레미스에서는 클라우드와 달리 모든 서버, 네트워크, 데이터 스토리지 등의 자원과 관리를 직접 수행한다.
온프레미스의 주요 특징:
- 전체적인 관리 권한: 자체 서버와 네트워크를 직접 관리하므로 제어와 보안에 대한 전체적인 권한을 갖는다.
- 맞춤형 구성: 자원 및 서비스를 사용자의 요구에 맞게 구성할 수 있다.
- 고정된 비용: 자원을 직접 구매하고 유지하므로 고정된 비용이 발생한다.
- 자체 유지 보수: 서버와 네트워크 장비의 유지 보수를 직접 수행해야 한다.
온프레미스의 장단점:
장점
- 데이터 보안: 데이터를 자체 데이터 센터에 보관하므로 보안에 강점이 있다.
- 맞춤형 구성: 사용자의 요구에 따라 시스템을 구성할 수 있다.
- 높은 성능: 자체 시스템을 최적화하므로 성능이 높을 수 있다.
단점
- 초기 투자 비용: 인프라를 직접 구축하므로 초기 비용이 높다.
- 유지 보수: 서버와 네트워크 장비의 유지 보수를 직접 수행해야 한다.
- 확장성 제한: 자원을 추가하거나 변경하기 어려워 확장성이 제한적이다.
가상화 기술을 사용하는 클라우드 서비스 방식
장점
-
필요할 때마다 컴퓨팅 능력을 유연하게 조절할 수 있다.
-
고정적인 비용이 들어가는 온프레미스와는 달리 사용한 만큼의 요금만 지불하면 된다.
-
컴퓨터의 스냅샷(이미지)을 이용해 다른 컴퓨터로 즉시 이주(migration)가 가능하다.
단점
- 보안 이슈
- 클라우드 컴퓨팅은 사용자의 데이터를 외부 데이터 센터에 저장하므로, 데이터 유출이나 해킹 등의 보안 위협에 노출될 수 있다. 또한, 클라우드 서비스 제공자의 보안 정책이 사용자의 요구에 부합하지 않을 수도 있다.
- 데이터 공유 및 소유권 이슈
- 클라우드 환경에서 데이터를 공유하고 관리하는 과정에서 소유권 및 접근 권한에 대한 문제가 발생할 수 있다. 또한, 클라우드 제공 업체와의 계약이 종료되면 데이터 이전이 어려울 수 있다.
- 인터넷 연결의 중요성
- 클라우드 서비스는 인터넷 연결을 통해 이용되므로, 인터넷이 불안정하거나 연결이 끊기면 클라우드 자원에 접근할 수 없게 된다. 이로 인해 작업의 중단이나 데이터 손실이 발생할 수 있다.
- 벤더 종속성
- 클라우드 서비스 제공 업체에 종속되는 경우, 해당 업체의 서비스 정책이나 가격 변동 등에 영향을 받게 된다. 또한, 클라우드 서비스 간의 이전이 어려워질 수 있어, 벤더 간의 이동성이 제한될 수 있다.
- 규제 및 법률 문제:
- 데이터의 위치나 저장 방식에 따라 다른 국가의 규제 및 법률에 영향을 받을 수 있다. 따라서, 클라우드 서비스를 이용하는 사용자는 해당 국가의 규제 및 법률을 숙지하고 준수해야 한다.
- 성능 및 지연 시간 문제
- 클라우드 서비스에서는 여러 사용자가 동시에 자원을 공유하기 때문에, 성능이 저하되거나 지연 시간이 발생할 수 있다. 특히, 네트워크 지연이나 자원 경쟁으로 인한 성능 저하가 발생할 수 있다.
클라우드 컴퓨팅의 서비스 모델
IaaS (Infrastructure as a Service)
- 클라우드 제공자가 가상 컴퓨터까지 제공
예: AWS EC2, Google Compute Engine
- 아래 그림처럼 피자에 비유하면 밀키트 사다가 집에서 해먹는 느낌
- 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공
예: AWS Elastic Beanstalk, Google App Engine
- 피자 배달받는 느낌(접시, 테이블 정도의 세팅 스스로 해야함)
SaaS (Software as a Service)
- 클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공
예: Google Workspace, Microsoft Office 365
- 가게 직접가서 먹으면 먹기만 하면 됨!
Deploy(배포)
- 개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정
- 배포에서는, 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
배포 단계
1. Development
- Local 환경에서 개발 및 테스트
- 개발단계이기 때문에 실제 데이터를 이용하지 않고 더미데이터를 이용해 테스트
- 변경사항이 있어도 문제가 되지 않음
- 모든 구성원이 각자의 환경에서 진행
2. Intergration
- 각자의 환경에서 개발된 부분을 취합
- 코드간 Conflict가 없는지 확인하는 단계
- 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인
3. Staging
- Production 단계와 가장 유사한 환경에서 테스트
- 복제된 실제 데이터를 이용해서 테스트
- 모든 관계자들에게 검증하는 단계
4. Production
- 개발환경과는 구분된 환경
- 실제 데이터를 이용
- 실제로 서비스가 제공되는 단계로 문제가 생기면 안됨
환경 변수
- Development 환경과 Production 환경은 서로 다를 수 있다.
- 따라서 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
- 작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면 설정을 환경 변수(envvars나 env)에 저장해야 한다.
- 환경 변수는 코드 변경 없이 쉽게 배포 때마다 변경 가능하다.
환경 설정을 코드로부터 분리하는 방법
- 코드상의 모든 곳에 절대 경로가 아닌 상대 경로를 사용
- 환경에 따라 포트를 분기할 수 있도록.env 등을 이용해 환경 변수를 설정
- Docker와 같은 가상화 도구를 이용해 환경 자체를 메타데이터로 담아 모든 개발 환경 통일
EC2(Elastic Computer Cloud)
EC2
아마존 웹 서비스에서 제공하는 클라우드 컴퓨팅 서비스
- 필요에 따라 성능, 용량을 자유롭게 조절할 수 있다.
- 비용, 성능, 용량면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스
- AWS에서 제공하는 클라우드 컴퓨팅 서비스로 AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
- 클라우드 컴퓨팅 : 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 서비스
- 인스턴스는 1대의 컴퓨터를 의미하는 단위이고 AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고 함
- 빌린 컴퓨터는 아마존이 전 세계에 만들어 놓은 데이터 센터(인프라)에 만들어져 있어 컴퓨터를 조작하기 위해 네트워크(인터넷)를 통해서 컴퓨터를 제어해야 한다.
- AMI를 통해서 필요한 용도에 따라 다양한 운영체제에 대한 선택이 가능하다.
- CPU와 RAM, 용량까지도 손쉽게 구성 가능
AMI(Amazon Machine Image)
- 인스턴스를 생성하는데 필요한 소프트웨어 구성(운영 체제, 어플리케이션 서버, 어플리케이션)이 포함된 템플릿
- Instance는 선택한 AMI를 토대로 구성된다.
- AWS EC2 인스턴스를 생성한다는 것은 AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것을 의미
- Image(이미지) 종류로는 단순히 운영체제(윈도우, 우분투 리눅스 등)만 깔려있는 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치되어있는 템플릿이 제공되는 경우도 있음
- ex) 우분투 + node.js, 윈도우 + JVM 등
RDS(Relational Database Service)
AWS에서 제공하는 관계형 데이터베이스 서비스
S3(Simple Storage Service)
AWS에서 제공하는 클라우드 스토리지 서비스
클라우드 스토리지
- 인터넷 공간에 데이터를 저장하는 저장소
- 뛰어난 접근성을 가지고 있다.
- 웹 환경이라면 언제 어디서나 저장된 파일에 접근할 수 있음
- 컴퓨터뿐만 아니라 웹에 접속이 가능한 다른 전자기기를 활용하여 클라우드 스토리지에 저장된 데이터에 접속할 수 있음
특징(장점)
1. 확장성
- 데이터를 무한히 저장 가능
- 많은 시간과 수고를 들이지 않고 스토리지 규모를 확장/축소할 수 있음
- 사용한 만큼만 비용을 지불하면 되기 때문에 비용적인 측면에서 매우 효율적
2. 내구성
- 저장된 파일을 유실할 가능성이 적음
- S3는 99.999999999%의 내구성을 보장
3. 가용성
- 스토리지에 저장된 파일들을 정상적으로 사용할 수 있는 시간이 길다.
- S3는 연간 99.99%의 스토리지 가용성을 보장하도록 설계됨
- 1년 중 8.76 시간 동안만 스토리지를 이용하는 데 있어서 장애가 발생한다는 뜻
리전과 가용 영역을 적절히 활용하여, AWS S3는 높은 내구성과 가용성 보장 한다.
리전(Region)
- AWS에서 클라우드 서비스를 제공하기 위해서 운영하는 물리적인 서버의 위치
가용 영역(Availability Zone)
- 각 리전 안에 존재하는 데이터 센터(IDC)를 의미
- 가용 영역은 각각 개별적인 위치에 떨어져서 존재
- 서울의 경우 혹시 가용 영역 한곳에 재난이 발생해도 나머지 3곳의 가용 영역에 백업을 해놓은 데이터를 활용하여 문제 없이 서버가 가동됨
4. 다양한 스토리지 클래스 제공
- 저장소를 어떤 목적으로 활용할지에 따라 효율적으로 스토리지 클래스를 선택할 수 있다.
가장 많이 사용하는 스토리지 클래스 2가지
S3 Standard 클래스
- 가장 일반적으로 사용되는 스토리지 클래스
- 데이터에 자주 액세스해야할 경우 사용
- 데이터에 빠른 속도로 접근할 수 있고, 데이터 액세스 요청에 대한 처리 속도가 빨라 범용적인 목적으로 사용하기 좋음
- 보관 비용이 높게 발생하기 때문에 데이터를 오래 보관하는 목적으로는 비효율적이다.
S3 Glacier 클래스
- 장기적인 보관 목적으로 스토리지를 사용할 때 효율적
- 저장된 데이터에 액세스하는 속도는 느리지만, 데이터를 보관하는 비용이 매우 저렴하다.
- 이 외에도 Standard-IA, One Zone-IA, S3 Glacier Deep Archive 등등 여러 가지 스토리지 클래스가 존재하여 사용자의 이용 목적에 따라 다양한 스토리지 클래스를 사용할 수 있다.
5. 정적 웹 사이트 호스팅 가능
- S3에서는 버킷을 통해 정적 웹 사이트 호스팅이 가능하다.
정적 파일
동적 파일
- 클라이언트가 서버에 요청을 보내면, 서버가 요청에 맞춰 그 자리에서 생성하는 파일
웹 호스팅(Web Hosting)
- 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 만들어주는 서비스
버킷
- 파일을 담는 바구니(최상위 디렉토리)다.
- 무한히 많은 파일을 저장 가능
- 버킷의 이름은 각 리전에서 고유해야 한다.
- 버킷의 정책을 생성하여 엑세스 권한을 부여 가능
객체
- 버킷에 담기는 파일을 말하는 것이다.
- S3에서 저장소에 데이터를 저장할 때 키-값 페어 형식으로 데이터를 저장하기 때문에 객체라 부른다.
- 모든 객체는 고유한 URL 주소를 가진다.
- URL 주소는
http://[버킷의 이름].S3.amazonaws.com/[객체의 키]
의 형태를 띠고, URL 주소를 통해서도 원하는 데이터에 접근할 수 있다.
- S3에 저장되는 객체는 파일의 값, 키, 메타데이터로 구성된다.
- 파일의 값(Value) : 실제 데이터 (최대 5TB)
- 파일의 키 : 각각의 객체를 고유하게 만들어주는 식별자 역할, 원하는 객체를 검색하는데 사용 (문자열 형태로 구성)
- 메타데이터 : 객체의 생성일, 크기, 유형과 같은 객체에 대한 정보가 담긴 데이터
3 Tier-Architecture 배포
빌드
- 불필요한 데이터를 없애고, 여러 갈래로 퍼져있는 데이터들을
통합/압축하여 배포하기에 최적화된 상태를 만드는 것
- 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라진다.
- 일반적인 의미의 빌드는, 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미한다.
웹 앱의 경우는 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야 하기 때문에 빌드를 통해 정적 파일 형태의 결과물을 만들어 낸 후 배포한다.
1. Client 배포
2. Server Application 배포
- AWS EC2 서비스를 이용해 가상의 PC를 빌려 서버 코드 구동
3. Database 배포
- AWS에서는 제공하는 RDS(Database 특화 서비스)를 이용하여 데이터베이스를 사용
4. DNS
- AWS에서 제공하는 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있다.
- 도메인 연결 안하면 복잡한(IP)주소 형태임.