본문 바로가기
Engineering/Script, Coding

flask : boto3 활용하여 AWS S3에 file upload URL(presigned_post) 응답주는 web server 구현하기

by 알탱2 2021. 9. 3.
반응형

  검증해야할 Application Server에서 Client에서 upload하는 file을 AWS S3 Bucket에 넣어 관리하고자 하는 요구사항이 있었다. 해당 Application Server에서는 아래와 같은 시나리오로 upload API를 구현하게 되었다.

(아래 그림에서 "flask web server" 부분이 실제 Application Server 위치에 해당함)

 

flask web server - AWS S3 presigned

 

 

  그렇게 구현된 Server의 Client Application도 검증 대상이었는데, Client <-> Server 간에 발생할 수 있는 API 단위별 검증을 위해 종종 미리 정해둔 응답을 주도록 dummy server를 만들어서 Client Application을 검증하는 경우가 있어서 위 시나리오로 추가된 API에 대한 부분도 작업을 해두어야 했다. 기존에는 주로 미리 정해진 text 형태의 request - response 데이터를 처리하는 수준이었는데, 실제 AWS S3 Bucket을 연동하는 과정에서 꽤 많은 삽질을 하게 되었다. AWS에 대한 이해도 지금보다 많이 부족한 상태였고, Coding 숙련도도 낮은 상황이라 구글링을 많이 했던 기억이 있다.

 

  처음엔 Server Application 소스를 참고해서 구현하면 되겠다 생각하였으나, flask를 사용하여 관리하고 있던 dummy server와 사용하는 라이브러리나 Application 구조가 달라서 그 방법은 포기하게 되었다. (소스를 활용하는 방법이 있었을 수도 있겠지만, Coding 숙련도가 낮은 나로서는 포기가 더 빠른 방법이었다;) 그 후, 구글링을 통해 flask에 AWS S3 연동 샘플 코드들을 검색하였으나, request에 file을 첨부하고 flask web server에서 S3에 저장하는 샘플들이 대부분이었고 upload를 위한 presigned_post 방법을 사용하는 샘플은 거의 없었다. (당시엔 관련 지식도 부족한 상태로 눈앞의 과제를 해결해야 한다는 막막함에 검색 스킬이 부족했을 수도 있었겠다는 생각이 들긴 하지만..)

 

  결론적으로 dummy server 구현에 성공하였고, 그 부분만 간략히 떼어 샘플을 정리해 보려고 한다.

 

* 포스트를 작성하는 지금 참고할만한 AWS 공식 링크를 찾게 되어 Link 를 남긴다.

  

 

Flask Web Server Source (dummy server)

 

Server 실행 시, 유의 사항

Web Server가 AWS S3 Bucket에 접근하려면 접근 가능 계정 정보가 등록되어 있어야 한다.

그 부분은 AWSCLI를 설치해서 미리 계정 정보를 등록해 놓은 후, 그 서버에서 flask web server를 실행하는 것으로 해결하였다. 접속 계정 정보를 script에 포함해도 되지만, script source는 팀 멤버들과 공유하는 정보라서 script내에 개인 접속 정보를 등록하지 않기 위해 이런 방법을 사용하였다.

 

AWSCLI 설치 방법에 대해서는 공식 홈페이지 링크를 참고하였다.

 

 

curl을 이용하여 Web Server API 호출

curl http://127.0.0.1:8888/s3url/
반응형

댓글