CloudService & AWS

이유준·2024년 6월 5일

Backend_School

목록 보기
5/6

1. 클라우드 컴퓨팅(Cloud Computing)

1.1 클라우드와 아마존 웹 서비스

클라우드 컴퓨팅은 컴퓨팅 리소스를 인터넷을 통해 서비스로 사용할 수 있는 주문형 서비스.

  • 기업에서 직접 리소스를 조달하거나 구성, 관리할 필요가 없으며, 사용한 만큼만 비용을 지불하면 된다.
  • 인터넷을 통해 온디맨드로 컴퓨터 시스템 자원, 특히 데이터 스토리지와 컴퓨팅 파워를 제공하는 기술과 서비스의 집합이다.

클라우드 컴퓨팅은 개인이나 기업이 자체적으로 대규모의 데이터 센터를 구축, 운영할 필요 없이 필요한 IT 자원을 유연하게 사용할 수 있게 해준다.

1.2 개념

클라우드 컴퓨팅은 '클라우드'라는 메타포를 사용해 인터넷을 상징한다. 이는 컴퓨터 네트워크, 특히 인터넷을 통해 정보와 애플리케이션을 원격으로 액세스 할 수 있는 모델을 의미한다.

클라우드 컴퓨팅을 통해 언제 어디서나 접근하고, 소프트웨어를 사용하며, 컴퓨팅 작업을 실행할 수 있다.

1.3 주요 특징

  • 온디매드 자가 서비스 :
    사용자는 네트워크를 통해 필요한 컴퓨팅 자원을 자동으로 할당받을 수 있다.

  • 광범위한 네트워크 접근 :
    다양한 플랫폼(ex. 모바일, 랩톱 등)을 통해 서비스에 접근할 수 있다.

  • 리소스 풀링 :
    클라우드 제공 업체는 다수의 고객에게 서비스를 제공하기 위해 컴퓨팅 자원(ex. 저장 공간, 메모리, 프로세싱 파워)을 풀로 관리한다.

  • 신속한 탄력성 :
    필요에 따라 자원을 빠르게 할당하거나 회수할 수 있어, 수요의 변동에 유연하게 대응할 수 있다.

  • 측정 가능한 서비스 :
    사용한 컴퓨팅 자원의 양은 측정 가능하며, 이를 기반으로 비용이 청구된다.

1.4 클라우드 컴퓨팅의 유형

  1. 인프라로서의 서비스(IaaS) : 가상화된 컴퓨팅 리소스를 인터넷을 통해 제공한다.

  2. 플랫폼으로서의 서비스 (Paas) : 개발자가 애플리케이션을 생성, 테스트, 배포, 관리할 수 있는 플랫폼과 환경을 제공한다.

  3. 소프트웨어로서의 서비스(SaaS) : 인터넷을 통해 애플리케이션을 제공하며, 사용자는 브라우저를 통해 애플리케이션에 접근할 수 있다.

각각의 서비스 모델은 클라우드 컴퓨팅의 유연성과 접근성을 기반으로 하면서도, 제공하는 서비스의 범위와 사용자가 관리해야 하는 IT 리소스의 수준에 있어서 차이를 보인다.

1.4.1 인프라로의 서비스(Iaas)

IasS(Infrastructure as a Service)는 가장 기본적인 클라우드 서비스 모델로, 가상화된 컴퓨팅 리소스를 인터넷을 통해 제공한다.

이는 가상 서버, 스토리지, 네트워크 등의 기본적인 컴퓨팅 인프라를 포함한다.

사용자는 제공된 인프라 위에서 운영 체제를 비롯한 어떤 소프트웨어도 자유롭게 설치하고 구성할 수 있다.

AWS의 EC2(Elastic Compute Cloud)나 S3(Simple Storage Service)가 이에 해당한다.

1.4.2 플랫폼으롯의 서비스(PaaS)

PaaS(Platform as a Service)는 클라우드 환경에서 애플리케이션을 개발, 테스트, 배포, 관리 및 운영할 수 있는 플랫폼과 환경을 제공한다.

이는 개발자가 인프라 관리에 신경쓰지 않고, 애플리케이션 개발에 더 집중할 수 있게 해준다.

데이터베이스 관리, 개발툴, 운영 체제, 서버 소프트웨어 등이 포함될 수 있다.

AWS의 Elastic Beanstalk이 PaaS의 예로 들 수 있다.

1.4.3 소프트웨어로서의 서비스(SaaS)

SaaS(Software as a Service)는 인터넷을 통해 애플리케이션을 사용자에게 직접 제공하는 서비스 모델이다.

사용자는 복잡한 소프트웨어 설치 및 운영 없이, 웹 브라우저를 통해 애플리케이션에 접근하고 사용할 수 있다.

1.4.4 서비스 선택의 기준

이용 방식을 선택할 때는 필요한 기술 스택, 관리 수준, 비용, 보안 요구 사항 등 여러 요소를 고려해야 한다.

Ex.

  • IaaS : 기업이 자체 IT을 보유하고 있고, 인프라에 대한 완전한 제어를 원할 때.
  • PaaS : 개발에 집중하고 싶은 스타트업이나 개발자.
  • SaaS : 복잡한 소프트웨어 설치 및 관리 없이 서비스를 이용하고 싶은 사용자.

1.4.5 결론

클라우드 컴퓨팅은 현대 IT 환경의 핵심 요소로 자리 잡았다.

비용 효율성, 유연성, 접근성, 확장성 등의 장점을 제공함으로써, 개인 사용자부터 대기업에 이르기까지 다양한 규모의 조직이 이 기술을 채택하고 있다.

클라우드 컴퓨팅은 디지털 변환은 가속화하고, 혁신을 촉진하며, 경쟁 우위를 확보하는 데 필수적인 역할을 한다.

1.5 아마존 웹 서비스 (Amazon Web Services)

AWS는 전 세계적으로 가장 광범위하게 사용되는 클라우드 컴퓨팅 플랫폼 중 하나이다.

1.5.1 AWS의 핵심 구성 요소

AWS는 다음과 같은 구성 요소로 이루어져 있다.

  • 컴퓨팅
  • 스토리지
  • 데이터베이스 관리
  • 네트워킹
  • 인공지능(AI)
  • 머신러닝(ML)
  • 보안
  • 애플리케이션 개발
  • 등등

AWS는 뛰어난 확장성과 유연성을 제공하여, 사용자가 소규모 웹 애플리케이션부터 대규모 엔터프라이즈 시스템까지 다양한 IT 요구 사항을 충족할 수 있게 해준다.

1.5.2 AWS 서비스의 예

  • Amazon EC2 (Elastic Compute Cloud) :

    • 가상 서버 인스턴스를 제공한다.
    • 사용자가 컴퓨팅 용량을 쉽게 확장하거나 축소할 수 있다.
  • Amazon S3(Simple Storage Service) :

    • 스케일 아웃이 가능한 객체 스토리지 서비스이다.
    • 데이터 백업, 아카이브, 웹 사이트 콘텐츠 등의 저장에 사용된다.
  • Amazon RDS(Relational Database Service) :

    • 관리형 관계형 데이터베이스 서비스이다.
    • MySQL, PostgreSQL, Oracle, SQL Servce 및 Amazon Aurora와 같은 여러 데이터베이스 엔진을 제공한다.
  • AWS Lambda :

    • 서버리스 컴퓨팅 서비스로, 코드를 서버 관리 없이 실행할 수 있게 해준다.
    • 이는 애플리케이션 개발의 복잡성을 줄이고 비용을 절감하는 데 도움이 된다.

Amazon S3에서 스케일 아웃이 뭘까?

스케일 아웃이란, 저장소 용량이나 성능을 향상시키기 위해 S3 버킷의 리소스를 수평적으로 확장하는 것을 말한다.

1.5.2 결론

AWS는 클라우드 컴퓨팅 분야에서 선도적인 위치를 차지하고 있다.

지속적인 혁신과 서비스 확장을 통해 기업과 개발자가 디지털 세계에서 성공적으로 경쟁할 수 있는 강력한 플랫폼을 제공한다.

AWS를 통해 사용자는 보다 빠르게 혁신하고, 비용을 절감하며, 보안을 강화할 수 있다.

1.6 AWS 주요 서비스

AWS는 광범위한 클라우드 서비스를 제공하여 컴퓨팅, 스토리지, 네트워킹, 데이터베이스, 분석, 애플리케이션 서비스 등 다양한 요구 사항을 충족한다.

AWS 주요 서비스를 카테고리별로 나누어서 설명을 따로 하는 것보다, 이미 정리되어 있는 좋은 글들이 많아서 그중 하나를 첨부한다.

AWS 주요 서비스 정리


2. 확장성과 안정성 높은 서버 만들기

2.1 서버와 스토리지

2.1.1 서버의 개념

  • 네트워크 상에서 클라이언트의 요청을 받아 처리하고, 결과를 제공하는 컴퓨터 시스템 또는 소프트웨어를 말한다.
  • 일반적으로 데이터 처리, 저장, 전송 및 관리와 같은 서비스를 제공하기 위해 최적화된 하드웨어와 소프트웨어로 구성된다.
  • 서버는 웹 서버, 메일 서버, 파일 서버 등 다양한 유형이 있으며, 각각의 서버는 특정 작업을 수행하도록 설계되었다.

2.1.2 스토리지의 개념

  • 디지털 데이터를 저장하는 데 사용되는 기기 또는 미디어를 의미한다.
  • 데이터 스토리지는 일반적으로 다음과 같이 다양한 형태로 존재한다.
    • 하드 디스크 드라이브(HDD)
    • 솔리드 스테이트 드라이브(SSD)
    • 네트워크 연결 스토리지(NAS)
    • 스토리지 영역 네트워크(SAN)
  • 스토리지 시스템은 데이터의 안정적인 저장, 빠른 접근 및 효율적인 관리를 위해 설계되었다.

2.1.3 클라우드 컴퓨팅에서의 서버와 스토리지

클라우드 컴퓨팅 환경에서 서버와 스토리지는 당연하게도 물리적인 형태로 사용자에게 제공되지 않는다. 그렇다면 어떻게 사용자에게 서버와 스토리지가 제공되는 것일까?

물리적인 형태 대신, 클라우드 서비스 제공업체가 관리하는 데이터 센터 내에 위치한 리소스를 인터넷을 통해 접근하여 사용한다. 이러한 접근 방식은 기존의 온프레미스 인프라 대비 많은 장점을 제공한다.

온프레미스 인프라??

온프레미스 인프라스트럭처는 기업이나 조직이 자신의 데이터 센터 내에 직접 설치하고 관리하는 IT 인프라를 의미한다. 이는 서버, 스토리지, 네트워크 장비, 소프트웨어 등 모든 컴퓨팅 리소스를 포함한다.

2.1.4 클라우드 서버의 장점

  • 유연성과 확장성 :
    • 클라우드 서버는 필요에 따라 리소스를 확장하거나 축소할 수 있어, 변동하는 워크로드에 효과적으로 대응할 수 있다.
  • 비용 효율성 :
    • 사용자는 사용한 만큼의 비용만 지불하므로, 불필요한 리소스에 대한 비용을 절감할 수 있다.
  • 높은 가용성 :
    • 클라우드 서비스 제공업체는 고가용성을 보장하며, 장애 발생 시 자동으로 리소스를 복구한다.

2.1.5 클라우드 스토리지의 장점

  • 접근성과 협업 :
    • 어디서나 인터넷을 통해 데이터에 접근할 수 있으며, 여러 사용자가 동시에 데이터를 공유하고 협업할 수 있다.
  • 보안 :
    • 데이터는 암호화되어 저장되며, 클라우드 제공업체는 데이터 보호를 위한 강력한 보안 조치를 적용한다.
  • 데이터 백업 및 복구 :
    • 클라우드 스토리지는 데이터의 자동 백업 및 쉬운 복구 기능을 제공하여, 데이터 손실 위험을 줄인다.

클라우드 컴퓨팅 환경에서 서버와 스토리지는 더 이상 기업이나 개인이 직접 관리할 필요가 없는 리소스로 변모하였다. 이는 IT 인프라의 유지보수 비용을 절감하고, IT 리소스의 관리를 단순화하며, 비즈니스의 민첩성을 향상시키는 데 기여한다.

2.2 보안과 방화벽

2.2.1 보안의 중요성

보안은 클라우드 컴퓨팅 환경에서 중요한 역할을 한다. 데이터 유출, 무단 접근, 서비스 거부 공격(DDoS) 등 다양한 위협으로부터 시스템과 데이터를 보호하기 위해 필수적이다.

보안의 주요 목표는 기밀성, 무결성, 가용성을 유지하는 것이다.

이는 데이터가 오직 권한 있는 사용자에 의해서만 접근되고, 변경되지 않으며, 필요할 때 항상 사용할 수 있어야 함을 의미한다.

2.2.2 방화벽의 역할

컴퓨터를 다루다보면 반드시 한 번 쯤은 방화벽에 대해 들어봤으리라 생각한다. 나조차도 방화벽을 사용해보고, 대충은 어떤 역할을 하는지 알고는 있으나, 정확한 역할에 대해서는 생각해보지 않아왔다. 방화벽은 어떤 역할을 수행할까?

방화벽은 네트워크 보안의 첫 번째 방어선이다. 불법적인 접근을 차단하고, 내부 네트워크를 외부의 위협으로부터 보호한다. 들어오고 나가는 트래픽을 모니터링 하고, 사전에 정의된 보안 규칙에 따라 허용 또는 차단한다. 이는 물리적인 장비 형태로도, 소프트웨어 기반으로도 구현될 수 있다.

2.2.3 클라우드 컴퓨팅에서의 보안과 방화벽

그렇다면 클라우드 컴퓨팅에서의 보안과 방화벽은 무슨 역할을 할까?

  • 공유 책임 모델 :
    • 클라우드 서비스 제공업체와 사용자는 보안 책임을 공유한다.
    • 제공 업체는 인프라의 보안을 담당하고,
    • 사용자는 클라우드에서 운영하는 애플리케이션과 데이터의 보안을 관리해야 한다.
  • 가상 방화벽 :
    • 클라우드 환경에서는 가상 방화벽(Ex. AWS의 보안 그룹)을 사용하여 가상 서버(인스턴스)의 트래픽을 제어한다.
    • 이는 각 인스턴스에 대해 세밀한 액세스 제어를 가능하게 한다.
  • 암호화 :
    • 데이터는 전송 중(Ex. SSL/TLS)과 저장 시(EX. AES 암호화) 암호화 되어야 한다.
    • 이는 데이터의 기밀성과 무결성을 보장한다.
  • 관리형 보안 서비스 :
    • 많은 클라우드 제공 업체는 침입 탐지 및 방지 시스템(IDS/IPS), 데이터 유출 방지(DLP), 관리형 방화벽 서비스 등과 같은 관리형 보안 서비스를 제공한다.

클라우드 컴퓨팅에서의 보안과 방화벽 구현은 전통적인 온프레미스 환경과는 다른 접근 방식을 요구한다. 그러나 클라우드 서비스 제공업체가 제공하는 고급 보안 기능과 도구를 활용함으로써, 사용자는 자신의 애플리케이션과 데리터를 효과적으로 보호할 수 있다.


3. 클라우드 용어

3.1 리전 (Region)

리전은 클라우드 서비스가 물리적으로 위치한 지리적 위치를 의미한다.

대부분의 클라우드 서비스 제공업체는 전 세계적으로 분산된 여러 Region을 운영한다. 각 Region은 법적, 정책적, 기술적 요구 사항을 충족시키기 위해 독립적으로 운영되며, 사용자는 일반적으로 서비스의 지연 시간을 최소화하고 데이터 주권을 준수하기 위해 가장 가까운 Region을 선택하여 서비스를 배포한다.

3.2 가용 영역 (Availablility Zone)

가용 영역(Availablility Zone)은 Region 내에 위치한 하나 이상의 데이터 센터 그룹이다.

각 가용 영역은 독립적인 전력, 냉각, 보안 시스템을 갖추고 있으며, 다른 가용 영역과는 고속의 네트워크로 이루어져 있다. 이러한 구조는 클라우드 서비스의 고가용성과 내결함성을 보장한다. 하나의 가용 영역에 장애가 발생하더라도, 다른 가용 영역에서 서비스를 계속해서 제공할 수 있다.

3.3 엣지 로케이션 (Edge Location)

엣지 오케이션은 사용자에게 콘텐츠를 더 빠르게 전달하기 위해 설계된 클라우드 서비스의 '네트워크 끝단'에 위치한 데이터 센터이다.

주로 콘텐츠 네트워크(CDN) 서비스에 사용되며, 전 세계적으로 분산되어 있다. 엣지 로케이션을 통해 사용자는 지연 시간을 크게 줄이고, 애플리케이션의 성능을 향상시킬 수 있다. 사용자에게 가장 가까운 곳에서 콘텐츠를 캐싱하고, 웹 사이트의 로딩 속도를 개선하며, 대규모 트래픽을 효율적으로 처리하는 데 도움을 준다.


4. Amazon EC2(Elastic Compute Cloud)

EC2는 가상 서버를 쉽게 배포하고 관리할 수 있는 기능을 제공하는 AWS의 중심적인 서비스다

이러한 기능은 사용자가 애플리케이션의 확장성, 성능, 보안을 최적화 할 수 있게 해준다.

4.1 EC2 Instance

  • 설명 :
    • EC2인스턴스는 AWS에서 제공하는 가상 서버이다.
    • 사용자는 원하는 인스턴스 유형과 AMI(Amazon Machine Image)를 선택하여 인스턴스를 시작할 수 있다.
    • 인스턴스는 다음과 같은 다양한 상태를 가질 수 있다.
      • 시작
      • 중지
      • 종료
  • 설정 위치 :
    • AWS Management Console의 EC2 대시보드에서 "Instances" 섹션

5. Amazon 보안 그룹(Security Group)

Amazon 보안 그룹은 AWS에서 제공하는 가상 방화벽 서비스이다.

Amazon EC2 인스턴스와 같은 AWS 리소스에 대한 인바운드(Inbound) 및 아웃바운드(Outbound) 트래픽을 제어하는 데 사용된다.

보안 그룹을 통해 사용자는 특정 IP 주소, 포트 번호 및 프로토콜에 대한 접근 규칙을 설정하여 리소스에 대한 액세스를 세밀하게 관리할 수 있다.

5.1 SecurityGroup

  • 설명 :
    • 보안 그룹은 인스턴스의 네트워크 트래픽을 제어하는 가상 방화벽이다.
    • 인바운드 및 아웃바운드 규칙을 정의하여 특정 포트와 프로토콜을 통해 트래픽을 허용하거나 차단할 수 있다.
  • 설정 위치 :
    • AWS Management Console의 EC2 대시보드에서 "Security Groups" 섹션.

6. 퍼미션 (Permissions)

퍼미션(Permissions)는 파일이나 디렉토리에 대한 접근 권한을 나타낸다

Unix 및 Linux 시스템에서는 주로 읽기(read), 쓰기(write), 실행(execute) 권한으로 나뉜다.

각 파일과 디렉토리는 소유자(owner), 그룹(group), 기타 사용자(others)에 대해 각각의 권한을 가진다.

6.1 퍼미션 형식

퍼미션은 보통 'ls -la' 명령어로 확인할 수 있으며, 출력 결과는 다음과 같다.

drwxr-xr-x. 5 ec2-user ec2-user 138 Jun 4 12:13 .
drwxr-xr-x. 3 ec2-user ec2-user 21 Jun 4 12:13 ..
drwxr-xr-x. 8 ec2-user ec2-user 163 Jun 4 12:13 .git
-rw-r--r--. 1 ec2-user ec2-user 444 Jun 4 12:13 .gitignore
-rw-r--r--. 1 ec2-user ec2-user 715 Jun 4 12:13 build.gradle
drwxr-xr-x. 3 ec2-user ec2-user 21 Jun 4 12:13 gradle
-rwxr-xr-x. 1 ec2-user ec2-user 8706 Jun 4 12:13 gradlew
-rw-r--r--. 1 ec2-user ec2-user 2826 Jun 4 12:13 gradlew.bat
-rw-r--r--. 1 ec2-user ec2-user 29 Jun 4 12:13 settings.gradle
drwxr-xr-x. 4 ec2-user ec2-user 30 Jun 4 12:13 src

6.2 퍼미션 설명

각 줄의 맨 앞에는 10개의 문자가 있다. 첫 번째 문자는 파일 타입을 나타내며, 나머지 9개 문자는 퍼미션을 나타낸다.

파일 타입

  • - : 일반 파일
  • d : 디렉토리
  • l : 심볼릭 링크
  • c : 문자 디바이스 파일
  • b : 블록 디바이스 파일

퍼미션

  • r : 읽기 권한
  • w : 쓰기 권한
  • x : 실행 권한
  • - : 권한 없음

퍼미션 그룹

퍼미션은 다음과 같이 세 그룹으로 나뉜다.
1. 소유자(owner) 권한
2. 그룹(group) 권한
3. 기타 사용자(others) 권한

예제 설명

'-rw-r--r--':

  • 파일 타입 : -
    • 일반 파일이다.
  • 소유자 : rw-
    • 읽기/쓰기 가능
  • 그룹 : r--
    • 읽기 가능
  • 기타 사용자 : r--
    • 읽기 가능

다음은 grdlew 파일의 퍼미션이다.

-rwxr-xr-x. 1 ec2-user ec2-user 8706 Jun 4 12:13 gradlew
  • -rwxr-xr-x :
    • - : 일반 파일
    • rwx : 소유자는 읽기, 쓰기, 실행 권한이 있음
    • r-x : 그룹은 읽기, 실행 권한이 있음
    • r-x : 기타 사용자는 읽기, 실행 권한이 있음

6.3 실행 권한 추가 방법

예제를 실습하면서 'chmod 400 filename'와 같은 방법으로 권한을 추가해준 적이 있다. 여기서 400은 무엇을 의미할까??

6.3.1 권한의 숫자 표기법

chmod 명령에서 사용하는 숫자 표기법은 각 권한 비트를 숫자로 나타낸다. 권한 비트는 세 자리 숫자로 구성되며, 각 자리 숫자는 0에서 7 사이의 값으로 설정된다.

  • r (read) : 4
  • w (write) : 2
  • x (execute) : 1

이 값들은 합산하여 각 사용자의 권한을 나타낸다.

퍼미션(숫자)퍼미션(문자)사용자 권한
7rwx읽기, 쓰기, 실행 권한 (4 + 2 + 1)
6rw-읽기, 쓰기 권한 (4 + 2)
5r-x읽기, 실행 권한 (4 + 1)
4r--읽기 권한 (4)
3wx-쓰기, 실행 권한 (2 + 1)
2w--쓰기 권한 (2)
1x--실행 권한 (1)
0---권한 없음 (0)

따라서 chmod 755는 다음과 같은 권한을 설정한다.

  • 7 (rwx) : owner에 대한 권한 (읽기, 쓰기, 실행)
  • 5 (r-x) : group에 대한 권한 (읽기, 실행)
  • 5 (r-x) : outhers에 대한 권한 (읽기, 실행)

📖오늘을 마치며


오늘 강의 시간에 Cloud와 AWS에 대해 배우고, 실습해보았다. 평소 관심있어 하고, 궁금했던 내용이었기에 설레는 마음으로 하루를 시작했지만, 익혀야 할 개념의 양이 생각보다 너무 많았다. 강사님은 슉슉 넘어가신 내용이 많았지만, 내가 놓치고 싶지 않아서 복습 시간을 많이 할애했다.

오늘 강의는 오전에는 이론, 오후에는 실습 위주로 진행했는데 처음 git을 다운받는 곳에서 에러가 발생해 멘토님이랑 둘이 해결하는 데 시간이 오래 걸려 수업을 놓친 부분이 많았다. 그래도...뭐 그나마 실습은 다른 팀원분들이 개인 회고 시간에 도와주셨고, 이론은 지금 정리하면서 강의 시간보다 더 꼼꼼히 들여다봤으니 괜찮을듯 싶다.

문제가 왜 발생했을까?

실습 초기에 'AWS 인터페이스 생성, Security Group 생성, keypair 생성, keypair.pem 파일 권한 부여' 까지는 성공했다. 문제가 발생한 부분은 아래의 명령을 실행했을 때, 설치가 되지 않고 무한 로딩에 빠져버린 것이다.

sudo yum install git

sudo로 yum을 사용하여 Git 패키지를 설치하려 하였는데, 설치가 되지 않고 무한 로딩에 빠졌다.

어떻게 해결했을까?

문제를 해결하기 위해 다양한 방법을 시도해보았다.

1. 다른 Shell에서 시도

git bash으로 시도한 것이 문제였나? 라는 생각이 들어 Windows PowerShell과 Ubuntu에서 시도해보았다. Windows PowerShell에서는 마찬가지로 무한 로딩이 발생하였고, Ubuntu는 디렉토리 문제로 실패하였다.

2. 인스턴스 중지 후 재실행

인스턴스 실행에 문제가 있나 싶어 인스턴스를 중지하고 재실행 해보았다.

마찬가지로 해결되지 않았다. 인스턴스 문제는 아니였는듯 싶다.

3. 램 증가

AWS 인스턴스의 스왑 공간을 설정하여 디스크를 사용해 RAM을 늘려보았다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo vi /etc/fstab
/swapfile swap swap defaults 0 0

마지막 명령어가 '/swapfile: Permission denied' 당해서 실패하였다.

4. yum 캐시 데이터 정리 & 생성

yum의 캐시 데이터를 정리&생성하기 위해 아래의 명령을 실행시켰다.

yum clean all
yum makecache

clean 까지는 실행되었는데 (0 files removed였지만..) makecache에서 install git과 마찬가지로 무한 로딩이 발생하였다.

5. 인스턴스 종료 & 생성

인스턴스, 혹은 keypair에 문제가 있나 싶어 인스턴스를 종료하고 다시 생성해주었다. 생성하는 과정에서 keypair도 새롭게 생성해주었다.

설정들을 맞게 한 것 같으나 마찬가지로 무한 로딩이 발생하였다...인스턴스 문제는 아닌듯 싶다.

해결 방법

1시간이 넘는 시간 동안 여러 방법을 시도해보았는데 모두 해결되지 않았다. 그럼 어떻게 해결했을까?

답은 Security Group 아웃바운드 설정을 바꿔주었다.

우리는 아웃바운드 설정을 따로 해주지 않았다. 그런데 이 아웃바운드의 유형을 '모든 TCP' 설정해줬더니 해결되었다..!

아마 TCP로 설정했을 때 해결된 원인은 아웃바운드 트래픽이 차단되어 있으면 다운로드가 불가능하여 무한 로딩 상태에 빠질 수 있는데, 모든 TCP 트래픽을 허용함으로써 인스턴스가 외부 인터넷에 접근할 수 있게 되었기 때문이다. 따라서 YUM 패키지 관리자가 필요한 패키지(Git)을 다운로드 할 수 있게 되었다.

왜 아웃바운드 트래픽이 차단되었을까?

실수로 아웃바운드 규칙을 삭제했었어서 다시 생성해주었는데, 이 과정에서 유형이 SSH로 설정된 것이 아닐까 싶다. 아웃바운드 유형이 SSH로 설정된 경우, YUM 패키지 관리자가 패키지를 다운로드하려고 할 때 필요한 HTTP/HTTPS 트래픽이 차단되어 다운로드가 불가능했던 것이다.

0개의 댓글