1204 words
6 minutes
[logolens] 프로젝트 계획 및 요구 사항 분석
개요
졸업과제로 만든 “로고 분석 웹 사이트”의 서버를 다시 설계한다. 특히나 각 역할에 따라 서버를 나누고, 캐싱과 데이터베이스를 이용 하여 기존의 서버의 성능을 최적화하는데 초점을 맞추었다.
기본 동작
사용자가 사진 파일을 올리면 해당 사진에 대한 브랜드 분석 정보를 보여준다.
브랜드 분석 정보는 다음과 같다 : 브랜드 이름, 브랜드 설명, 신상품에 대한 쇼핑몰 링크
위의 기본 동작을 충족하기 위해 다음과 같은 기능을 구현해야 한다.
- 사용자의 사진을 통해, 어떤 브랜드인지 추론하는 모델 서버 구성
- 브랜드에 대한 정보를 저장하는 데이터베이스 구성
- 사용자의 요청과 다른 서버들을 중계하는 메인 서버 구성
데이터 흐름
이러한 동작에 대한 데이터 흐름은 다음과 같다.
- 이미지 업로드:
- 사용자가 프론트엔드에서 이미지를 업로드
- 이미지는 Spring Boot 웹 서버로 전송되고, 자동으로 사이즈 조정 후 aws s3에 저장
- 이미지 분석 요청:
- DB에 해당 이미지 해시값이 존재하는지 확인 (Optional)
- Spring Boot 서버에서 FastAPI 모델 서버로 이미지 분석 요청
- 모델 서버에서 이미지 분석 후 결과 반환
- 분석 결과는 Spring Boot 서버를 통해 프론트엔드에 전달
- 분석 결과와 관련된 브랜드 정보는 데이터베이스에서 조회
- 데이터베이스에 정보가 없으면 웹 크롤러가 정보를 수집하고 저장
- 브랜드 정보 제공:
- 프론트엔드에서 브랜드 정보 조회 요청
- Spring Boot 서버에서 데이터베이스를 조회하고 결과 반환
- 실시간 데이터 업데이트
- 웹 크롤러를 일정 주기로 실행시키며 데이터베이스 업데이트
요구 사항 분석
데이터 흐름을 통해 분석한 서버의 요구 사항은 다음과 같다. Optional 의 경우, 프로젝트 완성 후 추가 될 수도 있는 기능이다.
- 이미지 업로드
- 사용자는 프론트엔드에서 form-data 형태로 이미지를 업로드한다.
- 이미지는 Spring Boot 웹 서버로 전송된 후, s3에 저장한다.
- 이미지 파일에 대한 검증 (파일 형식, 크기 제한)을 수행한다.
- Optional s3 에 저장하기 전, 자동으로 이미지의 용량을 최적화한다.
- 업로드 속도를 높이기 위해 이미지 리사이징을 비동기로 처리할 수 있다.
- Optional 이미지 업로드 상태를 사용자에게 실시간으로 피드백한다.
추가 고려사항
- 이미지 파일 검증(예: 파일 형식, 크기 제한).
- 업로드 속도를 높이기 위해 이미지 리사이징을 비동기로 처리.
- 이미지 업로드 상태를 사용자에게 실시간으로 피드백.
- 이미지 분석 요청
- Optional 우선 이미지 해시값이 존재하는지 확인한다. → redis 를 사용하는게 좋아보인다.
- Spring Boot 서버에서 모델 서버로 이미지 분석을 요청한다.
- 모델 서버에서 이미지 분석 후, 결과를 반환한다.
- 분석 결과와 관련된 브랜드 정보를 db 에서 조회한다.
- 분석 결과와 정보를 프론트엔드로 전달한다.
- *Optional 데이터베이스에 정보의 정보를 주기적으로 크롤러가 업데이트 한다.
추가 고려사항
- 이미지 분석 요청 및 결과 수신을 비동기로 처리하여 시스템 성능 향상.
- 캐싱을 이용한 성능 최적화
- 브랜드 정보 제공
- 프론트엔드에서 브랜드 정보 조회 요청.
- Spring Boot 서버에서 데이터베이스를 조회하고 결과 반환.
- 조회 수 및 최신 접근 일에 따른 랭킹 제공
추가 고려사항
- 데이터베이스 조회 시 인덱싱을 통해 검색 성능 최적화.
- Optional 실시간 데이터 업데이트
- 웹 크롤러를 일정 주기로 실행시키며 데이터 베이스 업데이트
추가 고려사항:
- 웹 크롤러의 효율성을 높이기 위해 스케줄링 시스템(Cron, Spring Scheduler 등) 사용.
- 크롤러의 결과를 분석하여 중복 데이터 삽입 방지 및 데이터 정합성 유지.
- 크롤러의 실행 주기를 조정하여 시스템 부하를 관리.
[logolens] 프로젝트 계획 및 요구 사항 분석
https://fuwari.vercel.app/posts/project/logolens/0-requirement/