수업 76일차

galoo·2023년 10월 25일
0

HelloVision Dx Data School

목록 보기
68/72

✔ Storage Service

AWS 백업

백업의 형태

  • 온프레미스 환경의 데이터를 AWS 백업
  • AWS에 구축한 시스템을 백업

백업의 개요

  • 사내 시스템은 온프레미스 환경에 위치하고, 기업에 사이트는 AWS 환경에 위치
  • 용량이 큰 이미지 파일, DB, 각 서버의 로그파일, 파일 서버에 있는 파일이 백업 대상
  • 로그 파일과 데이터베이스는 장기간 보관
  • 비용을 절감하면서도 운영에 손이 많이 가지 않는 방식으로 진행

인프라 설계

  • 스토리지 게이트웨이를 이용한 자동 백업 권장
    - 온프레미스 환경에 스토리지 게이트웨이를 사용하여 백업용 스토리지를 만들어서 S3에 자동 백업
  • S3와 글레이셔를 이용한 수명주기 관리
    - 로그 파일을 보관할 때, 일반적으로는 S3의 기능으로 백업을 하고, 온라인 보관 기간을 넘은 파일은 글레이셔에 아카이브
  • 용량의 대부분을 차지하는 이미지 파일과 데이터베이스는 S3에 백업

온프레미스 환경의 데이터 백업

일반적인 방법

  • 오브젝트 스토리지 서비스인 S3를 명령해 인터페이스를 통해 이용하는 패턴
    - 관리형 콘솔을 이용하지 않음
  • 가상 서버인 EC2와 가상 스토리지인 EBS로 구축한 백업용 서버에 데이터를 동기화시키는 방법
    - S3보다 비용이 증가하지만, 백업을 유연하게 할 수 있음

S3로 파일 백업

  • AWS CLI를 이용해서 백업
    - 명령어 30개 넘는 리눅스 명령어
  • 언어별 API이용해서 배겅ㅂ
  • cron이나 작업 스케줄러를 제공
  • S3는 인바운드 전송은 무료, 온프레미스에 대한 전송이 유료
  • 라이프 사이클 설정 가능
    - 일정 기간 지나면 삭제하도록 할 수 있음
  • 서버 사이드 암호화를 제공
    - 파일 업로드 될 때는 평문으로 업로드 되지만, 저장 될 때 암호화 적용하고, 꺼낼 때 복호화를 수행
    - 전송 도중 암호화를 하는 경우는 암호화 소프트웨어나 암호화 알고리즘을 적용해야 함

EC2로 파일 백업

  • EBS 스토리지 이용
  • 별도의 애플리케이션을 제작해서 활용하는 것이 가능

AWS 스토리지 게이트웨이 이용

  • AWS가 제공하는 소프트웨어를 이용

3rd party 제품 사용

  • MSP나 DSP의 제품을 이용
  • CSP는 인프라를 제공하는 기업

?

개념

  • 객체
    - S3에 저장되는 단위
    - 파일과 메타 데이터로 구성
    - key가 객체의 이름이고, Value가 실제 데이터
  • bucket
    - S3에서 만들 수 있는 최상위 디렉토리
    - region 별로 생성되며 계정 별로 100개까지 생성 가능
    - 버킷 안에 객체가 저장되고, 디렉토리 생성가능(객체 이름은 디렉 이름을 포함)
    - 저장 가능한 객체의 개수와 저장 가능한 용량은 무제한
    - url 접근 가능
  • 내구성
    - 데이터가 유실되지 않는 성질
    - 1년 99.9...% 의 내구성
  • 가용성
    - 언제나 정상적으로 사용 가능한 상태
    - 1년 기준 99.99%
  • S3 서비스는 내구성을 기준으로 2가지 Storage를 제공
    - 복제본의 개수를 다르게 해서 내구성을 유지
  • 요금 개념은 저장 용랴오가 데이터 다운로드 량과 HTTP 요청 개수로 책정

버킷 생성의 개념

버킷을 외부 애플리케이션에서 사용하고자 하면, 사용자를 등록해야 한다.

  • IAM 사용자를 등록해서 키를 받아야 합니다.
    - IAM에서 사용자 이름과 권한 생성
    - 키 발급 받기
  • 버킷을 생성
    - s3관리 콘솔에 접속
    - 버킷 이름과 리전 그리고 이전에 생성한 accesskey, secret key로 외부에서 접근
  • 권한을 설정
    - 버킷 자체에 대한 권한 설정
    - 버킷 정책에서 목록 가져오기, 업로드, 및 삭제 권한 부여 가능...
    - CORS 권한 설정 : 웹 브라우저에서 구동되는 프로그램은 자신의 로컬 서버 이외의 요청이 안되는데, 이를 허용해주는 설정
  • 정적 웹 호스팅을 하고자 하는 경우
    - 정적 웹 호스팅 설정을 열어주어야 합니다.

Django에서 S3에 파일 업로드 및 다운로드

로컬에 파일을 업로드

  • python venv
    - python -m venv myvenv
    - python3, python 맞게 설정
  • 필요 패키지 설치
    - django, mysqlclient, Pillow(이미지 파일을 db에 활용하고자 할 때 사용), django-bootstarp4
  • 프로젝트 생성
    - django-admin startproject myproject .
  • settings.py 수정
    - 실행될 서버의 IP, ALLOWED_HOSTS = ["0.0.0.0", "127.0.0.1"]
    - 앱 등록
    - DB설정 (rds에 뭐 해도 되는데 우선 그냥 sqlite3 사용해보자)
  • 화면을 만들기 위해서는 templates안에다가 해야한다.
  • 업로드된 파일이 저장될 디렉 생성
    - 최상위 디렉에 폴더 만들고 해야함
  • 모델 설정
    - models.py
  • 모델 수정하면 마이그레이션 하기
  • forms.py를 만들어보자.
  • 요청을 처리(Service 계층)할 함수를 소유하는 views.py 파일을 수정하자
  • 화면 출력에 공통으로 사용할 base.html 파일을 teamplates 디렉에 생성
  • 실제 업로드 화면으로 사용할 fileupload.html 파일을 templates 디렉에 생성

데이터를 표현하는 클래스 - Domain class

  • Entity
    - DB의 테이블과 직접 연결되는 클래스
    - 이 클래스는 Service계층과 Repository 계층에서만 사용해야 합니다.
  • DTO
    - Data Transfer Object의 약자로 계층간의 데이터 이동에 사용합니다.
    - 여러 계층에서 동일한 모양의 데이터를 사용할 때는 DTO를 만들어야 합니다.
  • VO
    - Value Object의 약자
    - 여러 개의 데이터를 묶기 위한 목적으로, 현재 계층에서만 사용하는 객체입니다.

데이터베이스 연동 방식

  • DB Driver를 직접 조작하는 방식
    - 직접 코딩
  • SQL Mapper 방식의 프레임워크를 이용하는 방식
    - SQL과 소스 코드의 분리
  • ORM(Object Relation Mapping)
    - DB의 하나의 행을 인스턴스로 표현해서, 인스턴스를 조작하면 DB에 반영이되는 방식
    - Class가 Table(Schema)가 되고, Instance가 하나의 row(tuple)이 됩니다.
    - 대다수의 ORM은 속도 떄문에 연결된 구조를 갖는 경우가 많습니다.
    - Class를 Entity Class라고 하며, 이 클래스의 객체들은 프레임워크가 관리(IoC - Inversion of Control : 제어의 역전)
    - 기본적으로 프레임워크를 사용하는 방법은, 프레임워크가 클래스를 제공하고, 개발자가 인스턴스를 만들어서 사용하고 관리하는 방식인데, 클래스를 개발자가 만들고, 그 클래스의 인스턴스를 프레임워크가 관리하는 형태를 제어가 역전되었다고 합니다.

S3에 업로드하고 다운로드

profile
밀가루 귀여워요

0개의 댓글