해당 프로젝트는 유사 이미지 검색 서비스입니다. Spring 서버에서 사용자 화면을 같이 다루고 있습니다. Spring 서버와 Flask 서버로 이루어져 있습니다.
클라이언트와 API를 통한 HTTP 통신을 하는 서버
클라이언트는 thymeleaf와 js로 제작되었습니다.
크롤링 및 이미지 분석을 수행하는 서버
사용 library : beatifulSoup4, lxml
사용 library : OpenCV 이미지 분석 사용 알고리즘 : 해시
- 사용자는 이미지와 키워드를 함께 검색합니다.
- 검색 시, Spring 서버에 요청이 갑니다.
- 요청을 받은 Spring 서버는 해당 키워드로 DB에 이미지가 저장되어있는지 확인합니다.
- 저장이 되어있으면, Flask 서버에 사용자의 이미지를 전달하고 분석을 요청합니다. (HTTP)
- 이미지를 전달받은 Flask 서버는 해당 이미지를 분석하고 HTTP를 통해서 분석이 끝난 이미지를 Spring에게 응답합니다.
- Spring은 Flask로부터 받은 이미지를 사용자에게 응답합니다.
- DB에 이미지가 저장되어있지 않는 경우에 Spring 서버는 Flask 서버에 크롤링 요청을 합니다.
- Flask 서버는 크롤링을 수행하고 DB에 저장합니다. 그 후 Spring 서버에 완료되었다는 응답을 합니다.
- 응답을 받은 Spring 서버는 Flask 서버에 이미지 분석 요청을 다시 합니다. (Spring 서버와 Flask 서버는 같은 DB를 사용하고 있습니다.)
- Flask 서버에서 네이버 이미지를 크롤링하면서 API 요청, 크롤링, DB 삽입으로 아주 많은 시간이 걸립니다.
- Flask 서버에서 OpenCV를 이용하여 이미지를 분석하면서 아주 많은 시간이 걸립니다.
좀 더 학습을 한 후에 최적화하는 방안을 생각해볼 예정입니다.