[Node.js] AWS EC2 배포시 S3 파일 업로드 에러

moongyu·2021년 8월 26일
0

Node.js

목록 보기
1/1
post-thumbnail

개발 환경

현재 Node.js의 대표 프레임워크인 Express를 활용하여 웹서버를 개발중이다. 배포를 위해 AWS의 EC2를 사용하고 있고, 탄력적 IP를 할당받아 가비아에서 구매한 도메인에 연결해두었다.

현재 개발중인 웹사이트는 주로 동영상 파일을 다루는 플랫폼이기 때문에 저장해두어야할 파일이 많다. 따라서 AWS의 S3를 사용하여 파일들을 관리하고 있다.


에러 사항

로컬 환경에서 개발할 때는 잘 돌아가던 코드들도, 배포 후에 여기저기서 문제가 발생하는 경우가 많았다.

1. S3 파일 업로드 권한 문제

처음에는 프론트엔드에서 바로 S3로 파일을 업로드할 수 있도록 코드를 작성했다. 로컬 환경에서는 문제가 없었으나, 배포 후 도메인에 접속해서 업로드할 때 권한 문제로 S3 버킷에 접근이 불가능한 에러가 발생했다.
당연하게도 S3에 public write가 가능하다면 보안상의 문제가 발생할 것이다.

→ 💎 사용자가 업로드한 파일을 먼저 서버에 저장한 후, 서버에서 S3에 putObject하는 방식으로 해결했다. S3에 업로드한 후 서버 로컬에 저장되어 있는 파일은 삭제해서 EC2 용량에도 문제가 없도록 처리해주었다.

2. S3 업로드 파일 용량 문제

S3 권한 문제 해결 후, 프로그램이 잘 돌아갈 것이라고 확신하고 재배포했는데, 다른 팀원들이 업로드를 시도해본 결과 업로드 중 서버가 멈춰버리는 에러가 발생했다.😭 콘솔에 출력되는 에러 메세지를 열심히 구글링해보고, 네트워크 환경, EC2 및 S3 접근 권한 등등 다방면에서 고민해봤지만 문제를 해결하기가 쉽지 않았다.

→ 💎 결과적으로는 단순 EC2 사양 문제였다. 즉 자본이 해결해줬다..
당시 AWS 프리티어에서 제공되는 EC2 인스턴스를 사용하고 있었고, vCPU 1개, RAM이 1GiB였다. 그런데 앞서 말했다시피 파일을 서버에 먼저 저장한 후 S3에 보내는 방식으로 동작하는데, 대용량 파일을 업로드 하는 경우 업로드하는 동안 부하가 많이 발생해 다른 처리가 불가능하여 서버가 먹통이 되어버리는 문제가 발생했다. EC2 사양을 업그레이드해주는 방법을 통해 문제를 해결했다. 현재 t2.medium 유형의 인스턴스를 사용중이며, vCPU 2개, RAM은 4GiB이다. 웬만한 동영상 파일들을 업로드하는데는 문제가 없지만, 그래도 안전하게 300MB로 업로드 파일 용량을 제한해두었다.


느낀점

배포 과정에서 고려해야하는 환경 변수가 많았고, EC2 보안 그룹이나 S3 접근 권한 등 설정해줘야하는 것들이 많다 보니 오류가 발생했을 때 어느 부분이 문제인지 파악하는 것이 쉽지 않았다.
EC2 사양 문제 같은 경우에는 사실 굉장히 근본적인 문제였음에도 불구하고, 코드 수정 등 다른 부분에서 삽질을 너무 많이 했다. 아마 다른 개발자분이 조언을 안 해주셨으면 또 한참 헤맸을 것 같다.
덕분에 웹 개발을 계속해나가려면 네트워크나 서버 환경에 대한 이론적인 공부도 반드시 필요할 것 같다는 생각이 들었다.
원하는 결과물을 구현해내는 것도 물론 중요하지만, 그 과정을 더욱 빠르고 튼튼하게 하려면 내가 개발하려는 분야에 대한 깊이 있는 공부가 꼭 수반되어야 할 것 같다. 앞으로 차근차근 공부해나가면서 넓은 시야를 가질 수 있도록 노력해야겠다.

profile
개발 블로그 (●'◡'●)

0개의 댓글