Website | Documentation | Download | Contributing | Changelog | Installation | Forum
๋ค์ํ Public Cloud Storage ์๋น์ค๋ค์ ์ฐ๋์์ผ์ ํ์ผ ์
๋ก๋๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์คํ์์ค
Rclone์ ๋ํ ์์ธํ ์ ๋ณด๋ ์ ๋งํฌ ์ฐธ์กฐ ๋ถํ๋๋ฆฝ๋๋ค.
Rclone ์ด ์ง์ํ๋ Public Cloud Storage ๋ชฉ๋ก๋ค the full list of all storage providers and their features
git clone https://github.com/HandongSF/cloud_storage.git
์ค์น https://go.dev/dl/
brew install go
์ค์น ํ์ธ
go version
ํด๋ก ์๋ฃํ ํด๋ ์ด๋ ํ 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
rclone config ๋ช ๋ น์ด ์คํ ํ ์๋ด๋๋ ์ฌํญ์ ๋ฐ๋ผ์ ์งํํ์๋ฉด ๋ฉ๋๋ค.
rclone config
rclone dis_upload [ํ์ผ๊ฒฝ๋ก] -b [์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ]
์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ : RoundRobin, ResourceBased, DownloadOptima, UploadOptima ์ค ํ 1(๋์๋ฌธ์ ์๊ด ์์ต๋๋ค)
rclone dis_download [ํ์ผ ์ด๋ฆ] [๋ค์ด ๋ฐ์ ๋ก์ปฌ ์์น ๊ฒฝ๋ก]
rclone dis_ls
rclone dis_rm [ํ์ผ ์ด๋ฆ]
rclone dis_config [๋ณต์ฌํด์จ ์ค์ ํ์ผ์ ์ฃผ์]
CLOUD_STORAGE/cmd/dis_config/dis_config_upload.go
๋ด์ฉ: CLI์์ ์คํ ๊ฐ๋ฅํ dis_config ๋ช ๋ น์ด ์ ์
CLOUD_STORAGE/cmd/dis_download/dis_download.go
๋ด์ฉ: CLI์์ ์คํ ๊ฐ๋ฅํ dis_download ๋ช ๋ น์ด ์ ์
CLOUD_STORAGE/cmd/dis_ls/dis_ls.go
๋ด์ฉ: CLI์์ ์คํ ๊ฐ๋ฅํ dis_ls ๋ช ๋ น์ด ์ ์
CLOUD_STORAGE/cmd/dis_rm/dis_rm.go
๋ด์ฉ: CLI์์ ์คํ ๊ฐ๋ฅํ dis_rm ๋ช ๋ น์ด ์ ์
CLOUD_STORAGE/cmd/dis_upload/dis_upload.go
๋ด์ฉ: CLI์์ ์คํ ๊ฐ๋ฅํ dis_upload ๋ช ๋ น์ด ์ ์
CLOUD_STORAGE/fs/dis_operations/datamap.go
์ด dis_operations ํจํค์ง๋ ๋ก์ปฌ์ ์ ์ฅ๋ datamap.json ํ์ผ์ ํตํด ์๋ณธ ํ์ผ๊ณผ ๊ทธ์ ๋์ํ๋ ๋ถ์ฐ ํ์ผ๋ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์กฐํ, ๊ฐฑ์ ํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ผ๋ก๋ SHA-256 ๊ธฐ๋ฐ ์ฒดํฌ์ฌ ๊ณ์ฐ์ ํตํ ํ์ผ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ, ์๋ณธ ํ์ผ์ ์ด๋ฆ, ํฌ๊ธฐ, ํจ๋ฉ, ์กฐ๊ฐ ์ ๋ฑ์ ์ ๋ณด์ ๊ฐ ๋ถ์ฐ ํ์ผ์ ์ ์ฅ ์์น(Remote), ์ฒดํฌ ์ฌ๋ถ ๋ฑ์ ๊ตฌ์กฐ์ฒด๋ก ๊ธฐ๋กํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ, ์์ ์ํ(upload, delete ๋ฑ)์ ๋น์ ์ ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ์ถ์ ํ๋ ํ๋๊ทธ ์์คํ , ์์ ๋์ค ์ค๋จ๋ ๊ฒฝ์ฐ ์ด์ด๋ฐ๊ธฐ ์ํ ๋ถ์ฐ ํ์ผ ์กฐํ, ํน์ ํ์ผ ์ ๋ณด ์ญ์ ๋ฐ ์ด๊ธฐํ ๋ฑ์ ์กฐ์์ด ํฌํจ๋๋ค. ๋ํ ํ์ผ ์ด๋ฆ๊ณผ ํด์ ๊ฐ ๋งคํ, ์์ ๋์ค ๋จ์ ๋ฏธ์๋ฃ ๋ถ์ฐ ํ์ผ ๋ชฉ๋ก ํ์ธ, ๊ฐ ์กฐ๊ฐ์ ์ฒดํฌ ์ํ ๋ฐ ์ ์ฅ ์์น๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์๋๋ก ์ง์ํ๋ฉฐ, ์ ์ฒด JSON ํ์ผ ์ ์ถ๋ ฅ์ ๋ํด ๋๊ธฐํ๋ฅผ ์ํด ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ฑ ์ ์ด๋ ์ํํ๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_download.go
์ด ์ฝ๋๋ Rclone ๊ธฐ๋ฐ ๋ถ์ฐ ์ ์ฅ ์์คํ ์์ ๋ถ์ฐ ํ์ผ๋ค์ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ๊ณ Reed-Solomon ๋ณต์์ ํตํด ์๋ณธ ํ์ผ์ ์ฌ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. Dis_Download ํจ์๋ ๋ค์ด๋ก๋ ์์ ์ ์์์ ์ผ๋ก, ์ํ ํ๋๊ทธ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํ์ ์ ๋ฏธ์๋ฃ๋ ํ์ผ ์กฐ๊ฐ๋ง์ ์ ํํด ๋ค์ด๋ก๋ํ๋ฉฐ, ๊ณ ๋ฃจํด ์์ปค ํ์ ์ด์ฉํด ๋ณ๋ ฌ๋ก ์กฐ๊ฐ ํ์ผ์ ๋ค์ด๋ก๋ํ ๋ค ์ง์ ํ ๊ฒฝ๋ก์ ์๋ณธ ํ์ผ์ ๋ณต์ํ๊ณ , ์ฑ๊ณต ์ ๊ด๋ จ ํ๋๊ทธ๋ฅผ ์ด๊ธฐํํ๊ณ ์กฐ๊ฐ ํ์ผ์ ์ญ์ ํ๋ค. ๋ค์ด๋ก๋ ๊ณผ์ ์์๋ Rclone ๋ช ๋ น์ ์ปค๋งจ๋๋ก ์คํํ์ฌ ์๊ฒฉ ์ ์ฅ์์์ ํ์ผ์ ๊ฐ์ ธ์ค๊ณ , ์ ์ก ์๋(throughput)๋ฅผ ๊ณ์ฐํด ํด๋น ์๊ฒฉ์ง ์ฑ๋ฅ ์ ๋ณด๋ ๊ฐฑ์ ํ๋ค. ๋์ ์์ ์ ์ํด sync.WaitGroup, sync.Mutex๋ฅผ ์ฌ์ฉํด ๊ณ ๋ฃจํด ๊ฐ ๋๊ธฐํ๋ฅผ ์ํํ๋ฉฐ, ์์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฆฌ์คํธ์ ์์งํ์ฌ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_interaction.go
์ด ์ฝ๋๋ ๋ถ์ฐ ํ์ผ ์์คํ ์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ํตํด ํ์ผ ๋ฎ์ด์ฐ๊ธฐ, ์ญ์ , ์ฌ์ ๋ก๋, ์ฌ๋ค์ด๋ก๋ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ShowDescription_DoOverwrite์ ShowDescription_RemoveFile์ ์ํฉ๋ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ฌ์ฉ์์๊ฒ ํ์ธ์ ์์ฒญํ๊ณ , AskDestination์ ๋ค์ด๋ก๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก GetUserConfirmation์ ๊ธฐ๋ณธ ์ ํ์ง์ ํจ๊ป ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ์/์๋์ค ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก DoOverwrite, DoRemove, DoReUpload, DoReDownload ํจ์๋ค์ด ๊ฐ๊ฐ ๋ฎ์ด์ฐ๊ธฐ, ์ญ์ , ์ฌ์ ๋ก๋, ์ฌ๋ค์ด๋ก๋ ๋์์ ๋ํ ์ฌ์ฉ์ ๊ฒฐ์ ์ ๋ฐํํ๋ ์ญํ ์ ์ํํ๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_loadbalance.go
์ฌ๋ฌ ์๊ฒฉ ์ ์ฅ์(Remote) ๊ฐ์ ๋ถํ ๋ถ์ฐ(load balancing)์ ์ํด ๋ค์ํ ์ ๋ต(RoundRobin, DownloadOptima, UploadOptima, ResourceBased)์ ๊ตฌํํ๋ฉฐ, ๊ฐ ์๊ฒฉ ์ ์ฅ์์ ์ํ ์ ๋ณด๋ฅผ JSON ํ์ผ๋ก ๊ด๋ฆฌํ๋ค. ์๊ฒฉ ์ ์ฅ์์ ์ฒ๋ฆฌ๋์ด๋ ์ ์ฅ ๊ณต๊ฐ ๊ฐ์ ์ฑ๋ฅ ์งํ๋ฅผ ์์งํ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ต์ ์ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ ํํ๋ฉฐ, rclone ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ cobra ์ปค๋งจ๋ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํด ์๊ฒฉ ์ ์ฅ์์ ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ์กฐํํ๋ ์ปค๋งจ๋(about)๋ฅผ ํธ์ถํด ๋์ ์ผ๋ก ์ํ๋ฅผ ๊ฐฑ์ ํ๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_metadata.go
์ด ์ฝ๋๋ ๋ถ์ฐ ํ์ผ ์ ์ฅ ์์คํ ์์ ๊ฐ ํ์ผ ์กฐ๊ฐ(DistributedFile)์ ๋ํด ๋ถํ ๋ถ์ฐ(load balancing) ์ ๋ต์ ์ฌ์ฉํด ์๊ฒฉ ์ ์ฅ์(Remote)๋ฅผ ํ ๋นํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. FileInfo์ DistributedFile ๊ตฌ์กฐ์ฒด๋ก ํ์ผ๊ณผ ๋ถ์ฐ๋ ํ์ผ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, RemoteInfo๋ ์ ๋ก๋ ๋ฐ ๋ค์ด๋ก๋ ์ฒ๋ฆฌ๋ ๊ธฐ๋ก๊ณผ ์ต๋ ์ฒ๋ฆฌ๋ ๊ณ์ฐ ๊ธฐ๋ฅ์ ํฌํจํ๋ค. AllocateRemote ๋ฉ์๋๋ ์ง์ ๋ ๋ถํ ๋ถ์ฐ ํ์ (RoundRobin, DownloadOptima, UploadOptima, ResourceBased ๋ฑ)์ ๋ฐ๋ผ ์ ์ ํ ์๊ฒฉ ์ ์ฅ์๋ฅผ ์ ํํ์ฌ ๋ถ์ฐ ํ์ผ์ ํ ๋นํ๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_password.go
์ด ์ฝ๋๋ ์ง์ ๋ ๊ฒฝ๋ก ๋ด ํ์ผ๋ค์ ์ํธํ ๋ฐ ๋ณตํธํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ์์ฑ, ์ ์ฅ, ํ์ธํ๋ ๋ก์ง์ ํฌํจํ๋ค. ๋จผ์ tryGetPassword๋ ๋น๋ฐ๋ฒํธ ํ์ผ์ด ์์ผ๋ฉด ๋๋ค ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํด ์ ์ฅํ๊ณ , GetUserPassword๋ ์ ์ฅ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฝ์ด์จ๋ค. EncryptAllFilesInPath์ DecryptAllFilesInPath ํจ์๋ ์ง์ ๊ฒฝ๋ก์ ๋ชจ๋ ํ์ผ์ ์ฌ๊ท์ ์ผ๋ก ์ํธํ ๋๋ ๋ณตํธํํ๋ฉฐ, ๋ณตํธํ ์์๋ ํน๋ณํ "user_password"๋ฅผ ํฌํจํ๋ ํ์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฒ์ฆํด ๋ง์ผ๋ฉด ์ํธํ๋ ํ์ผ์ ์ญ์ ํ๊ณ , ํ๋ฆฌ๋ฉด ๋ณตํธํ๋ ์๋ชป๋ ํ์ผ๋ค์ ์ญ์ ํ์ฌ ๋ณด์์ ์ ์งํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ filecrypt๋ฅผ ์ด์ฉํด ์ค์ ์๋ณตํธํ๋ฅผ ์ํํ๋ฉฐ, ์ํธํ๋ ํ์ผ์ .fcef ํ์ฅ์๋ฅผ ๊ฐ๋๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_rm.go
์ด ์ฝ๋๋ ๋ถ์ฐ ์ ์ฅ๋ ํ์ผ์ ์ฌ๋ฌ ์กฐ๊ฐ(DistributedFile)์ ๋ณ๋ ฌ๋ก ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. Dis_rm ํจ์๋ ์๋ณธ ํ์ผ๋ช ์ผ๋ก ๋ฉํ๋ฐ์ดํฐ์ ๋ถ์ฐ ํ์ผ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ ์ญ์ ํ๋๊ทธ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , startRmFileGoroutine์์ ๊ฐ ๋ถ์ฐ ํ์ผ ์กฐ๊ฐ๋ณ๋ก ๊ณ ๋ฃจํด์ ๋์ ์๊ฒฉ ์ ์ฅ์์์ ํ์ผ์ ์ญ์ ํ๋ค. ์ญ์ ๋ remoteCallDeleteFile ํจ์๊ฐ ๋ด๋ถ์ ์ผ๋ก cobra.Command๋ก ์ ์๋ deleteFileDefinition ๋ช ๋ น์ด๋ฅผ ์คํํด ์ํํ๋ฉฐ, rclone์ ์๊ฒฉ ํ์ผ ์ญ์ ๊ธฐ๋ฅ์ ํ์ฉํ๋ค. ์ญ์ ์ฑ๊ณต ์ ๊ฐ ๋ถ์ฐ ํ์ผ์ ๋ํ ์ฒดํฌ ํ๋๊ทธ๋ฅผ ๊ฐฑ์ ํ๊ณ , ๋ชจ๋ ์ญ์ ๊ฐ ๋๋ ํ ์๋ณธ ํ์ผ ๋ฉํ๋ฐ์ดํฐ์์ ํด๋น ํ์ผ ์ ๋ณด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์๋ฌ ๋ฐ์ ์ ์ฌ๋ฌ ์๋ฌ๋ฅผ ๋ชจ์ ๋ฐํํ๊ณ , ์ญ์ ์ฒ๋ฆฌ ์๊ฐ๋ ์ถ๋ ฅํด ์์ ์งํ ์ํฉ์ ์ ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_status.go
์ด ์ฝ๋๋ ๋ถ์ฐ ์ ์ฅ ์์ ์ค์ ๋ฏธ์๋ฃ ์ํ(์ ๋ก๋, ๋ค์ด๋ก๋, ์ญ์ )๊ฐ ์์ผ๋ฉด ๊ทธ ์ํ์ ๋ฐ๋ผ ์ ์ ํ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ด์ ์์ ์ ์ค๋จยท๋ณต๊ตฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. CheckState ํจ์๋ ๋ฏธ์๋ฃ ์์ ํ๋๊ทธ์ ์ํ๋ฅผ ๊ฒ์ฌํด, ๋ง์ฝ ๋ฏธ์๋ฃ ์์ ์ด ์์ผ๋ฉด ์ํ๋ณ๋ก upload, download, rm์ ์ฌ์๋ ํน์ ์ค๋จ ์ฒ๋ฆฌ ๋ก์ง์ ์คํํ๋ค. ์ ๋ก๋๋ ๋ค์ด๋ก๋ ์ค๋จ ์ DumpUploadState, DumpDownloadState๋ก ํด๋น ์กฐ๊ฐ(์ค๋)์ ์ญ์ ํ๊ฑฐ๋ ์ํ๋ฅผ ์ด๊ธฐํํ๊ณ , ์ญ์ ์ค๋จ ์ DumpRmState๋ก ๋จ์ ์กฐ๊ฐ์ ์ญ์ ํ๋ค. ์ค๋ ์ญ์ ๋ DumpUploadShards์ DumpDownloadShards์์ reedsolomon.DeleteShardWithFileNames ํจ์๋ฅผ ํธ์ถํด ์ํํ๋ฉฐ, ์์ ๋ช ๋ น๊ณผ ์ธ์๊ฐ ๋์ผํ์ง ํ์ธํ๋ checkSameCommand๋ ํฌํจ๋์ด ์์ด ์ฌ์๋ ์ฌ๋ถ ํ๋จ์ ํ์ฉ๋๋ค.
CLOUD_STORAGE/fs/dis_operations/dis_upload.go
์ด ์ฝ๋๋ Rclone์ ํ์ฉํด ๋ถ์ฐ ์ ์ฅ ์์คํ ์ ํ์ผ์ ์ ๋ก๋ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉฐ, ์ ๋ ฅ๋ฐ์ ํ์ผ์ Reed-Solomon ์ธ์ฝ๋ฉ์ผ๋ก ์ค๋ฉํ๊ณ , ์ฌ๋ฌ ์๊ฒฉ ์ ์ฅ์์ ๋ณ๋ ฌ๋ก ๋ถ์ฐ ์ ๋ก๋ํ๋ค. ์ ๋ก๋ ์์ ์ ๊ณ ๋ฃจํด ์์ปค ํ์ด๋ ๊ฐ๋ณ ๊ณ ๋ฃจํด์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ๊ฐ ์ค๋๋ณ ์๊ฒฉ ํ ๋น๊ณผ ๋ณต์ฌ ์์ , ์ฒ๋ฆฌ๋ ๊ณ์ฐ ๋ฐ ์ค๋ฅ ๊ด๋ฆฌ๋ฅผ ํฌํจํ๋ค. ๋ํ, ์ ๋ก๋ ์ ์๊ฒฉ ์ ์ฅ์์ ํ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ํ์ผ ์ค๋ณต ๊ฒ์ฌ ๋ฐ ํด์ ์ด๋ฆ ์์ฑ, ์ ๋ก๋ ํ ์ํ ์ ๋ฐ์ดํธ๊น์ง ์ ์ฒด ๋ถ์ฐ ์ ๋ก๋ ํ๋ก์ธ์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
CLOUD_STORAGE/reedsolomon/streaming.go
์ด ์ฝ๋๋ ์๋ณธ ํ์ผ์ ์ ๋ก๋๋ฅผ ์ํ ์์ ํ์ผ๋ก ๋๋๋ ๊ธฐ๋ฅ๊ณผ ๋๋ถ์ด ๋ค์ ๋ค์ด๋ก๋ ํ ์๋ณธ ํ์ผ๋ก ๋ณต๊ตฌ ํ ๋ ์ฌ์ฉ๋๋ ํจ์๋ค์ด ์์ต๋๋ค. ํ์ผ ํฌ๊ธฐ์ ๋ฐ๋ผ ์กฐ๊ฐ ๋ด๋ ๊ฐ์๋ฅผ ์ ํ๋ ํจ์ ๋ฐ encode, decode๊ณผ์ ์ค ํ์ผ์ ๋ํ ์ํธํ์ ๋ณตํธํ๊ฐ ์ด๋ฃจ์ด ์ง๊ณ ์์ต๋๋ค. decode์ค ๋ค์ด๋ก๋ ๋ฐ์ ๋ parity shard์ ๊ฐ์๋ณด๋ค ๋ง์ ์์ค์ด ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ ํ์ผ์ ๋ณต๊ตฌ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉฐ ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ํ์ผ์ ๋ณต๊ตฌ๊ฐ ์ด๋ฃจ์ด ์ง ์ ์์ต๋๋ค.