리뷰 임포트 고치기

2024년 4월 8일 월요일

Today I Learned

날짜

2024년 4월 8일 월요일

내용

아마존에서 리뷰를 Import하는 기능을 열심히 고쳤다.

이미지를 사이즈별로 저장하기

2주 전 금요일이였나? 급하게 이슈 관리가 발생했었다. 아마존에서 리뷰를 가져올 때, 이미지를 사이즈 별로 원본, 중간 크기, 작은 크기, 썸네일 별 링크로 저장한다. 원본과 썸네일을 제외한 사이즈 사진이 나타나지 않았던 문제였다.

이미지의 사이즈는 파일명 가장 뒤에 숫자를 이용해 조절한다. 아마존에 있는 사진의 파일명 가장 끝은 “_SY” 가 붙어있는 형식인데 이 뒤에 숫자에 따라 크기가 조절된다. 예를 들어, 썸네일은 {파일명_SY88.jpg}, 중간 크기는 {파일명_SY300.jpg} 로 저장하면 된다. 문제가 되었던 사진은 “_SY”가 없이 숫자만 저장되어, 사진을 찾을 수 없다는 오류를 출력하고 있었다.

기존에 이미지를 처리하는 로직은

1
2
3
4
5
6
async def resize_amazon_photo(self, review, photo):
        resolution_index = photo.rfind("._SY")
        thumbnail = photo
        origin = photo[:resolution_index]+ ".jpg"
        medium = photo[:resolution_index] + "300.jpg"
        small = photo[:resolution_index] + "100.jpg"

이렇게 되어있었다. rfind는 “._SY”를 오른쪽 부터 탐색해서 index를 반환한다. resolution_index는 찾는 문자열의 가장 앞인 “.”의 위치를 나타내게 되고, photo[:resolution_index]는 resolution_index의 바로 이전 index까지 포함하므로 결국 ._SY가 없는 채 숫자를 붙인다. rfind는 찾고자 하는 바가 없으면 -1을 반환하고, -1은 가장 뒤의 index를 나타내므로 “_SY”가 없을때는 자연스레 가장 뒤에 숫자가 붙게된다.

숫자를 “_SY”뒤에 붙여야 하므로 문자열의 범위를 올바르게 수정해줬다.

1
2
3
4
5
6
7
8
9
10
11
async def resize_amazon_photo(self, review, photo):
        resolution_index = photo.rfind("._SY")
        thumbnail = photo
        if resolution_index == -1:
            photo_url = photo + "._SY"
        else:
            photo_url = photo[:resolution_index+4]
        origin = photo_url+ ".jpg"
        medium = photo_url + "300.jpg"
        small = photo_url + "100.jpg"

import 갯수 카운팅

우리 서비스를 무료 플랜으로 이용할 경우, 리뷰를 import하는데 갯수 제한이 있다. 알리익스프레스에서 가져오는 것과 달리, 아마존에서 가져올 때 갯수가 제대로 측정되지 않고 있었다. 알리익스프레스 관련 클래스와 달리 아마존 임포트 클래스에는 애시당초 관련 로직이 없었다. 알리익스프레스 클래스와 동일한 내용을 추가해주면 데이터 상으론 문제가 없었다.

의외로 문제가 있었던 부분은 프론트였는데, 현재까지 import된 갯수를 출력할 때 플랫폼이 알리익스프레스일 떄만 출력하고, 아닐 때는 무조건 0개로 출력하도록 작성되어 있었다. 이 부분을 수정해주었다.

내용 자체는 그리 어렵지 않았지만, 전체적인 플로우를 파악하느 것이 힘들었는데, 아마존 익스프레스에서 크롤링 해오는 작업이 Google쪽에서 작동하고 있었기 떄문이다. AWS도 아니고 구글쪽의 등록된 함수는 처음봐서 찾기 힘들었다.

기능 자체는 고쳤는데, 10개 이상 리뷰를 요청할 경우에도 리뷰를 10개까지만 가져오는 문제가 남아있다. 히스토리를 들어보니 크롤링 자체가 불안정하여 생기는 문제인듯 하다.

회고

오늘 기차를 타고 오다가 기호 3번을 봤다. 생각보다 되게 어려보여서 놀랐다. 내 또래라해도 믿겠는데?