Team
[CS 스터디] 클라우드와 분산환경
seungh2
2023. 7. 19. 17:37
클라우드가 등장하기 전
- 컴퓨터 자원을 사용하려면, 컴퓨터의 하드웨어, 소프트웨어, 데이터와 저장소 모두 직접 구매하고 관리해야 했다.
- IT 서비스를 하려면 서버, 데이터베이스, 저장소 등을 직접 구매하고 관리해야 했다.
→ 항상 서버가 꺼지지 않게 관리해야 하고, 환경에 맞는 운영체제와 프로그램도 설치해줘야 한다.
클라우드가 등장한 후
- 컴퓨터 자원, 인프라와 서버를 다른 곳(보이지 않는 구름)에서 가져와 사용할 수 있게 되었다.
→ 시스템의 내부적인 구조를 몰라도, 물리적인 컴퓨터를 보지 못해도 클라우드 서비스에서 제공하는 다양한 컴퓨팅 환경을 이용할 수 있다.
→ 필요한 서버, 데이터베이스, 저장소 등의 구입 비용과 관리를 더 이상 신경쓰지 않아도 된다.
(물론 어딘가에 실제로 존재하는 컴퓨터를 빌려서 사용하는 것)
💙클라우드 컴퓨팅
컴퓨팅 리소스를 인터넷을 통해 서비스로 사용할 수 있는 주문형 서비스
기업에서 직접 리소스를 조달하거나 구성, 관리할 필요가 없으며 사용한 만큼만 비용을 지불하면 된다.
🤍일반 사용자 관점
- 데이터를 컴퓨터나 전자기기 자체에 가지고 있는 것이 아니라, 네트워크 서버를 통해 먼 곳에 있는 컴퓨터에 저장하여 사용할 수 있게 하는 환경
- ex) 아이클라우드.
🖤개발자 관점
- 가상의 서버에 접근해 필요한 만큼만 자원을 사용하여 간단하고 빠르게 프로그램 환경을 구축할 수 있는 기술
- 컴퓨터의 자원을 유틸리티화(공공자원 화)
- 언제 어디서나 물리적인 제약을 받지 않고 서버에 접속해 서비스 환경을 구축할 수 있다.
- 다른 사람과 협업하기 편리하며, 서버를 유지하고 관리에 드는 비용도 절감할 수 있다.
- 서비스가 커져서 환경을 더 크게 만들어야 할 경우에, 언제든지 서버 증설이나 업그레이드가 가능하다.
🤍클라우드 서비스 종류
서비스 제공자 혹은 개인이 직접 관리해야 하는 영역을 기준으로 아래와 같이 나눌 수 있다.
IaaS (Infrastructure as a Service)
- 서비스를 개발하기 위해 물리적으로 구성되는 요소 인프라만 제공하는 서비스
- 서비스를 할 애플리케이션, 서비스의 데이터, 서비스의 운영체제 등 서비스를 만들 때 필요한 것들을 개발자가 직접 관리해야 한다.
- 개발자가 직접 바꿀 수 있는 영역이 많기 때문에 자유도가 높다.
- ex) AWS의 EC2 등
PaaS (Platform as a Service)
- 보통 개발자들이 많이 사용하는 형태의 서비스
- 운영체제, 서버, 하드웨어 등을 고려할 필요 없이 애플리케이션 개발 자체에만 집중할 수 있다.
- 코드만 개발해서 바로 서비스에 올릴 수 있도록 리소스까지 포함되어 있는 플랫폼 형태로 클라우드가 제공된다.
- ex) Heroku, Google App Engine 등
SaaS(Software as a Service)
- 서비스까지 모든 것을 다 제공하는 형태의 클라우드
- 필요한 특정 기능의 소프트웨어를 통째로 빌려서 사용하는 것
- 설치할 필요 없고, 클라우드를 통해 소프트웨어를 제공한다.
- 3가지 중 가장 사용자 친화적인 서비스
- 사용자는 웹에서 접속해 서비스를 사용하면 되고, 소프트웨어의 유지보수는 클라우드 제공자가 모두 처리하는 것
- ex) MS office 365, naver MYBOX, Google Drive
🖤클라우드 컴퓨팅의 단점
보안
- 클라우드 서버가 해킹되면, 그 안에 저장된 개인 정보와 데이터가 한꺼번에 유출되는 대형 보안사고로 이어질 수 있다.
- 하지만 자체적인 기업 보안 유지보다 아마존, 구글과 같은 대규모 글로벌 기업에서 전문적인 인력을 통한 보안이 더 강력할 수 있다.
초과 비용
- 상대적으로 저렴하지만, 이용한 만큼 비용을 지불하기 때문에 사용량을 잘 조절해서 서버를 운용해야 한다.
- 그렇지 않으면 직접 서버를 운용하는 것보다 더 많은 비용을 지불해야 할 수도 잇다.
서버의 안정성
- 우리가 개발한 서비스의 문제가 아니라, 클라우드를 제공하는 기업 자체에서 장애가 발생할 경우 큰 타격을 받을 수 있다.
- 큰 기업들은 이 문제에 대응하기 위해
- 자체 솔루션이나 API를 개발해, 클라우드에 독립적인 API를 거치도록 만들고 한 클라우드 서비스에서 장애가 발생하면 다른 클라우드 서비스로 전환한다.
서버의 일관성
- 어떤 문제가 발생했을 때, 많은 클라우드 서비스를 사용하고 있을 경우 문제의 원인을 추적하기가 어렵다.
- 이 문제를 해결하기 위해
- GitOps와 같은 플랫폼을 이용해 누가 서버 환경에 보안을 비활성화했는지 등을 추적할 수 있다.
AWS
- 2023년 1분기 클라우드 시장 점유율 32%로 1위
- 모든 종류의 서비스가 있지만 각 서비스의 결합이 약하다.
- 가상 컴퓨터를 제공하고 컨테이너 기반의 EC2, EKS, 서버리스 컴퓨팅 람다 등 다양한 컴퓨터 서비스를 제공한다.
- 데이터 분석, 기계학습, 데이터베이스, 스토리지, 네트워킹, 블록체인, 양자 컴퓨팅까지 다양한 분야의 서비스까지 제공한다.
대표적인 서비스
EC2
- AWS를 대표하는 컴퓨팅 서비스
- 컴퓨터 한 대를 임대한다고 생각하면 된다.
- 리눅스, 윈도우즈 운영체제 환경의 컴퓨터 자원을 가상 서버로 제공하는 서비스
- 컴퓨팅 환경을 빌려서 필요한 것을 설치해 사용하는 것이 가능하다.
- 주로 웹 또는 애플리케이션의 서버로 많이 사용한다.
RDS
- AWS의 데이터베이스 서비스
- 데이터베이스를 클라우드 형태로 제공하며, MySQL, SQL Server, 오라클 등 관계형 데이터베이스를 이용할 수 있다.
- 데이터베이스의 백업, 애플리케이션 등의 관리를 AWS가 자동으로 제공하기 때문에 데이터베이스를 쉽게 운영할 수 있다.
S3
- AWS의 스토리지 서비스 중 하나
- 여러가지 용도로 사용 가능한 범용적인 스토리지 서비스
- 여러 데이터를 보관할 수 있고 정적 웹사이트 호스팅 및 다양한 형태의 클라우드 서비스로 활용 가능한 마능 스토리지 서비스
키네시스
- AWS의 데이터 분석 플랫폼 서비스 중 하나
- 실시간 스트리밍하는 대량의 데이터를 저장하고 분류해 분석해주는 플랫폼 서비스
- 비디오, 오디오, 로그, 웹 사이트 클릭 스트림 등에서 발생하는 실시간 데이터를 수집해 분석할 수 있다.
람다
- 서버 자체를 구성할 필요 없이, 필요한 코드만 실행할 수 있게 해주는 AWS 서비스
- 코드를 업로드 하면 람다에서 코드를 실행, 확장하는 데 필요한 부분을 처리해준다.
💜분산 컴퓨팅
- 인터넷에 연결된 여러 컴퓨터의 처리 능력을 이용해 큰 문제를 해결하는 것.
- 인터넷 사용자들의 트래픽이 많아지면서 서버가 트래픽을 감당하기 위해 이용하게 되었다.
- 많은 양의 데이터를 처리하기 위해 고속 CPU, 대용량 메모리가 탑재된 컴퓨터를 사용하지 않고 데이터를 여러 서버에 나누어 병렬로 처리하게 되었다.
🖤분산 컴퓨팅이 필요한 이유
High-Performance
- 한 대의 컴퓨터가 처리하기 어려운 많은 양의 연산을 여러 대의 컴퓨터 자원으로 병렬처리하면 성능이 향상된다.
Fault Tolerance
- 한 대의 컴퓨터가 실패했을 경우, 다른 한 대가 수행이 가능하기 때문에 서비스에 일부 결함 또는 고장이 나더라도 정상적으로 기능을 수행할 수 있다.
Physical Reason
- 글로벌 서비스의 경우, 여러 나라에 서버를 배치함으로써 병목현상을 막을 수 있다.
- 병목현상 bottleneck
- 처리할 수 있는 데이터 양에 비해 많은 양의 데이터가 들어옴으로써 성능이 제한되는 것
Security
- 보안 상에 문제가 발생할 때, 서로 다른 권한, 프로토콜에 따라 다르게 배치할 수 있다.
🤍분산 컴퓨팅을 사용하지 않는 이유
- 대규모 서비스가 아니라면 구성하지 않는 것이 좋다.
- 분산 컴퓨팅은 컴퓨터 간에 복잡하게 연결된 부분이 있기 때문에 프로그램을 만들 때, 훨씬 더 복잡하고 시간이 많이 든다.
- 순서대로 진행해야 하는 작업의 경우, 코어가 아무리 많아도 다른 코어가 끝날 때까지 기다려야 한다.
- 자원을 공유하는 경우에도 Race Condition 문제가 생긴다.
- 여러 작업을 수행하는 동안 중간 중간 delay가 생겨 싱글 컴퓨터를 사용할 때보다 속도가 느려질 수 있다.
728x90