Facts
✅ mypage 이미지 S3로 업로드 하기 [Flask → Spring]
Findings
Javascript에서 이미지를 입력받고 요청을 전송하고
Spring Boot에서 S3에 이미지를 저장하여 업로드 하는 코드를 작성했다.
Spring Boot에서 이미지 업로드 요청 처리를 구현할 때, 여러가지 설정과 과정이 필요했다.
1) 먼저 프론트단에서 byte형식의 파일을 보내주기 위해, Multipart/form-data 형식으로 파일을 보내준다.
2) Controller에서 MultipartFile 객체를 받는다.
3) S3 이미지 업로드 하기 위해서는 다음과 같이 구현해 주었다.
- AWS관련 속성을 적용해주기 위해, yml 파일을 설정해주고,
- 파일 처리 관련 Service를 여러개 만들어주었다.
(TilService → FileProcessService → AmazonS3Service)
S3이미지 업로드 하기위해, FileProcessService 뿐만 아니라, AmazonS3Service를 만들어준 이유는 다음과 같다. 파일 이미지 업로드 할 때, S3 이미지 업로드 뿐만 아니라, 다양한 형식의 파일 업로드 전략을 가진 구현체를 만들 수 있게 하기 위해, 분리해주었다.
Problem
- 문제가 발생했다. 🤔
프로젝트를 Flask/Python → Spring/Java로 바꿔주면서,
S3와 CloudFront를 이용한 사진 업로드 구현의 속도가 느려졌다. - 먼저, 문제의 원인을 파악해보자.
- S3 이미지 업로드 기능을 위한 Python 라이브러리는 Boto3를 사용해주었다.
현재, S3 이미지 업로드 기능을 위한 Java 라이브러리는 amazonS3.putObject()가 있어 이것으로 변경해주었다.- 둘의 라이브러리의 속도차이가 왜 날까?
- 성능 개선을 위해, 서비스의 핵심 API 호출 시간을 줄이기 위해서 어떻게 하면 좋을까?
- 멀티 스레딩 기술의 유무 차이로 추측이 되는데, 둘의 라이브러리의 원리를 분석해서, 문제의 원인을 파악해봐야겠다.
- S3 이미지 업로드 기능을 위한 Python 라이브러리는 Boto3를 사용해주었다.
- 원인을 분석한 후, API 호출 시간을 줄여보자.
'Project > TIL, WIL' 카테고리의 다른 글
TIL(46) 21-12-06: S3와 CloudFront로 프론트엔드 인프라 구성하기 (0) | 2021.12.27 |
---|---|
TIL(45) 21-12-03 : Spring에서 게시글 Pagination 처리하기 (0) | 2021.12.27 |
TIL(43) 21-11-28 : Spring Secruity 사용하여, 인증 인가 구현하기 (0) | 2021.12.25 |
TIL(42) 11/22 - 11/27 : TDP 사이트 Flask 👉🏻 Spring (0) | 2021.12.22 |
TIL(41) 21-11-20 : 조회수, comment 기능 구현 (Flask) (0) | 2021.11.20 |