AWS S3를 Local Drive처럼 사용하기

Donghoon Nam
원티드랩 기술 블로그
6 min readJun 12, 2020

배경

원티드 프론트 팀이 하는 업무 중 S3에 static 파일들을 업로드 하는 것도 포함이 되어 있습니다.

그러나 S3를 사용하는 것에 대해 불편한 점들이 있다보니 불편한 점을 해결하고, 관리하는 것에 쓰는 시간적 비용을 줄일 방법을 찾아 팀원들에게 공유해주고 싶었습니다.

이슈 파악

우선 현재는 이미지를 업로드 하기 위해서 두 가지 방식 중 하나를 선택해야 했습니다.

  1. https://console.aws.amazon.com/ 으로 접근하여 s3에 업로드 한다.
  2. 유료버전으로 사용한다.
    - https://cloudmounter.net/amazon-s3-client.html
    - https://www.expandrive.com/s3-browser-for-mac/

console에서 사용하는 S3의 단점을 몇가지 나열하자면
1. 디렉토리 단위로 다운을 받을 수 없었습니다.
2. 멀티 셀렉트를 하여 다운로드/삭제를 할 수 없었습니다.
3. 로컬 파일을 드래그하거나 선택해서 S3에 올리고 public-read로 올릴건지 말건지 선택해야하는 번거로움이 있었습니다.

그리고 S3에 static파일을 관리하는 것에 비용을 들이고 싶지 않았습니다.

발견

위의 단점들을 해결하려면 직접 만들거나 만들어진걸 수정하는 것에 대해서 고민을 하다가 mount를 해서 해결 할 수 있지 않을까 하는 생각이 들어 관련 자료를 찾아 보게 되었습니다.

해서 발견한 자료는 아래와 같습니다.

https://github.com/s3fs-fuse/s3fs-fuse
https://github.com/kahing/goofys

먼저 s3fs-fuse로 mount를 시키고 탐색기(finder)를 실행한 결과는…

로딩이 멈추지 않았습니다…
원인을 찾다 보니 아래와 같은 글을 발견하게 되었습니다.

결론은 s3fs-fuse보다 goofys가 더 빠르다고 말이죠.

그래서 goofys로 방향을 선회해 시도하게 되었습니다.

goofys 설정

위에 되어 있는 대로 brew로 설치 진행~

$ brew cask install osxfuse
$ brew install goofys

그리고 저희 팀에서 올리는 static 파일의 조건은 아래와 같았습니다.

  1. public-read로 올려야 한다
  2. content-type(image, html, css, js, pdf등…)을 유지해야 한다.
  3. 어느 계정으로 올리건지에 대한 aws profile을 지정할 수 있어야한다.
  4. s3파일 변경시 로그가 쌓여야 한다.

찾아 보니 옵션들도 친절하게 다 제공을 해주고 있었습니다.

$ goofys

실행하면 사용방법과 옵션들이 나오는데 저한테 필요한 옵션은 위의 두 가지 이기 때문에 그 내용만 올려놓았습니다.

…..
GLOBAL OPTIONS:

— profile value Use a named profile from $HOME/.aws/credentials instead of “default”

— use-content-type Set Content-Type according to file extension and /etc/mime.types (default: off)
….
AWS S3 OPTIONS:
— acl value The canned ACL to apply to the object. Possible values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control (default: off)

MISC OPTIONS:
— debug_s3 Enable S3-related debugging output.
-f Run goofys in foreground.

옵션들을 봤으니 아래와 같이 실행하면 mount가 실행이 됩니다.

$ goofys \             # command
-f \ # execute foreground
--acl public-read \ # public-read
--use-content-type \ # use current content-type
--debug_s3 \ # debug log
bucket_name \ # s3 bucket name
~/s3 # 마운트 될 local 경로

-f 옵션을 썼으니 mount가 성공했는지 mount를 종료했는지를 알 수 있습니다.

성공이 되었으면 탐색기에서 다음과 같은 디렉토리를 확인하실 수 있습니다.
드디어 S3 mount가 되어 탐색기에서 S3를 사용할 수 있게 되었습니다.
사용해보니 탐색기에서는 S3 디렉토리는 보이는데 파일을 볼 수 없었습니다.
이유를 찾지 못하다가 double commander라는 것을 설치해서 사용하면 괜찮지 않을까라는 말도 안되는 추측을 하고 설치를 해서 사용해 본 결과

* brew로 설치해 주셔도 됩니다.

$ brew install double-commander

굉장히 잘되었습니다.
위 명령어로 실행한 local 경로로 잘 연동되었습니다.

마무리

팀 분들이 불편한 S3를 사용할때 마다 어떻게 해야 편하게 사용하게 해드릴 수 있을까 고민을 했는데 비용도 들이지 않고 처리할 수 있게 되어서 기분이 좋습니다.

그리고 위에 진행한 내용들을 토대로 설치 스크립트를 만들어 자동화 하려고 합니다.

S3사용에 대한 고민이 많으신 분들에게 도움이 되었으면 좋겠습니다~.

--

--