728x90
반응형

가끔 접근하는 백업데이터를 관리하려는데, S3 클래스가 다양하게 있다는 것을 알게 되었다.

데이터를 저장할 때 단순히 데이터를 보관하는 것 이상의 고려가 필요하다.. 자주 액세스하는 데이터인지, 장기 보관용 데이터인지에 따라 비용 효율성을 극대화할 수 있는 다양한 옵션이 있는데 필요에 따라서 Amazon S3의 주요 스토리지 클래스를 비교하고, 내가 사용하는 데이터에 맞는 최적의 클래스를 선택하는 방법을 정리해보려고 한다.

 

클래스 종류 비교

비교군 S3 Standard S3 One Zone-IA S3 Glacier Instant Retrieval
사용 사례 자주 액세스하는 데이터를 위한 범용 스토리지 자주 액세스하지 않는 데이터 Instant Retrieval을 통해 일년에 몇 번 액세스하는 장기 데이터
첫 번째 바이트 지연 시간 밀리초 밀리초 밀리초
가용성을 위한 설계 99.99% 99.5% 99.9%
가용 영역 ≥3 1 ≥3
최소 스토리지 기간 요금 해당 사항 없음 30일 90일
스토리지 요금 GB당 0.025 USD GB당 0.011 USD GB당 0.005 USD
PUT, COPY, POST, LIST 요청(요청 1,000개당) 0.0045 USD 0.01 USD 0.02 USD

 

왜 스토리지 클래스를 선택해야 할까?

데이터 관리 비용을 최소화하고 성능을 최적화하려면, 데이터 액세스 패턴에 따라 적절한 스토리지 클래스를 선택하는 것이 중요하다는 것을 알게 되었다.

  • S3 Standard:
    • 자주 액세스하는 데이터에 적합하다.
    • 예를 들어, 웹사이트에서 자주 호출되는 이미지나 동영상 파일, 실시간 로그 데이터 등은 S3 Standard를 사용하는 것이 좋다.
    • 가용성이 높고 지연 시간이 짧아 빠르게 데이터를 제공할 수 있다.
  • S3 One Zone-IA:
    • 자주 액세스하지 않는 데이터를 저장하기에 적합하다.
    • 예를 들어, 주기적으로 백업해야 하는 파일이나 장기 보관용 데이터, 하지만 복원할 필요는 적은 경우에 이상적이다.
    • 비용이 저렴하지만 가용 영역이 하나뿐이므로 데이터 손실 위험이 있다.
  • S3 Glacier Instant Retrieval:
    • 장기 보관용 데이터로, 일년에 몇 번만 액세스하는 경우에 적합하다.
    • 예를 들어, 법적 증빙 자료, 오래된 프로젝트 파일 등이 이에 해당한다.
    • 저렴한 비용으로 데이터를 저장할 수 있으며, 필요 시 빠르게 데이터를 복원할 수 있다.

 

예시 시나리오: S3 One Zone-IA 선택

가정해보자면 (실제는 아님 X) , 우리 회사는 주간 백업을 수행한다. 백업 데이터는 주로 사고 발생 시 복구를 위해 필요하며, 일주일에 2, 3번 삽입이 이루어지고 불러오기는 자주 발생하지 않는다. 이 경우, S3 One Zone-IA를 선택하면 최적의 비용 효율을 얻을 수 있다. 

 

결론

Amazon S3의 다양한 스토리지 클래스는 데이터 액세스 패턴에 따라 선택함으로써 비용을 절감하고, 필요한 성능을 유지할 수 있다. 조금 번거롭긴 하지만,,! 적절한 클래스를 선택하여 스마트하게 데이터 관리를 해보자!

참고 링크

728x90
반응형

'IT > Back-end' 카테고리의 다른 글

데이터 크기와 네트워크 속도의 차이 feat. TCP  (0) 2024.07.17
AWS API gateway header 읽지 못하는 문제  (0) 2023.08.01
프로세스 관리  (0) 2022.10.06
728x90
반응형

기존에 mysql로 dbms를 사용하여 서비스를 만들어둔 상태인데, postgresql의 장점이 만들고자 하는 서비스에 적합하다고 생각하여 바꾸게되었다!

똑같이 Sequelize 사용이 가능하며 연결 옵션만 수정해주면 바로 연결과 sync가 가능했다.

 

기존에 사용하던 mysql과 postgresql 둘다 AWS RDS를 사용했고, 옵션을 크게 바꿔준 것은 없었다.

 

기존 : Mysql 사용

// config

    "mysql": {
        "host": "", //mysql host
        "username": "", //mysql user
        "password": "", //mysql password
        "database": "", //mysql database
        "dialect": "mysql",
        "timezone": "+09:00"
    },
// sequelize.js

import Sequelize from 'sequelize';
import config from 'config';
import {models} from '../src/models/index.js';

const sequelize = new Sequelize(
    config.get('mysql.database'),
    config.get('mysql.username'),
    config.get('mysql.password'),
    {
      host: config.get('mysql.host'),
      dialect: config.get('mysql.dialect'),
      timezone: config.get('mysql.timezone'), // 예시: 대한민국 시간대에 맞는 옵션 설정
    },
);

 

변경 : Postgresql 사용

// config

    "postgres": {
        "host": "", //postgres host
        "username": "", //postgres user
        "password": "", //postgres password
        "database": "", //postgres database
        "dialect": "postgres",
        "timezone": "+09:00"
    },
// sequelize.js

import Sequelize from 'sequelize';
import config from 'config';
import {models} from '../src/models/index.js';

const sequelize = new Sequelize(
    config.get('postgres.database'),
    config.get('postgres.username'),
    config.get('postgres.password'),
    {
      host: config.get('postgres.host'),
      dialect: config.get('postgres.dialect'),
      timezone: config.get('postgres.timezone'), // 예시: 대한민국 시간대에 맞는 옵션 설정
      dialectOptions: {
        ssl: {
          require: true,
          rejectUnauthorized: false,
        },
      },
    },
);

특징적으로는 dialectOptions 옵션이 추가됐다. 저 옵션이 없으면 아래 에러와 같이 SSL에서 막혀서 연결이 되지 않는다

Unable to connect to the database: ConnectionError [SequelizeConnectionError]: no pg_hba.conf entry for host "222.109.176.119", user "test", database "postgres", no encryption at Client._connectionCallback (C:\Users\sowon\project\kkosunae\node_modules\sequelize\lib\dialects\postgres\connection-manager.js:143:24) at Client._handleErrorWhileConnecting (C:\Users\sowon\project\kkosunae\node_modules\pg\lib\client.js:327:19) at Client._handleErrorMessage (C:\Users\sowon\project\kkosunae\node_modules\pg\lib\client.js:347:19) at Connection.emit (node:events:513:28) at Connection.emit (node:domain:489:12) at C:\Users\sowon\project\kkosunae\node_modules\pg\lib\connection.js:117:12 at Parser.parse (C:\Users\sowon\project\kkosunae\node_modules\pg-protocol\dist\parser.js:40:17) at Socket.<anonymous> (C:\Users\sowon\project\kkosunae\node_modules\pg-protocol\dist\index.js:11:42) at Socket.emit (node:events:513:28) at Socket.emit (node:domain:489:12) { 
...

rejectUnauthorizedfalse로 설정하면, 서버가 self-signed 인증서를 사용하는 경우에도 연결 가능해진다.

보안상의 이유로 실제 운영에서는 rejectUnauthorizedtrue로 설정하고 서버의 인증서를 신뢰할 수 있는 것으로 구성하는 것이 좋다!

 

시행착오

문제 : 처음에 Postgresql을 연결하는 과정에서 위 에러가 발생

시도1 : RDS로 만든 postgresql은 pg_hba.conf를 직접 수정하기 번거로워, 파라미터 그룹으로 설정하려함.


여러 레퍼런스를 찾아서 RDS의 파라미터 그룹을 생성하고 rds.force_ssl을 0으로 설정하는 등 적용을 해봤지만 에러는 사라지지 않음

시도2 : 파라미터 그룹 원복 후 dialectOptions 을 추가하여 재시도. -> 성공 !

728x90
반응형
728x90
반응형

새로 작성한 API에 header로 Authorization하는 기능이 API gateway 메소드를 연결하니 header를 읽지 못하는 문제가 발생했다. 
API gateway를 연결하지 않은 엔드포인트로 테스트 하면 정상적으로 헤더를 읽는데, API gateway를 통해 호출하면 문제가 발생한다.

원인은 API gateway 에 '프록시 통합 사용' 기능이 활성화되지 않아서다.

위 사진처럼 '프록시 통합 사용'을 체크하면 아래와 같은 컨펌이 뜨는데 확인을 눌러주면 적용된다.

적용 후 API를 호출해보면 정상적으로 header를 읽는 것을 확인할 수 있다!

왜 안됐었는지 원인을 알아봤더니 Proxy 기능이 활성화되지 않으면, API Gateway가 Authorization 헤더를 포함한 클라이언트 요청의 헤더를 제대로 전달하지 못할 수 있다고 한다.

즉, 프록시 통합 사용' 기능을 활성화해야
API Gateway는 들어오는 요청을 원본 API로 거의 그대로 전달하려고 한다는 것이다. 모든 헤더, 쿼리 파라미터, 경로 변수 등이 API Gateway를 통해서 원본 API로 전달되며, 이를 통해 원본 API는 클라이언트 요청을 있는 그대로 처리할 수 있는 것이다!

728x90
반응형

'IT > Back-end' 카테고리의 다른 글

자주 액세스하지 않는 데이터를 위한 S3 스토리지 클래스 비교  (0) 2024.06.13
프로세스 관리  (0) 2022.10.06
운영체제  (0) 2022.10.06
728x90
반응형

1. ModuleNotFoundError: No module named 'rpy2'

rp2 설치가 안됨... pc에 r이 안깔려있어서 그런거임
아래 사이트에서 r 설치하고 다시 rpy2 설치 시도하면 성공!

https://cran.r-project.org/

 

The Comprehensive R Archive Network

 

cran.r-project.org

 

2. rpy2.robjects.packages.PackageNotInstalledError: The R package "visualFields" is not installed.

rp2설치를 했는데도 visualFields가 없다고 함. r에서 설치해야함
pc에 r을 설치했다면, R console 프로그램이 생겼을텐데 해당 프로그램에서 아래 명령어로 설치하면

install.packages("visualFields")

설치하다가 
--- Please select a CRAN mirror for use in this session ---
이런 문구가 뜬다면 가장 가까운 리전 선택하면 됨

설치 되면 파이썬에서도 잘 실행됨

3.rpy2.robjects.packages.PackageNotInstalledError: The R package "vfprogression" is not installed.

2번 문제와 동일. 아래 명령어로 설치

install.packages("vfprogression")

728x90
반응형

'IT > Python' 카테고리의 다른 글

STT -> 형태소분석  (0) 2021.01.27
QTextBrowser  (0) 2021.01.27
Pycharm에서 stt파일 돌리기  (0) 2021.01.27
728x90
반응형

맨날 source tree나 Github desktop 같은 GUI툴만 써서 예전에 알았던 git 명령이 기억이 나지 않아버렸다;;

새로운 프로젝트를 생성해서 원격에 만들어둔 repository에 push 하려는데, 터미널로 git을 사용하는데에 셋팅이 안되어있어서 몇가지 과정을 통해 해결했다.

 

1. 원격 저장소 추가

git remote add origin https://github.com/Kkosunae/backend
git add .

 

2. commit & push

git commit -m "Feat #1 프로젝트 생성"
git push origin master

 

마스터에 푸시를 했더니 위와같은 에러가 발생했다.

remote: Permission to Kkosunae/backend.git denied to ssowon.

이 블로그를 참고하여 윈도우즈에서 자격 증명 관리자를 들어가서
git:https://github.com 의 계정을 편집해줬다. 

fatal: Authentication failed for 'https://github.com/Kkosunae/backend/'

찾아봤더니 이제 계정 id랑 password로는 안되고 key chain이 생겼나보다.
이번엔 이 블로그를 참고하여 깃허브에서 Personal access token을 생성했다.

깃허브 -> setting -> Developer settings -> Personalaccess tokens 에서 발급할 수 있었다.
그리고 PUSH 성공 !

 

3. 깃헙에서 차이점이 없다는 에러 발생

원격에서 Push는 확인이 되는데, compare하니 차이점이 없어서 pull request가 안되는 문제가 발생

There isn’t anything to compare.
main and master are entirely different commit histories.

요 블로그 참고하여 해결

git branch main master -f
git checkout main
git push origin main -f
git checkout master

이번 프로젝트에선 터미널로만 git 작업해서 git잘알이 되어야지 ....

728x90
반응형
728x90
반응형

존경하는 개발자분께 PHP를 개발할때 도움이 되는 문서를 추천받았다.
PHP를 개발하는데 있어서 많은 것을 느끼고 반성할 수 있어서 남기고자 한다!

https://modernpug.github.io/php-the-right-way/

 

PHP: The Right Way 한국어판

쉽게 읽을 수 있는 PHP의 베스트 프랙티스, 코딩 표준, 권위있는 튜토리얼로의 링크를 제공합니다.

modernpug.github.io

1995년에 PHP가 라스무스 러돌프가 처음 공개했는데, 그 이후로 웹 개발에 큰 발전을 가져왔다.
30년 가까운 시간동안 쓰인 언어만큼 웹 상에 PHP과 관련한 무지하게 많은 레퍼런스들이 탄생했다.
그만큼 정확하지 않은 정보가 많았는데 잘못된 PHP 개발 방식을 바로잡고, 과거와 많은 것이 달라진 PHP 8.1 기준으로 현대에 클린하게 PHP를 개발할 수 있는 방법을 가이드하는 문서다.

PHP는 PSR이라고 공식적으로 표준화된 코드 스타일을 제안하고 있는데, 이를 기반으로 단순히 코드 스타일 뿐만 아니라 OS에 따라 PHP를 다루는 솔루션이나 보안, 배포, DB, 문서화 등 여러 방면에서 이상적인 것들을 제안하는 문서라서 PHP 개발 입문이든, PHP를 쓰던 사람이든 한번 읽어보면 많은것을 느낄 수 있다.

 

사설로 작성된 문서인 만큼 뭐든 무조건적인 정설은 아니니 참고하는 것이 좋을 것 같다!

728x90
반응형

+ 최근 게시글