Cloud 운영환경 구성(Feat. AWS)

이상수·2022년 8월 6일
1
post-thumbnail



0. 시작하게 된 계기 및 다짐 😮

  • 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.

    • 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기
    • 주말에 다음주에 배울 내용들을 예습
    • 코딩 문제와 java코드들은 꾸준히 학습
    • 자료구조를 이용한 알고리즘 문제 해결 학습

1. 학습 목표 😮

목표결과
Cloud와 Deployment의 의미를 이해 및 배포 학습O
RDS/EC2/S3등의 서비스의 특징 이해 및 사용이유 학습O
Custom 도메인을 이용한 요청을 원하는 곳으로 라우팅X

2. 정리 😮




< Amazon Web Service >

1. Cloud Computing

1. Cloud Computing 이란

  1. 데이터 센터

    • 서버의 자원과 공간 및 네트워크 환경을 제공을 빌려 사용하는 기술
    • 온프레미스라고도 부른다
    • 물리적으로, 공간/서버실을 대여하는 방법
  2. 클라우드 컴퓨팅

    • 물리적인 컴퓨터가 아닌, 가상 컴퓨터를 대여
    • 가상화(Virtualization)기술로 부터 사용

    (1). 장점
    - 필요할 때마다, 컴퓨팅 능력을 유연하게 조절 가능
    - 고정적인 비용이 들어가는 온프레미스와 달리, 사용한 만큼의 요금만 지불
    - 컴퓨터의 스냅샷("이미지")를 이용해 다른 컴퓨터로 즉시 이주(migration)이 가능

    (2). 단점
    - 운영 환경이 클라우드 서비스 제공자에게 종속이 된다.
    - 해당 클라우스 서비스에서 문제가 생기면, 내가 배포하고 관리하는 환경에도 영향이 미침



2. Cloud Service 형태

  1. IaaS -> PaaS -> SaaS 순으로 서비스 제공하는 범위가 커짐

  2. IaaS(Infrastructure as a Service)

    • 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우
  3. PaaS(Platform as a Service)

    • 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우
  4. Saas(Software as a Service)

    • 클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우



2. Deploy

1. Deployment

  • 개발한 서비스를 사용자가 이용하게 만드는 과정
  • 환경의 차이를 이해하고, 환경 설정을 코드와 분리
  1. 환경에 따른 코드 작성

    • 각자 개발한 환경이 다르기 때문에, 작성한 코들르 다른 환경에서 정상 작동 시키기위함
    • 절대 경로대신, 상대 경로를 사용한다.('.properties, '.yml'등을 이용해 환경 변수 설정)
    • 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정
    • (Advance ) Docker와 같은 개발 환경 자체를 메타데이터로 삼아 개발환경을 통일시키는 솔루션을 사용
  2. Development

    • Local환경에서 개발 및 테스트
    • 샘플 데이터를 통해 테스트하며, 변경 사항이 있어도 문제없이 수정
    • 각 구성원이 각자의 환경에서 진행
  3. Intergration

    • 각자의 환경에서 개발된 부분을 취합
    • 코드간 Conflict가 없는지 확인하고, 작성한 코드가 다른 코드에 문제를 발생시키는지 확인
  4. Staging

    • Production단계와 가장 유사한 환경에서의 테스트
    • 복제된 실제 데이터를 이용해서 테스트하며, 이해 관계자들에게 검증하는 단계
  5. Production

    • 개발된 서비스를 출시하는 단계로, 실제 데이터를 이용해서 테스트하며
    • 실제로 서비스를 제공하는 단계



EC2

1. Amazon EC2(Elastic Compute Cloud)

  • Elastic(유연한), 성능/용량을 자유롭게 조절하며 사용한 만큼의 비용을 지불
  • 아마존 웹 서비스에서 제공하는 클라우드 컴퓨팅 서비스
  • AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
  • 구성하는데 짧은 시간이 필요하고, AMI를 통해 용도에 따라 다양한 운영체제 및 램/CPU/용량을 선택이 가능하다.
  • AMI : 소프트웨어 구성이 기재된 템플릿, 운영체제(윈도우, 우분투 등)만 깔려있는 템플릿이나, 아예 특정 런타임이 설치되어 있는 템플릿이 제공되는 경우도 있음(ex. 윈도우 + JVM)
    • 이 템플릿(이미지)를 기반으로 인스턴스 시작
  • Instacne : 1대의 빌린 컴퓨터이며, 이것을 인스턴스를 생성한다 라고함.



RDS

1. RDS

  • Relational Database Service
  • 관계형 데이터베이스 서비스로, AWS에서 제공하는 관계형 데이터베이스 서비스이다(Mysql 같은것)
  • Mysql과 같은 DB를 Instance에 따로 설치하지 않고 AWS 자체 DB를 사용하는 것
  • Mysql과 같은 DB를 따로 설치하면, 문제가 생길시 온전히 사용자가 처리를 해야하고, DB를 관련해서 관리를 해주는 부분이 매우 적기떄문에 사용자가 일일이 DB관리를 해줘야함
  • 하지만, 'RDS'를 사용시 DB의 관리부분을 RDS에서 전적으로 자동관리해주어 사용자는 초기 설정을 제외하고는 크게 신경쓸 일이 없어짐
  • 또한, 다양한 데이터베이스 엔진 선택지를 제공해줌(RDS내에서 사용할 DB 엔진을 선택)



IAM(Identity and Access Management)

  • AWS의 리소스에 대한 개별적으로 접근제어와 권한을 가지도록 계정 또는 그룹을 생성, 관리하는 서비스
  • AWS 리소스에 대한 엑세스를 안전하게 제어할 수 있는 웹 서비스
  • 해당 리소스에 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어한다.
  • AWS의 개체(서비스, 사용자 등)가 다른 서비스에 접근하게 할 수 있도록 해주는 방법입니다.
  • 신뢰 관계란, 특정 외부 사용자가 해당 역할을 수행할 수 있다고 AWS에 알리는 것입니다.
    • 즉, 해당 신뢰관계는 역할을 위임하도록 허용된 계정 멤버
    • codedelpoy 서비스에서 ec2접속가능?



S3

S3

  • 클라우드 스토리지 : 인터넷 공간에 데이터를 저장하는 저장소(Ex. Google Drive), "인터넷 하드디스크", 뛰어난 접근성(어느 컴퓨터에서든 접근가능)
  • Simple Storage Service란 AWS 에서 제공하는 클라우드 스토리지 서비스이다.
  • AWS는 여러 지역에 Resion(물리적 서버 위치)를 가지고있고 이 위치에 여러 '가용 영역'인 데이터센터(IDS)를 가지고있음
  • 이를 통해 한곳에서 문제가 발생해도, 다른 가용영역에 백업을 해놓은 DB를 활용하여 문제없이 서버가 가동
  1. Simple Storage Service

    • 장점
      • 높은 확장성(무한히)
      • 강력한 내구성
      • 높은 가용성(오류없이 정상작동 시간)
      • 다양한 스토리지 중, 목적에 맞는 적절한 스토리지 선택 및 활용 가능(Standard, Glacier)
        • Standard : 범용적 목적, 데이터에 빠른 접근 및 처리속도가 빠름, 대신 보관 비용이 높음
        • Glacier : 데이터 장기 보관 목적, 데이터에 엑세스 속도는 느리지만 보관비용이 매우 저렴
  2. 정적 웹 사이트 호스팅

    • '정적' 파일 : 서버의 개입 없이 생성된 파일

    • '동적' 파일 : 클라이언트의 요청으로 서버에서 요청에 맞추어 생성한 파일

    • 웹 호스팅(Web Hosting) : 서버의 한 공간을 임대해 주는 서비스, 이 공간에서 배포/운영이 가능하게 만들어주는 서비스

    • 버킷 : S3에 저장되는 파일들이 담기는 바구니로, 최상위 디렉토리

      • 모든 파일은 버킷안에 저장되고, 이 버킷은 'Resion'안에서 유일해야 한다.
      • 버킷 정책을 생성하여 해당 버킷에 대한 유저 접근 권한을 수정 할 수 있음
      • 버킷은 데이터를 저장시, 키(Key)-값(Value)형식으로 저장하며, 이 데이터를 객체라 부름
      • 객체는 '파일'과 '메타데이터'로 구성된다.
        • 파일 : 키-값 형식으로, 실제 데이터를 저장하고 있는 파일(5TB), 키 : 파일에 대한 식별자 역할
        • 메타데이터 : 객체의 생성일, 크기, 유형과 같은 객체에 대한 정보가 담긴 데이터들
        • 모든 객체는 고유한 URL이 있고, 이 URL 주소로 원하는 데이터에 접근할 수 있음
      • [Ex. http://[버킷의 이름].S3.amazonaws.com/[객체의 키]]



3Tier-Architescture 배포전략

1. Client 코드를 사용자에게 제공

  • AWS의 S3 서비스를 이용하여 사용자들에게 Client application 를 제공
  • 클라이언트 앱을 정적 파일로 빌드하여 제공, 즉, S3를 이용하여 클라이언트를 배포
  • 빌드 : 불필요한 데이터를 없애고, 여러 갈래로 퍼져있는 데이터들을 통합/압축하여 배포하기에 최적화된 상태로 만드는 것
    • 데이터 용량이 줄어들고, 웹 사이트의 로딩 속도가 빨라짐
    • 웹 앱의 경우, 배포 가능한 정적 파일(static files)의 형태로 만드는 것
    • asset 자체가 정적인 경우 있는 그대로 배포, React의 경우 'npm run build'와 같은 명령을 사용하여 정적 파일 형태로 결과물을 만들어 배포
  • AWS의 CDN 서비스인 CloudFront를 통해 각지의 데이터 센터에 분산시켜 저장해 놨다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스 제공



2. Server Application 및 DataBase 배포

  • Server : AWS의 EC2 서비스를 통해 서버를 구성하고 서비스 제공
  • Database : AWS 자체 RDS(DB) 서비스를 통해 EC2를 통해 배포된 Server Application 데이터를 저장 및 배포가능



3. DNS

  • S3, EC2를 이용해서 배포된 서비스는 IP주소 혹은 AWS에서 제공하는 여러분의 서비스와는 전혀 상관없는 긴 도메인주소를 통해 접근
  • AWS의 Route 53서비스를 이용하여 직관적인 도메인 주소를 통해 서비스에 접근할 수 있도록 해줌



< Amazon Web Service >

EC2 인스턴스 생성/연결/서버 실행

1. SSH 프로토콜

  • 서로 다른 PC가 인터넷과 같은 Public Network를 통해 통신을 할 때 보안상 안전하게 통신을 하기 위한 규약

  • 주로 받는 데이터를 암호화해서 해당 키 페어를 가지지 않은 사람은 통신되는 데이터를 알아볼 수 없음

  • 인스턴스 생성 중 마지막에, '.pem' 확장자 파일은, EC2 인스턴스에 연결을 할 때 사용하는 암호가 담긴 파일로, pricate Key가 담인 파일이다. 이 키로, SSH Server의 공개키를 활용하여 인증에 사용




Security Group

1. 보안그룹(Security Group)

  • AWS에서 임대한 인스턴스의 가상 방화벽
  • 인스턴스로 들어가고 나가는 트래픽에 대한 가상 방화벽이다.
    • 인바운드 : EC2 인스턴스로 들어가는 트래픽
      • 생성시 기본적으로 SSH 접속을 위한 SSH 규칙만 있고, 규칙에 허용치 않는 접근은 막음
    • 아웃바운드 : EC2 인스턴스에서 나가는 트래픽



3. 피드백 😮

  • Cloud 컴퓨팅 이란, 가상화 기술을 이용하여 물리적인 장소가 아닌 가상의 컴퓨터를 대여해주는 것을 의미한다. 기존의 온프레스미방식과 달리 사용한양 만큼만 지불을 하는 장점이 있음


  • Deploy(Deployment)란 사용자가 이용할 수 있게 배포하는 과정을 의미하는데, 각 개발->통합->스테이징->프로덕션의 과정을 거쳐가며 배포를 준비하고 각 환경에 따라 정상 작동시키기 위해 '.properties, yml'을 이용하여 상대 경로를 사용할 수 있도록 환경변수를 설정한다.


  • (Amazon)EC2란, 유연한 클라우드 컴퓨팅을 의미하는데 원격의 제어할 수 있는 가상의 컴퓨터를 빌리는 것이다. 구성하는데 짧은 시간이 소모되며 AMI(Amazon Machine Image)를 통해 다양한 운영체제 및 램/CPU등을 선택할 수 있음. 이 한대를 instance라 부름


  • RDS는 AWS에서 제공하는 관계형 데이터베이스 서비스이며, mysql과 비슷하지만 따로 DB를 설치하지 않고 AWS 자체 DB를 사용한다.


  • S3는 클라우드 스토리지로, 인터넷 공간에 저장하는 저장소를 의미한다(Ex. google Drive). 이는 여러 지역에 Resion이라는 위치에 가용 영역인 데이터센터를 가지고있어 한곳에서 문제가 발생해서 다른 가용영역에 백업을 해놓은 DB를 사용하여 서버가 문제없이 가동이 가능

4. 앞으로 해야 될 것 😮

  • 매일 꾸준히 할 것
    • 꾸준히 velog 작성
    • Java 언어 및 Algorithm 공부(Coding-Test)
    • 틈틈히 운동 하기

  • 내일 해야 할 것
    • Cloud 배포 컨테이너(Feat. docker)
profile
Will be great Backend-developer

0개의 댓글