Amazon S3에서 폴더 이름 바꾸는 방법이 없나요?

Amazon S3에서 폴더의 이름을 바꾸기 위한 방법을 알아보는 블로그입니다.
2023.08.21

안녕하세요 DA사업본부의 송영진입니다.

오늘은 S3에서 폴더의 이름을 바꾸는 방법에 대해 알아보겠습니다.

간단해보이는 내용이지만 특정 버켓의 폴더에 오브젝트들을 업로드 한 뒤에 폴더의 이름을 변경해서 사용 할 필요가 있었기 때문에 그 방법을 알아보다가 의문을 갖게 되었기 때문에 블로그를 작성하게 되었습니다.

결론부터 말씀드리자면 Amazon S3에서 폴더의 이름을 바꾸는 방법은 없습니다.

S3에는 폴더라는 개념이 없기 때문인데요, 그럼 S3에서 폴더라고 나오는 것은 무엇일까요? 이에 관한 이야기는 都元ダイスケ님의 블로그를 참조하시면 쉽게 이해 하실 수 있습니다.

엥? 그럼 어떻게 해야하나요?

그냥 다른 파일들처럼 콘솔에서 객체 이름 변경하면 되는거 아닌가? 라는 생각으로 관리 콘솔을 열어보았습니다.

폴더 유형으로는 객체 이름 바꾸기 버튼이 활성화되어있지 않았네요...

그래서 결국 해답이 무엇이냐? 새로운 폴더를 만들어서 내부의 오브젝트들을 옮기는 것입니다.

너무 번거롭지 않나 생각이 들지만 이게 어쩔 수가 없네요... 폴더 내부에 파일이 대량으로 있을 때에는 옮기는 방법에도 수고가 들어가게 됩니다.

만약 폴더 내부에 파일이 999개 이상 일 때에는 관리 콘솔에 한 번에 999+라고 나오면서 제대로 표시가 되지도 않죠 ㅠㅠ

AWS CLI를 사용하여 한 번에 옮기기

그런 경우를 위해서 CLI를 지원하며 한 줄의 명령어로 폴더의 내부를 다른 폴더로 쉽게 옮기는 방법이 존재합니다.

aws s3 mv s3://source-bucket/source-folder/ s3://target-bucket/target-folder/ --recursive

위와 같은 명령어를 사용하여 source-folder라는 이름의 폴더 내부에 있는 모든 오브젝트를 target-folder라는 이름의 폴더로 이동시켰습니다 mv라는 명령어입니다.

복사를 하고 싶을 때에는 mv대신 cp라는 명령어를 사용합니다

각각 move와 copy의 의미가 되겠습니다.

터미널같은 곳에서 사용하는 쉘에서 주로 사용하는 명령어가 이 mv인데요 소스에서 타겟으로 하나의 오브젝트를 옮기는 명령어입니다.

여기서 --recursive라는 옵션을 추가하여 폴더 안에 있는 모든 오브젝트까지 옮겨야 할 대상으로 취급하게 됩니다.

AWS CLI의 공식 문서에서 다양한 명령어와 옵션들에 대한 설명이 있으니 어떤게 있는지 확인해보시는 것도 도움이 됩니다.

마지막으로

위와 같은 방법으로 S3에서 폴더 이름을 변경하는 직접적인 방법은 아니지만 새로운 폴더를 작성하여 옮기는 방법에 대해 알아보았습니다. S3는 파일 시스템처럼 보이지만 이름 그대로 간단한 스토리지 서비스입니다. 따라서 파일 시스템에 바라는 이런저러한 기능이 없을 수도 있죠.

개인적으로는 업로드 경로를 실수했을 때 오브젝트를 위와 같은 방법으로 옮길 때에는 어느정도 크기의 파일들까지는 AWS 내부의 통신이기 때문에 빠르게 완료가 가능하지만 용량이 수백 기가바이트 단위 이상으로 커지는 경우 시간이 상당하게 들기 때문에 꼭 추가해줬으면 하는 기능입니다.

여러분들께 도움이 되길 바라면서 이만 마치겠습니다. 감사합니다!