Skip to content

HandongSF/cloud_storage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

rclone logo rclone logo

Website | Documentation | Download | Contributing | Changelog | Installation | Forum

Build Status Go Report Card GoDoc Docker Pulls

Rclone

๋‹ค์–‘ํ•œ Public Cloud Storage ์„œ๋น„์Šค๋“ค์„ ์—ฐ๋™์‹œ์ผœ์„œ ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค

Rclone์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์œ„ ๋งํฌ ์ฐธ์กฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Storage providers

Rclone ์ด ์ง€์›ํ•˜๋Š” Public Cloud Storage ๋ชฉ๋ก๋“ค the full list of all storage providers and their features

๊ธฐ์ดˆ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ์„ค์น˜ ๋ฐฉ๋ฒ•

1. Cloud Aggregator ์„ค์น˜

git clone https://github.com/HandongSF/cloud_storage.git

2. Go version 1.21 ์ด์ƒ ์„ค์น˜

์„ค์น˜ https://go.dev/dl/

brew install go

์„ค์น˜ ํ™•์ธ

go version

3. Rclone build

ํด๋ก  ์™„๋ฃŒํ•œ ํด๋” ์ด๋™ ํ›„ rclone build

go build -o rclone

๋นŒ๋“œ ํ™•์ธ

./rclone version

์ „์—ญ์—์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€์ˆ˜ ์„ค์ •

MAC

sudo cp ./rclone /usr/local/bin/
sudo chmod +x /usr/local/bin/rclone

WINDOW

์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŽธ์ง‘ -> ํ™˜๊ฒฝ๋ณ€์ˆ˜ -> ๋ณ€์ˆ˜:PATH ํด๋ฆญ -> ํŽธ์ง‘ -> rclone ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€

์ „์—ญ์—์„œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

์ž„์‹œ์ ์œผ๋กœ rclone ์‹คํ–‰ ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ./rclone ~~ ๋กœ ์‹คํ–‰ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

go build -o rclone

4. Public Storage ์—ฐ๊ฒฐ

rclone config ๋ช…๋ น์–ด ์‹คํ–‰ ํ›„ ์•ˆ๋‚ด๋˜๋Š” ์‚ฌํ•ญ์— ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

rclone config

๊ฐ ๋ช…๋ น์–ด ์‹คํ–‰ ๋ฐฉ๋ฒ•

1. dis_upload (๋ถ„์‚ฐ ์—…๋กœ๋“œ)

rclone dis_upload [ํŒŒ์ผ๊ฒฝ๋กœ] -b [์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„]
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„ : RoundRobin, ResourceBased, DownloadOptima, UploadOptima ์ค‘ ํƒ 1(๋Œ€์†Œ๋ฌธ์ž ์ƒ๊ด€ ์žˆ์Šต๋‹ˆ๋‹ค)

2. dis_download (๋ถ„์‚ฐ ๋‹ค์šด๋กœ๋“œ)

rclone dis_download [ํŒŒ์ผ ์ด๋ฆ„] [๋‹ค์šด ๋ฐ›์„ ๋กœ์ปฌ ์œ„์น˜ ๊ฒฝ๋กœ]

3. dis_ls (๋ถ„์‚ฐ ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ ์กฐํšŒ)

rclone dis_ls

4. dis_rm (๋ถ„์‚ฐ ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ ์‚ญ์ œ)

rclone dis_rm [ํŒŒ์ผ ์ด๋ฆ„]

5. dis_config (์„ค์ • ํŒŒ์ผ ์ด๋™)

rclone dis_config [๋ณต์‚ฌํ•ด์˜จ ์„ค์ • ํŒŒ์ผ์˜ ์ฃผ์†Œ]

cmd ํŒŒ์ผ ์ถ”๊ฐ€ script

1. dis_config

CLOUD_STORAGE/cmd/dis_config/dis_config_upload.go

๋‚ด์šฉ: CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ dis_config ๋ช…๋ น์–ด ์ •์˜

2. dis_download

CLOUD_STORAGE/cmd/dis_download/dis_download.go

๋‚ด์šฉ: CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ dis_download ๋ช…๋ น์–ด ์ •์˜

3. dis_ls

CLOUD_STORAGE/cmd/dis_ls/dis_ls.go

๋‚ด์šฉ: CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ dis_ls ๋ช…๋ น์–ด ์ •์˜

3. dis_rm

CLOUD_STORAGE/cmd/dis_rm/dis_rm.go

๋‚ด์šฉ: CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ dis_rm ๋ช…๋ น์–ด ์ •์˜

3. dis_upload

CLOUD_STORAGE/cmd/dis_upload/dis_upload.go

๋‚ด์šฉ: CLI์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ dis_upload ๋ช…๋ น์–ด ์ •์˜

dis_operations

CLOUD_STORAGE/fs/dis_operations/datamap.go

์ด dis_operations ํŒจํ‚ค์ง€๋Š” ๋กœ์ปฌ์— ์ €์žฅ๋œ datamap.json ํŒŒ์ผ์„ ํ†ตํ•ด ์›๋ณธ ํŒŒ์ผ๊ณผ ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ๋“ค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์กฐํšŒ, ๊ฐฑ์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ๋Š” SHA-256 ๊ธฐ๋ฐ˜ ์ฒดํฌ์„ฌ ๊ณ„์‚ฐ์„ ํ†ตํ•œ ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ, ์›๋ณธ ํŒŒ์ผ์˜ ์ด๋ฆ„, ํฌ๊ธฐ, ํŒจ๋”ฉ, ์กฐ๊ฐ ์ˆ˜ ๋“ฑ์˜ ์ •๋ณด์™€ ๊ฐ ๋ถ„์‚ฐ ํŒŒ์ผ์˜ ์ €์žฅ ์œ„์น˜(Remote), ์ฒดํฌ ์—ฌ๋ถ€ ๋“ฑ์„ ๊ตฌ์กฐ์ฒด๋กœ ๊ธฐ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ, ์ž‘์—… ์ƒํƒœ(upload, delete ๋“ฑ)์™€ ๋น„์ •์ƒ ์ข…๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ถ”์ ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ ์‹œ์Šคํ…œ, ์ž‘์—… ๋„์ค‘ ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ ์ด์–ด๋ฐ›๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ํŒŒ์ผ ์กฐํšŒ, ํŠน์ • ํŒŒ์ผ ์ •๋ณด ์‚ญ์ œ ๋ฐ ์ดˆ๊ธฐํ™” ๋“ฑ์˜ ์กฐ์ž‘์ด ํฌํ•จ๋œ๋‹ค. ๋˜ํ•œ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ํ•ด์‹œ ๊ฐ„ ๋งคํ•‘, ์ž‘์—… ๋„์ค‘ ๋‚จ์€ ๋ฏธ์™„๋ฃŒ ๋ถ„์‚ฐ ํŒŒ์ผ ๋ชฉ๋ก ํ™•์ธ, ๊ฐ ์กฐ๊ฐ์˜ ์ฒดํฌ ์ƒํƒœ ๋ฐ ์ €์žฅ ์œ„์น˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋ฉฐ, ์ „์ฒด JSON ํŒŒ์ผ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ์ œ์–ด๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

dis_download

CLOUD_STORAGE/fs/dis_operations/dis_download.go

์ด ์ฝ”๋“œ๋Š” Rclone ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์ €์žฅ ์‹œ์Šคํ…œ์—์„œ ๋ถ„์‚ฐ ํŒŒ์ผ๋“ค์„ ๋ณ‘๋ ฌ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  Reed-Solomon ๋ณต์›์„ ํ†ตํ•ด ์›๋ณธ ํŒŒ์ผ์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Dis_Download ํ•จ์ˆ˜๋Š” ๋‹ค์šด๋กœ๋“œ ์ž‘์—…์˜ ์‹œ์ž‘์ ์œผ๋กœ, ์ƒํƒœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•„์š” ์‹œ ๋ฏธ์™„๋ฃŒ๋œ ํŒŒ์ผ ์กฐ๊ฐ๋งŒ์„ ์„ ํƒํ•ด ๋‹ค์šด๋กœ๋“œํ•˜๋ฉฐ, ๊ณ ๋ฃจํ‹ด ์›Œ์ปค ํ’€์„ ์ด์šฉํ•ด ๋ณ‘๋ ฌ๋กœ ์กฐ๊ฐ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ๋’ค ์ง€์ •ํ•œ ๊ฒฝ๋กœ์— ์›๋ณธ ํŒŒ์ผ์„ ๋ณต์›ํ•˜๊ณ , ์„ฑ๊ณต ์‹œ ๊ด€๋ จ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์กฐ๊ฐ ํŒŒ์ผ์„ ์‚ญ์ œํ•œ๋‹ค. ๋‹ค์šด๋กœ๋“œ ๊ณผ์ •์—์„œ๋Š” Rclone ๋ช…๋ น์„ ์ปค๋งจ๋“œ๋กœ ์‹คํ–‰ํ•˜์—ฌ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ณ , ์ „์†ก ์†๋„(throughput)๋ฅผ ๊ณ„์‚ฐํ•ด ํ•ด๋‹น ์›๊ฒฉ์ง€ ์„ฑ๋Šฅ ์ •๋ณด๋„ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋™์‹œ ์ž‘์—…์„ ์œ„ํ•ด sync.WaitGroup, sync.Mutex๋ฅผ ์‚ฌ์šฉํ•ด ๊ณ ๋ฃจํ‹ด ๊ฐ„ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ž‘์—… ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ์— ์ˆ˜์ง‘ํ•˜์—ฌ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

dis_interaction

CLOUD_STORAGE/fs/dis_operations/dis_interaction.go

์ด ์ฝ”๋“œ๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ํ†ตํ•ด ํŒŒ์ผ ๋ฎ์–ด์“ฐ๊ธฐ, ์‚ญ์ œ, ์žฌ์—…๋กœ๋“œ, ์žฌ๋‹ค์šด๋กœ๋“œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ShowDescription_DoOverwrite์™€ ShowDescription_RemoveFile์€ ์ƒํ™ฉ๋ณ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธ์„ ์š”์ฒญํ•˜๊ณ , AskDestination์€ ๋‹ค์šด๋กœ๋“œ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ GetUserConfirmation์€ ๊ธฐ๋ณธ ์„ ํƒ์ง€์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„ ์˜ˆ/์•„๋‹ˆ์˜ค ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ DoOverwrite, DoRemove, DoReUpload, DoReDownload ํ•จ์ˆ˜๋“ค์ด ๊ฐ๊ฐ ๋ฎ์–ด์“ฐ๊ธฐ, ์‚ญ์ œ, ์žฌ์—…๋กœ๋“œ, ์žฌ๋‹ค์šด๋กœ๋“œ ๋™์ž‘์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๊ฒฐ์ •์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

dis_loadbalance

CLOUD_STORAGE/fs/dis_operations/dis_loadbalance.go

์—ฌ๋Ÿฌ ์›๊ฒฉ ์ €์žฅ์†Œ(Remote) ๊ฐ„์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ(load balancing)์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ „๋žต(RoundRobin, DownloadOptima, UploadOptima, ResourceBased)์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๊ฐ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ JSON ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์ด๋‚˜ ์ €์žฅ ๊ณต๊ฐ„ ๊ฐ™์€ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ตœ์ ์˜ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•˜๋ฉฐ, rclone ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ cobra ์ปค๋งจ๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•ด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์‚ฌ์šฉ๋Ÿ‰ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ์ปค๋งจ๋“œ(about)๋ฅผ ํ˜ธ์ถœํ•ด ๋™์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

dis_metadata

CLOUD_STORAGE/fs/dis_operations/dis_metadata.go

์ด ์ฝ”๋“œ๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ ์ €์žฅ ์‹œ์Šคํ…œ์—์„œ ๊ฐ ํŒŒ์ผ ์กฐ๊ฐ(DistributedFile)์— ๋Œ€ํ•ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ(load balancing) ์ „๋žต์„ ์‚ฌ์šฉํ•ด ์›๊ฒฉ ์ €์žฅ์†Œ(Remote)๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. FileInfo์™€ DistributedFile ๊ตฌ์กฐ์ฒด๋กœ ํŒŒ์ผ๊ณผ ๋ถ„์‚ฐ๋œ ํŒŒ์ผ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, RemoteInfo๋Š” ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ธฐ๋ก๊ณผ ์ตœ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค. AllocateRemote ๋ฉ”์„œ๋“œ๋Š” ์ง€์ •๋œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ํƒ€์ž…(RoundRobin, DownloadOptima, UploadOptima, ResourceBased ๋“ฑ)์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ถ„์‚ฐ ํŒŒ์ผ์— ํ• ๋‹นํ•œ๋‹ค.

dis_password

CLOUD_STORAGE/fs/dis_operations/dis_password.go

์ด ์ฝ”๋“œ๋Š” ์ง€์ •๋œ ๊ฒฝ๋กœ ๋‚ด ํŒŒ์ผ๋“ค์„ ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ƒ์„ฑ, ์ €์žฅ, ํ™•์ธํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จํ•œ๋‹ค. ๋จผ์ € tryGetPassword๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋žœ๋ค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ด ์ €์žฅํ•˜๊ณ , GetUserPassword๋Š” ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ์–ด์˜จ๋‹ค. EncryptAllFilesInPath์™€ DecryptAllFilesInPath ํ•จ์ˆ˜๋Š” ์ง€์ • ๊ฒฝ๋กœ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์žฌ๊ท€์ ์œผ๋กœ ์•”ํ˜ธํ™” ๋˜๋Š” ๋ณตํ˜ธํ™”ํ•˜๋ฉฐ, ๋ณตํ˜ธํ™” ์‹œ์—๋Š” ํŠน๋ณ„ํžˆ "user_password"๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ฆํ•ด ๋งž์œผ๋ฉด ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ , ํ‹€๋ฆฌ๋ฉด ๋ณตํ˜ธํ™”๋œ ์ž˜๋ชป๋œ ํŒŒ์ผ๋“ค์„ ์‚ญ์ œํ•˜์—ฌ ๋ณด์•ˆ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ filecrypt๋ฅผ ์ด์šฉํ•ด ์‹ค์ œ ์•”๋ณตํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์€ .fcef ํ™•์žฅ์ž๋ฅผ ๊ฐ–๋Š”๋‹ค.

dis_rm

CLOUD_STORAGE/fs/dis_operations/dis_rm.go

์ด ์ฝ”๋“œ๋Š” ๋ถ„์‚ฐ ์ €์žฅ๋œ ํŒŒ์ผ์˜ ์—ฌ๋Ÿฌ ์กฐ๊ฐ(DistributedFile)์„ ๋ณ‘๋ ฌ๋กœ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Dis_rm ํ•จ์ˆ˜๋Š” ์›๋ณธ ํŒŒ์ผ๋ช…์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ถ„์‚ฐ ํŒŒ์ผ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์‚ญ์ œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , startRmFileGoroutine์—์„œ ๊ฐ ๋ถ„์‚ฐ ํŒŒ์ผ ์กฐ๊ฐ๋ณ„๋กœ ๊ณ ๋ฃจํ‹ด์„ ๋„์›Œ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•œ๋‹ค. ์‚ญ์ œ๋Š” remoteCallDeleteFile ํ•จ์ˆ˜๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ cobra.Command๋กœ ์ •์˜๋œ deleteFileDefinition ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด ์ˆ˜ํ–‰ํ•˜๋ฉฐ, rclone์˜ ์›๊ฒฉ ํŒŒ์ผ ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ๋‹ค. ์‚ญ์ œ ์„ฑ๊ณต ์‹œ ๊ฐ ๋ถ„์‚ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฒดํฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , ๋ชจ๋“  ์‚ญ์ œ๊ฐ€ ๋๋‚œ ํ›„ ์›๋ณธ ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ํ•ด๋‹น ํŒŒ์ผ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์—ฌ๋Ÿฌ ์—๋Ÿฌ๋ฅผ ๋ชจ์•„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‚ญ์ œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๋„ ์ถœ๋ ฅํ•ด ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

dis_status

CLOUD_STORAGE/fs/dis_operations/dis_status.go

์ด ์ฝ”๋“œ๋Š” ๋ถ„์‚ฐ ์ €์žฅ ์ž‘์—… ์ค‘์— ๋ฏธ์™„๋ฃŒ ์ƒํƒœ(์—…๋กœ๋“œ, ๋‹ค์šด๋กœ๋“œ, ์‚ญ์ œ)๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์ƒํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ด์ „ ์ž‘์—…์„ ์ค‘๋‹จยท๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. CheckState ํ•จ์ˆ˜๋Š” ๋ฏธ์™„๋ฃŒ ์ž‘์—… ํ”Œ๋ž˜๊ทธ์™€ ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•ด, ๋งŒ์•ฝ ๋ฏธ์™„๋ฃŒ ์ž‘์—…์ด ์žˆ์œผ๋ฉด ์ƒํƒœ๋ณ„๋กœ upload, download, rm์˜ ์žฌ์‹œ๋„ ํ˜น์€ ์ค‘๋‹จ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค. ์—…๋กœ๋“œ๋‚˜ ๋‹ค์šด๋กœ๋“œ ์ค‘๋‹จ ์‹œ DumpUploadState, DumpDownloadState๋กœ ํ•ด๋‹น ์กฐ๊ฐ(์ƒค๋“œ)์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์‚ญ์ œ ์ค‘๋‹จ ์‹œ DumpRmState๋กœ ๋‚จ์€ ์กฐ๊ฐ์„ ์‚ญ์ œํ•œ๋‹ค. ์ƒค๋“œ ์‚ญ์ œ๋Š” DumpUploadShards์™€ DumpDownloadShards์—์„œ reedsolomon.DeleteShardWithFileNames ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ž‘์—… ๋ช…๋ น๊ณผ ์ธ์ž๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๋Š” checkSameCommand๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์žฌ์‹œ๋„ ์—ฌ๋ถ€ ํŒ๋‹จ์— ํ™œ์šฉ๋œ๋‹ค.

dis_upload

CLOUD_STORAGE/fs/dis_operations/dis_upload.go

์ด ์ฝ”๋“œ๋Š” Rclone์„ ํ™œ์šฉํ•ด ๋ถ„์‚ฐ ์ €์žฅ ์‹œ์Šคํ…œ์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์„ Reed-Solomon ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ƒค๋”ฉํ•˜๊ณ , ์—ฌ๋Ÿฌ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋ณ‘๋ ฌ๋กœ ๋ถ„์‚ฐ ์—…๋กœ๋“œํ•œ๋‹ค. ์—…๋กœ๋“œ ์ž‘์—…์€ ๊ณ ๋ฃจํ‹ด ์›Œ์ปค ํ’€์ด๋‚˜ ๊ฐœ๋ณ„ ๊ณ ๋ฃจํ‹ด์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฐ ์ƒค๋“œ๋ณ„ ์›๊ฒฉ ํ• ๋‹น๊ณผ ๋ณต์‚ฌ ์ž‘์—…, ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ณ„์‚ฐ ๋ฐ ์˜ค๋ฅ˜ ๊ด€๋ฆฌ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋˜ํ•œ, ์—…๋กœ๋“œ ์ „ ์›๊ฒฉ ์ €์žฅ์†Œ์— ํ•„์š”ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํŒŒ์ผ ์ค‘๋ณต ๊ฒ€์‚ฌ ๋ฐ ํ•ด์‹œ ์ด๋ฆ„ ์ƒ์„ฑ, ์—…๋กœ๋“œ ํ›„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊นŒ์ง€ ์ „์ฒด ๋ถ„์‚ฐ ์—…๋กœ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

reedsolomon

CLOUD_STORAGE/reedsolomon/streaming.go

์ด ์ฝ”๋“œ๋Š” ์›๋ณธ ํŒŒ์ผ์„ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์ž‘์€ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋Šฅ๊ณผ ๋”๋ถˆ์–ด ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ํ›„ ์›๋ณธ ํŒŒ์ผ๋กœ ๋ณต๊ตฌ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์กฐ๊ฐ ๋‚ด๋Š” ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•˜๋Š” ํ•จ์ˆ˜ ๋ฐ encode, decode๊ณผ์ • ์ค‘ ํŒŒ์ผ์— ๋Œ€ํ•œ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ์ด๋ฃจ์–ด ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. decode์ค‘ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ๋•Œ parity shard์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ์€ ์†์‹ค์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋ณต๊ตฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ์˜ ๋ณต๊ตฌ๊ฐ€ ์ด๋ฃจ์–ด ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

24-2 ~ 25-1 Capstone Project: Private Cloud Storage

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 5