-
Notifications
You must be signed in to change notification settings - Fork 0
Description
이슈 배경
- OG 태그 크롤링을 통해 수집한 외부 이미지 링크는 원본 서버의 정책(Hotlinking 방지)이나 게시물 삭제에 따라 접근이 불가능해질 위험이 있음.
- 데이터의 영속성을 보장하고 안정적인 이미지 제공을 위해, 외부 이미지를 다운로드하여 S3 버킷에 저장하고 해당 URL을 반환하는 기능을 구현함.
이슈 내용
1. AWS 리소스 및 환경 설정
- IAM & S3:
- S3 버킷 생성 및 접근 권한(
PutObject,GetObject)을 가진 IAM 사용자 설정. application.yml에 AWS 관련 프로퍼티(AccessKey, SecretKey, Bucket, Region) 추가.
- S3 버킷 생성 및 접근 권한(
- 의존성:
spring-cloud-starter-aws추가.
3. 환경 설정 (build.gradle & application.yml)
- 의존성 추가: AWS S3 연동을 위한
spring-cloud-starter-aws의존성 추가. - 프로퍼티 설정:
- Access Key, Secret Key, Region, Bucket Name 등을 환경 변수 또는
yml로 구성. - 보안을 위해 민감 정보는 환경 변수로 분리 관리.
- Access Key, Secret Key, Region, Bucket Name 등을 환경 변수 또는
2. 이미지 업로드 로직 구현 (ImageUploader)
- 입력: 링크 생성 요청 시 전달받은
imageUrl(String). - 프로세스:
- 파일명 추출 및 중복 검사:
- URL에서 파일명을 추출하여 S3에 이미 존재하는지 확인함 (
doesObjectExist). - 존재 시: 다운로드 없이 기존 S3 URL을 즉시 반환 (리소스 절약).
- URL에서 파일명을 추출하여 S3에 이미 존재하는지 확인함 (
- 다운로드 & 업로드:
- 미존재 시, 해당 URL의 이미지를 다운로드하여 S3 버킷에 업로드.
- 반환: 업로드된 S3 객체의 접근 URL 반환.
- 파일명 추출 및 중복 검사:
- 예외 처리 (Soft Fail):
- 다운로드 실패(404, Timeout) 시 업로드를 중단하고, 원본 URL 그대로 반환하거나
null처리하여 링크 저장 트랜잭션 자체는 성공하도록 함.
- 다운로드 실패(404, Timeout) 시 업로드를 중단하고, 원본 URL 그대로 반환하거나
5. 예외 처리
- 다운로드 실패: 원본 서버 타임아웃, 404, 접근 거부 시 기본 이미지(Placeholder) URL을 반환하거나
null처리(Soft Fail). - 유효성 검사: 다운로드한 데이터가 실제 이미지 파일인지(MIME Type), 파일 크기가 과도하게 크지 않은지 검증 로직 추가.
- 중복 방지: 이미 저장된 파일명에 대해 불필요한 다운로드/업로드가 발생하지 않는지 확인 바람.
- 트랜잭션: 이미지 업로드가 조금 늦어지더라도 링크 저장이 너무 오래 걸리지 않는지(동기/비동기 처리 여부) 검토 필요.
체크리스트
- AWS S3 연동 설정이 완료되었는가?
참고 자료
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels