+ 수정예정
대용량 이미지 태깅 및 분석 기능 프로젝트
해당 사이드 프로젝트는 이미지를 업로드하면 자동으로 태그를 생성하고, 나중에 쉽게 검색할 수 있도록 만드는 것이 핵심 기능이다.
어떤 이미지?

당시엔 유용하다고 생각하고 핸드폰에 저장한 스크린샷과 사진들은 많지만 그 정보들을 정리하는 일은 좀체 없다. 그간 쌓인 것을 수동으로 폴더를 정리하거나 검색하는 것도 역시 번거롭다. 대용량 이미지 태깅과 분석 프로젝트는 이렇게 개인의 핸드폰에 쌓여있는 스크린샷에 있는 데이터를 정리하고 유용하게 가공하는 것이 목표다.
모듈화
하지만 대량의 이미지 데이터를 다루는 기능을 구현해내는 것 이상으로 확장성을 고려한 모듈화를 통해 변화하는 요구사항에 유연하게 대응할 수 있는 구조를 만들어보려 한다.
처음부터 완벽한 시스템을 만드는 것은 어렵겠지만, 하나씩 기능을 추가하면서 점진적으로 확장해 볼 계획이다.
지금까지 진행한 작업
현재까지 클라이언트에서 S3로 직접 이미지를 업로드하는 방식을 구현했다.
서버가 파일을 직접 받으면 부하가 커질 수 있기 때문에, Presigned URL을 활용해 클라이언트가 S3에 직접 업로드하도록 설계했다.
현재 구현된 기능
- Presigned URL을 이용한 단일 이미지 업로드
- CORS 문제 해결
- Django + AWS S3 연동
Presigned URL을 생성하는 로직도 나중에 바꿀 수 있도록 모듈화하여 분리하였다.
업로드 방식이 바뀌거나, 다른 저장소로 옮겨야 할 때 전체 코드를 수정하지 않고 최소한의 변경으로 대응할 수 있도록 하기 위해서다.
관련 블로그 글:
[대용량 이미지 태깅]대용량 이미지 업로드를 위한 Presigned URL 사용과 CORS 에러 해결 과정
[대용량 이미지 태깅]대용량이미지 핸들링을 위한 클라우드 아키텍처 선택 : AWS Lambda와 S3의 활용
[대용량 이미지 태깅]대용량 이미지 업로드를 위한 Presigned URL 사용과 CORS 에러 해결 과정
사용자가 평소에 저장만 하고 다시 보지 않는 캡처 이미지에서 정보를 추출하고 정리하는 Django + Python를 통해 구현하고자 한다. 목표과 방법목표대용량 이미지 업로드 시스템을 구축하는 것이
catch-115.tistory.com
[대용량 이미지 태깅]대용량이미지 핸들링을 위한 클라우드 아키텍처 선택 : AWS Lambda와 S3의 활용
이미지 업로드 프로젝트를 클라우드에서 운영하려면 몇 가지 선택지가 있다. EC2를 띄우고, 직접 서버를 운영하는 방법이 가장 익숙한 방법이다. 하지만 이 방법은 유지보수 부담이 크고, 트래픽
catch-115.tistory.com
다음 단계: 다중 이미지 업로드 & 확장성 고려
지금은 이미지 한 장씩 올릴 수 있는데, 현실적으로는 여러 장을 한 번에 업로드할 수 있어야 하며 모바일 환경을 고려해야 한다.
고려할 점
1. Presigned URL을 개별 생성 vs 한 번에 여러 개 생성
- 요청 수가 많아지면 API 병목이 발생할 가능성이 있음
- 여러 개를 한 번에 생성하는 방식이 더 효율적일 수도 있음
2. 대량 업로드 시 네트워크 트래픽 최적화
- 클라이언트에서 병렬 업로드를 지원
- 업로드 실패 시 재시도 전략 필요
3. 트래픽 증가 대비 서버 & 클라우드 리소스 최적화
- Presigned URL을 Lambda에서 생성하는 방식이 언제까지 유효할지에 대한 고려
이 단계에서도 업로드 로직을 독립적인 서비스로 분리하고자 한다.
- 다중 업로드를 처리하는 API를 따로 만들고, 클라이언트가 이에 맞춰 요청하도록 설계
- Presigned URL을 한 번에 여러 개 생성하는 로직을 모듈화 → 기획이 변경되고 예상과 다른 상황이 되더라도 다른 서비스로 변경이 용이하도록 함
최종 목표: 자동 태그 추출 & 검색 최적화
단순히 이미지를 올리는 게 아니라, 업로드한 순간 자동으로 태그를 생성하고, 검색할 수 있도록 최적화하는 것이 최종 목표다. 이 과정에서 태깅, 저장, 검색을 각각 독립적인 모듈로 설계해 본다.
- 태깅 서비스는 AWS Lambda에서 실행하면서 OCR 및 AI 분석 담당
- 태그 저장은 PostgreSQL JSONB를 사용해서 검색 최적화
- 검색 기능은 별도의 API로 만들어서, 필요하면 Elasticsearch 같은 검색 엔진을 붙일 수 있도록 구성
향후 시도할 기능
- AWS Lambda를 활용한 태깅 자동화 (OCR 및 AI 분석)
- PostgreSQL JSONB를 활용한 태그 저장 및 검색 최적화
- 대량 트래픽을 감당할 수 있는 백엔드 아키텍처 설계
결론
아직 완성된 게 아니라 계속 만들어가는 중이다. 이번 프로젝트를 통해 단순한 이미지 업로드 기능이 아니라, 변화에 유연하게 대응할 수 있는 설계, 확장성을 고려한 기능 구현을 실험하고 익혀볼 생각이다.
따라서 처음부터 각 기능을 독립적인 모듈로 분리하고 있다.
예를 들어 태깅 방식이 AI에서 다른 기술로 바뀌어도, 검색 기능이 더 고도화돼도, 전체 시스템을 뜯어고칠 필요 없게 만드는 게 목표다.
앞으로 블로그에 트래픽 증가와 서비스 확장 과정에서 발생하는 문제 & 해결 과정을 기록하면서 구조를 계속 다듬어볼 예정이며
- 병렬 업로드 최적화
- 데이터베이스 구조 설계
- 태깅 자동화
이 과정에서 어떤 시행착오가 생길지 모르겠지만 하나씩 해결해 나가면서 방향을 잡고 기록해 보도록 한다.
'사이드 프로젝트 > 대용량 이미지 태깅 및 분석 프로젝트' 카테고리의 다른 글
[대용량 이미지 태깅]대용량이미지 핸들링을 위한 클라우드 아키텍처 선택 : AWS Lambda와 S3의 활용 (0) | 2025.02.16 |
---|
댓글