✔ 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 스토리지 게이트웨이 이용
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에 업로드하고 다운로드