※ 목차
이전하게 된 원인 & 스토리지 결정 과정
마이그레이션 방법 결정
Rclone이란?
마이그레이션 과정
이전하게 된 원인 & 스토리지 결정 과정
지금 근무하고 있는 회사는 클라우드 스토리지 서비스로 GCS(Google Cloud Storage)를 사용하고 있었는데
용량 1기가당 $0.023이고 Egress 비용은 1기가당 $0.12라서 비용이 상당히 부담스러웠습니다.
그래서 다른 스토리지 서비스들을 검토해보았고 검토 결과 DigitalOcean의 Spaces라는 서비스를 찾아내었습니다.
DigitalOcean은 1TB까지 $5로 제공하고 초과 시 1GB당 $0.02 그리고 Egress 비용은 0.01이었습니다.
팀장님께서는 눈여겨보았던 Vultr 서비스와 가격은 동일하지만
DigitalOcean은 제공하는 region이 많고 CDN을 무료로 지원한다는 피드백을 주셨습니다.
최종적으로 DigitalOcean으로 마이그레이션을 결정하고 해당 task를 제가 진행하게 되었습니다.
잘못하면 실제 운영되고 있는 데이터들이 다 날아갈 수도 있는 입사 이후 가장 무서운 task였어서
구글에 있는 문서를 전부 찾아보며 발생할 수 있는 예외 상황까지 예상해서 정리를 했습니다.
이런 업무는 스타트업이 아니면 쉽게 해 볼 수 있는 경험이 아니라 생각해서
이번에 클라우드 스토리지 이전 과정을 포스트로 기록하게 되었습니다!
마이그레이션 방법 결정
데이터를 마이그레이션을 하는 방법은 정말 많지만
이런 대용량 데이터를 이전하는 것은 정말 쉽지 않고 부담스러운 일이었습니다.
이전 도중에 특정 데이터가 사라지기라도 하면 정말 큰일이었죠...
정말 경험해보지도 못한 task라 계속해서 구글링을 해오던 중에 Rclone이라는 프로그램을 발견하였고
Rclone에 대한 여러 문서를 본 결과 믿을만하고 정말 편하게 마이그레이션을 할 수 있을 거라 판단되어
Rclone을 사용하여 마이그레이션을 하기로 결정하였습니다.
결과적으로 Rclone은 정말 만족스러웠고
걱정했던 것에 비해 마이그레이션이 정말 쉽게 끝낼 수 있게 도와주었습니다.
( 정말 추천해요 :D )
Rclone이란?
Rclone은 Go언어로 만들어진 클라우드 스토리지에 특화된 업로드/다운로드 오픈소스 프로그램입니다.
Window, Mac, Linux를 포함한 다양한 OS를 지원하고 정말 다양한 스토리지 서비스를 지원합니다.
사용법도 정말 쉬워서 명령어 한 줄로 다양한 옵션을 설정하고 마이그레이션이 가능합니다.
DigitalOcean을 비롯한 많은 클라우드 스토리지 서비스의 공식문서에서
Rclone을 이용한 Migration 방법을 소개하고 있을 정도로 신뢰성 있는 프로그램이기도 합니다.
그럼 본격적으로 Rclone을 이용해 Migration 한 과정을 정리해보겠습니다.
마이그레이션 과정
1. Rclone 설치하기
저는 윈도우 운영체제를 사용하고 있기 때문에 Window 기준으로 기록하겠습니다.
Linux나 Mac은 CLI로 설치가 가능한 것으로 얼핏 확인했었습니다.
윈도우에서는 먼저 Rclone 홈페이지에 가서 zip 파일 다운로드를 진행합니다.
Rclone 다운로드 페이지 : https://rclone.org/downloads/
그다음 로컬에 zip 파일 압축을 풀어준 다음
명령 프롬프트를 실행시켜 rclone.exe 파일이 있는 곳으로 이동합니다.
저 같은 경우에는 바탕화면에 압축을 풀었기 때문에 다음 사진과 같았습니다.
이제 Rclone을 사용할 준비는 모두 끝났습니다.
앞으로 사용하는 명령어는 모두 이 위치에서 입력하면 됩니다.
2. Config 만들기
데이터 마이그레이션 전에 먼저 현재 데이터가 있는 출발지 스토리지와
이전의 대상이 되는 도착지 스토리지를 Config로 만들어서 설정해줘야 합니다.
저의 경우는 GCS -> Spaces 였습니다.
Config를 만들 때는 스토리지 서비스마다 요구하는 것들이 다르기 때문에
미리 각자의 스토리지 서비스에서 필요한 AccessKey나 Region과 같은 정보들을 확인해두셔야 합니다.
이제 아래 명령어를 입력해 실제로 Config 파일을 만듭니다.
> rclone config
그럼 아래 사진과 같은 결과가 나옵니다.
( 저는 기존에 만들어 둔 config 파일이 있어 7개의 옵션이 뜨지만 아마 3개의 옵션이 뜨실 겁니다. )
우리는 새로운 config 파일을 만들어야 하기 때문에 n을 입력해줍니다.
그럼 config 파일의 이름을 입력하라고 나오고 적당한 이름을 입력해주면
아래 사진과 같이 Rclone이 제공하는 스토리지 서비스들을 나열해줍니다
여기서 내가 원하는 스토리지 서비스의 번호를 입력하시면 됩니다.
예시로 Google Cloud Storage 서비스를 사용하고 싶으면 15를 입력하면 됩니다.
그럼 각자의 스토리지에 접근하기 필요한 여러 설정들을 Rclone이 요구하기 시작합니다.
이 설정은 상황마다 전부 다르기 때문에 공식 문서를 참고하여 내 상황에 맞게 입력해줍니다!
전부 입력하면 아래 사진과 같이 고급 설정을 하겠냐고 물어봅니다.
저는 딱히 해줄 게 없었기에 n을 입력했습니다.
그럼 마지막으로 Rclone이 자동 구성을 하겠냐고 물어보는데
n을 입력해주면 됩니다.
그럼 config 파일이 생성이 됩니다.
생성된 config 파일을 확인하려면 아래 명령어를 입력하면 됩니다.
> rclone config show
그럼 만들어진 config 파일들을 전부 확인이 가능합니다.
이 방식대로 출발지 스토리지와 목적지 스토리지에 대한 Config 파일을 전부 만들어주면 됩니다.
3. Config 파일 유효성 판별하기
Config 파일을 만들긴 했는데
이게 정말 내 스토리지에 접근이 가능한지에 대한 확인이 필요합니다.
이 때는 스토리지에 있는 버킷들을 출력해서 내 스토리지를 잘 접근하고 있는지 확인이 가능합니다.
명령 프롬프트에 다음 명령어를 입력해줍니다.
> rclone lsd [Config이름]:
ex) rclone lsd gcs:
그러면 우리의 스토리지 내에 있는 모든 버킷들을 출력해줍니다.
만약 에러가 뜨면 Config 파일이 유효하지 않은 경우이므로
2번 과정에서 잘못된 부분이 어디인지 찾아야 합니다.
아래 명령어를 통해 버킷에 존재하는 파일들도 확인이 가능합니다.
> rclone tree [Config이름]:[버킷이름]
ex) rclone tree gcs:sample_bucket
그럼 버킷 안에 존재하는 모든 파일들을 tree 형태로 출력해줍니다.
모든 게 다 정상적으로 출력된다면
이제 마이그레이션을 할 차례입니다.
4. 마이그레이션
마이그레이션은 거창한 이름과 달리 정말 쉽습니다.
아래 명령어를 입력해 마이그레이션을 해줍니다.
> rclone sync [출발지Config]:[버킷이름] [목적지Config]:[버킷이름]
ex) GCS내의 sample 버킷에 있는 데이터를 Spaces의 develop 버킷으로 이전할 경우
(각각 Config의 이름은 gcs와 spaces라고 가정)
-> rclone sync gcs:sample spaces:develop
그러면 명령 프롬프트가 입력을 받지 않는 상태가 되고 (마이그레이션 진행 중)
클라우드 스토리지를 확인해보시면 실시간으로 데이터가 들어가고 있는 것이 보입니다.
작업은 데이터의 양과 크기에 따라 다르겠지만 몇 분 내에 완료가 됩니다.
만약 조금 불안하다 싶으시면 아래 명령어를 통해
두 스토리지의 파일들을 비교하실 수 있습니다.
> rclnoe check [출발지Config]:[버킷이름] [목적지Config]:[버킷이름]
ex) rclone check gcs:sample spaces:develop
그럼 몇 개가 일치하고 몇 개가 다른지 출력해줍니다.
이렇게 클라우드 스토리지 이전이 완료되었습니다.
걱정했던 것보다 정말 쉽게 이전이 돼서 조금 당황했지만
그만큼 Rclone의 도움을 정말 톡톡히 받았습니다.
Config 파일을 만드는 게 모든 설정들을 살펴봐야 하기에 조금 까다롭지만
연결이 잘 되는 것을 확인하고나서부터는 정말 술술 진행할 수 있었습니다.
이상 클라우드 스토리지 마이그레이션 과정이었습니다.
'개발경험' 카테고리의 다른 글
VM에 API 서버 배포 후 들어오는 해킹 시도 제대로 막기 (1) | 2024.03.22 |
---|---|
[React-Native] 패키지명 & Bundle ID 바꾸는 방법 (0) | 2024.02.21 |
[React-Native] 전역적으로 사용할 수 있는 모달 만들기 (1) | 2024.02.06 |
[React-Native] 커스텀 폰트를 적용하고 전역적으로 사용하는 방법 (0) | 2024.02.05 |
현업에서 마주친 MSA 데이터 동기화 이슈 (0) | 2023.12.20 |