punchdrunkard
1204 words
6 minutes
[logolens] 프로젝트 계획 및 요구 사항 분석
2024-05-30

개요#

졸업과제로 만든 “로고 분석 웹 사이트”의 서버를 다시 설계한다. 특히나 각 역할에 따라 서버를 나누고, 캐싱과 데이터베이스를 이용 하여 기존의 서버의 성능을 최적화하는데 초점을 맞추었다.

기본 동작#

사용자가 사진 파일을 올리면 해당 사진에 대한 브랜드 분석 정보를 보여준다.

  • 브랜드 분석 정보는 다음과 같다 : 브랜드 이름, 브랜드 설명, 신상품에 대한 쇼핑몰 링크

  • 위의 기본 동작을 충족하기 위해 다음과 같은 기능을 구현해야 한다.

    • 사용자의 사진을 통해, 어떤 브랜드인지 추론하는 모델 서버 구성
    • 브랜드에 대한 정보를 저장하는 데이터베이스 구성
    • 사용자의 요청과 다른 서버들을 중계하는 메인 서버 구성

데이터 흐름#

이러한 동작에 대한 데이터 흐름은 다음과 같다.

  1. 이미지 업로드:
    • 사용자가 프론트엔드에서 이미지를 업로드
    • 이미지는 Spring Boot 웹 서버로 전송되고, 자동으로 사이즈 조정 후 aws s3에 저장
  2. 이미지 분석 요청:
  • DB에 해당 이미지 해시값이 존재하는지 확인 (Optional)
    • Spring Boot 서버에서 FastAPI 모델 서버로 이미지 분석 요청
    • 모델 서버에서 이미지 분석 후 결과 반환
    • 분석 결과는 Spring Boot 서버를 통해 프론트엔드에 전달
    • 분석 결과와 관련된 브랜드 정보는 데이터베이스에서 조회
    • 데이터베이스에 정보가 없으면 웹 크롤러가 정보를 수집하고 저장
  1. 브랜드 정보 제공:
    • 프론트엔드에서 브랜드 정보 조회 요청
    • Spring Boot 서버에서 데이터베이스를 조회하고 결과 반환
  2. 실시간 데이터 업데이트
  • 웹 크롤러를 일정 주기로 실행시키며 데이터베이스 업데이트

요구 사항 분석#

데이터 흐름을 통해 분석한 서버의 요구 사항은 다음과 같다. Optional 의 경우, 프로젝트 완성 후 추가 될 수도 있는 기능이다.

  1. 이미지 업로드
  • 사용자는 프론트엔드에서 form-data 형태로 이미지를 업로드한다.
  • 이미지는 Spring Boot 웹 서버로 전송된 후, s3에 저장한다.
  • 이미지 파일에 대한 검증 (파일 형식, 크기 제한)을 수행한다.
  • Optional s3 에 저장하기 전, 자동으로 이미지의 용량을 최적화한다.
  • 업로드 속도를 높이기 위해 이미지 리사이징을 비동기로 처리할 수 있다.
  • Optional 이미지 업로드 상태를 사용자에게 실시간으로 피드백한다.

추가 고려사항

  • 이미지 파일 검증(예: 파일 형식, 크기 제한).
  • 업로드 속도를 높이기 위해 이미지 리사이징을 비동기로 처리.
  • 이미지 업로드 상태를 사용자에게 실시간으로 피드백.
  1. 이미지 분석 요청
  • Optional 우선 이미지 해시값이 존재하는지 확인한다. → redis 를 사용하는게 좋아보인다.
  • Spring Boot 서버에서 모델 서버로 이미지 분석을 요청한다.
  • 모델 서버에서 이미지 분석 후, 결과를 반환한다.
  • 분석 결과와 관련된 브랜드 정보를 db 에서 조회한다.
  • 분석 결과와 정보를 프론트엔드로 전달한다.
  • *Optional 데이터베이스에 정보의 정보를 주기적으로 크롤러가 업데이트 한다.

추가 고려사항

  • 이미지 분석 요청 및 결과 수신을 비동기로 처리하여 시스템 성능 향상.
  • 캐싱을 이용한 성능 최적화
  1. 브랜드 정보 제공
  • 프론트엔드에서 브랜드 정보 조회 요청.
  • Spring Boot 서버에서 데이터베이스를 조회하고 결과 반환.
  • 조회 수 및 최신 접근 일에 따른 랭킹 제공

추가 고려사항

  • 데이터베이스 조회 시 인덱싱을 통해 검색 성능 최적화.
  1. Optional 실시간 데이터 업데이트
  • 웹 크롤러를 일정 주기로 실행시키며 데이터 베이스 업데이트

추가 고려사항:

  • 웹 크롤러의 효율성을 높이기 위해 스케줄링 시스템(Cron, Spring Scheduler 등) 사용.
  • 크롤러의 결과를 분석하여 중복 데이터 삽입 방지 및 데이터 정합성 유지.
  • 크롤러의 실행 주기를 조정하여 시스템 부하를 관리.
[logolens] 프로젝트 계획 및 요구 사항 분석
https://fuwari.vercel.app/posts/project/logolens/0-requirement/
Author
punchdrunkard
Published at
2024-05-30