코드스테이츠/코드스테이츠 @ 개발 일지

[코드 스테이츠] 103일차, "AWS 서비스"

Je-chan 2021. 10. 29. 19:52

  아침에 고열이 났다... 백신 맞고 새벽 중간 중간에 깨고 깰 때마다 백신 맞은 팔 통증과 어지러움증을 느꼈다. 원래 9시부터 토이 문제를 풀었어야 하는데, 오전에는 더이상 진행할 수 없을 것 같아 일어났다가 부루펜 하나 먹고 다시 누워버렸다. 또 11시쯤에 어찌저찌 일어나서 공부하려고 하는데, 의자에 앉자마자 어지러움증이 강렬해서 그냥 다시 침대로 직행해야 했다. 백신 1차 때도 밤에 열만 살짝 날 뿐이라서 2차도 그렇게 큰 걱정은 하지 않았는데 생각보다 심각하게 백신의 영향을 받고 있다. 아프면 아플수록 면역력이 좋다고 하는 건데 이게 좋은 건지, 나쁜 건지 잘 모르겠다... 다음주가 당장에 시험인데. 최대한 안정을 취하고 오늘은 간단하게만 개념을 공부하는 정도로 마무리 하려고 한다. 스프린트 리뷰 과제는 나중에 따로 제출해야할 것 같다. 


[ 오늘의 TODO ]

  1. 코드 스테이츠) AWS 서비스 개념
  2. 팀 프로젝트) 워크 플로우 작성하기
    // 아직 시작하진 않았는데.. 나 참여 제대로 할 수 있을지 걱정이다
  3. 생활) 물 1L 이상 마시기
    // 물 마실 기력이 없다...
  4. 생활) 1시간 이상 걷기 
    // 지금 집에서도 걷지 못하고 있음..

[ 오늘의 개념]

1. 배포란?

  우리가 만든 웹 서비스는 배포가 돼야 비로소 의미를 지닌다. 그렇기에 웹 개발자라고 함은 배포에 대한 지식을 기본적으로 탑재해야 하고 AWS(Amazon Web Service) 는 그 배포를 도와주는 클라우드 서비스다. 

 

1-1) 클라우드 컴퓨팅

  이전에 배포를 위해서는 컴퓨터 여러 대를 배치하고 인터넷에 연결해 서비스를 제공했다.(온프레미스 방식) 그러나 이런 방식은 물리적인 컴퓨터에 대한 주기적인 관리가 필요하고 컴퓨터를 놓을 물리적 공간은 한정되어 있기 때문에 여러 문제점이 존재했다. 

 

  그러나 최근에는 가상화 기술을 도입한 클라우드 서비스가 등장했다. 서버 자원, 공간, 네트워크 환경을 제공하여 필요할 때마다 컴퓨팅 능력을 유연하게 조절할 수 있게 됐다. 고정적인 비용이 들어가는 온프레미스와 달리 가상화 서비스는 사용한 만큼의 요금만을 지불하면 된다. 또, 컴퓨터의 스냅샷(이미지)를 이용해서 다른 컴퓨터로 즉시 이주가 가능하다.

 

  물론, 단점도 존재한다. 클라우드 서비스에 종속되기에 만약, AWS 에서 에러가 생기면 그와 관련된 서비스들이 아무리 코드가 잘 짜여 있다 한들 에러를 당하게 돼 있다. 그렇기에 클라우드 사업자가 제공하는 기술을 익히는 것만큼 인프라 자체에 대한 이해도를 높여서 매 상황마다 유연하게 대처할 수 있어야 한다. 

 

1-2) 배포의 단계

  배포를 하는데 일반적으로 4단계를 거친다.  

 

  1. Development
    Local 환경에서 개발과 테스트를 해본다. 더미데이터를 이용하여 시험해본다.

  2. Integration 
    각자의 Local 환경에 있던 코드를 합치는 과정이다. 내가 작성한 코드가 다른 사람의 코드에 오류를 일으키진 않는지, 코드 conflict 가 일어나지 않는지 확인하는 작업이다.

  3. Staging
    실제 출시 단계인 Production 과 유사한 환경에서 테스트를 진행한다. 모든 관계자가 이 시점에서 검증을 한다. 

  4. Production
    개발된 서비스를 출시하는 단계다. 실제 데이터로 서비스가 운영이 되고 문제가 생기면 안되는 단계다.

  Development 환경과 Production 환경은 서로 다를 수 있다. 여러 명이 작업하는 프로젝트의 경우, node 버전이나 인증 정보, 데이터 베이스 등에 접근하기 위해 사용하는 포인트는 제각각이다. 그렇기에 배포에서는 환경의 차이를 인지하고 환경 설정을 코드와 분리하는 것이 가장 중요하다. 작성한 코드가 다른 환경에서 정상작동할 수 있게 하려면 먼저 절대 경로 대신 상대 경로를 이용할 것, 환경에 따랖 ㅗ트를 분기할 수 있도록 환경 변수를 설정해줄 것, Docker 와 같은 개발 환경 자체를 통일시키는 솔루션을 사용할 것 등이 있다. 

 

 

2. AWS 서비스 

1) EC2 (Elastic Compute Cloud)

  EC2 는 AWS 에서 제공하는 클라우드 컴퓨팅 서비스다. AWS 에서 원격으로 제어할 수 있는 가상의 컴퓨터를 하나 빌리는 것으로 이해하면 쉽다. Elastic 이라는 단어는 유연한 이라는 의미를 지닌다. EC2 는 위에서 언급했듯 사용한 만큼 비용을 지불하기 때문에 붙여졌다. 또, 비용뿐만 아니라 성능, 용량도 자유롭게 조절할 수 있다. 

 

  EC2 의 장점은 첫 번째로 구성하는데 필요한 시간이 짧다는 것이다. 클릭 몇 번이면 PC 를 구성할 수 있다. 두 번째는, AMI 를 통해 필요한 용도에 따라 다양한 운영체제, CPU, RAM 까지 선택하고 구성할 수 있다는 점이다. AMI(Amazon Machine Image) 는 소프트웨어 구성이 기재된 템플릿이다. 이미지 종류는 단순히 운영체제만 깔린 템플릿을 선택할 수도 있고 특정 런타임이 설치된 템플릿이 제공된 경우가 있다. PC 사용 용도에 맞게 여러 Setting 을 조절할 수 있다.이렇게 빌린 컴퓨터를 Instance 라 부른다. Instance 는 컴퓨터 한 대 빌리는 거라 컴퓨터로 할 수 있는 일은 모두 할 수 있다. 클라우드 컴퓨팅이기 때문에 컴퓨터를 조작하려면 네트워크를 통해 제어해야 한다는 점만 차이가 있을 뿐이다. EC2 에서 할 수 있는 가장 기본적인 일은 웹 서버를 설치하고 사용자가 웹 브라우저를 통해 요청하는 서비스를 제공하는 것이다. 

 

  즉 요약하면 EC2 는 Instance를 생성하고 빌릴 수 있는 서비스며, AMI 를 토대로 Instance 세팅(운영체제, CPU, RAM 등)을 할 수 잇다. 

 

 

2) RDS (Relational Database Service) 

  AWS 에서 제공하는 관계형 데이터베이스 서비스다. 그런데 굳이 RDS 로 관계형 데이터 베이스를 생성해야할 필요가 있을까? EC2 인스턴스에 관계형 데이터베이스 엔진을 설치해 데이터 관리할 때와 RDS 로 데이터 베이스를 관리할 때의 가장 큰 차이점은 사용자가 일일이 관리를 하느냐 아니냐다. EC2 인스턴스에 데이터베이스 설치하면 데이터베이스 엔진의 설치, 버전 관리, 데이터 백업 등을 직접 해야 한다. 거기에 가용성, 나구성이 확보되지 않아 저장된 데이터가 유실되거나 정상적으로 사용하지 못할 가능성이 크고 규모 확장이 어렵다. 

 

  그러나 RDS를 사용하게 되면 그런 따로 직접 관리해줘야 하는 것들(규모 확장, 가용성과 내구성 확보, 데이터 백업 등)을 신경쓰지 않아도 RDS 측에서 자동관리 해준다. 사용자가 할 일은 초기 설정과 저장된 데이터리를 관리하는 일밖에 없어서 굉장한 편의를 누릴 수 있다.  

   

 

3) S3 (Simple Storage Service)

  S3 를 이해하기 전에 클라우드 스토리지에 대한 개념을 알아야 한다. 클라우드 스토리지란 데이터를 저장하는 장소로 그 유명한 구글 드라이브, 네이버 mybox 등이 그 예다. S3 는 AWS 에서 제공하는 클라우드 스토리지 서비스다. S3 의 장점으로는 먼저 데이터를 무제한으로 저장 가능하기에 확장성이 높다는 점이다. 사용한 만큼 비용을 지불하면 되기에 비용적인 측면에서도 매우 효율적이다. 두 번째 장점으로는 내구성이 매우 높다는 점이다. 저장된 파일이 유실될 가능성은 매우 적다. 세 번째로는 가용성이 높다는 점이다. 가용성이 높으면 스토리지에 저장된 파일을 정상적으로 사용할 시간이 길어짐을 의미한다. 

 

  S3 는 다양한 스토리지 클래스를 제공한다. 사용자들이 가장 많이 선택하는 스토리지로 Standard 클래스와 Glacier 클래스가 존재한다. Standard 는 범용적인 목적으로 사용하기 좋다. 데이터에 빠르게 접근할 수 있고 데이터 액세스 요청에 대한 처리 속도가 매우 빠르다. 대신에 데이터를 오래 보관하기 위한 목적으로는 적합하지 못하는데 보관 비용이 매우 높기 때문이다. Glacier 클래스는 장기적 보관을 목적으로 할 때 효율적이다. 비록 저장된 데이터에 액세스하는 속도는 느리지만, 데이터를 보관하는 비용이 매우 저렴하다. 

 

  S3 의 또 다른 장점으로 버킷을 이용해 정적 웹 사이트 호스팅이 가능하다는 점이다. 먼저, 정적 파일이란 서버 개입 없이 생성된 파일을 의미하고 반대로 서버가 클라이언트 요청에 맞추어 생성한 파일은 동적 파일이라 부른다. 웹 호스팅이란 서버 한 공간을 빌려주어 운영이 가능하도록 해주는 서비스를 의미한다. 버킷이란 S3 에 저장되는 파일이 담기는 바구니를 의미한다. 파일을 저장하는 최상위 디렉토리 라고 ㅅ이해하면 된다. 무한히 많은 파일을 저장할 수 있고, 각각의 버킷은 이름이 있는데 그 이름은 버킷이 속해있는 Region 에 유일해야 한다. 버킷 정책을 생성해 액세스 권한을 부여할 수 있다. 버킷(Bucket) 은 말 그대로 무언가를 담을 수 있는데 그 담기는 파일을 객체라고 부른다. 객체라고 불리는 이유는 Key-value 의 형태로 저장되기 때문이다. 갹체는 다시 파일과 메타 데이터로 나뉜다. 파일은 Key-value 로 저장되는 것을 의미하며 value 에는 실제 값이 담긴다. 모든 객체는 고유한 URL 을 갖고 있고, URL 주소는 http://[버킷_이름].S3.amazonaws.com/[객체_키] 형태를 띈다.