데이터베이스 개선작업 시작

Today I Learned 날짜 2024년 5월 7일 화요일 내용 데이터베이스 개선 지난주에 이어 데이터베이스를 개선하고 있는데, 예상치 못한 부분에서 신경쓸 거리가 많다. 예를 들어, 서비스에 가입할 때 항상 Shop테이블을 기준으로 구현되어 있다. 이 부분의 로직도 다른 예외처리를 두어야 한다. 그리고 리뷰서버에선 Redis를 이용해 샵의 정보를 불러오는데 새로 만든 앱의 샵은 Redis에서 정보를 찾을 수 없다. 우선은 Shop_id로 Shop 서버에서 정보를 가져오는 함수를 만들어 처리하고 있다. 점차 두번째 앱에서 처리해야할 정보나 범위가 많아진다면 Redis에 두번째 앱의 shop들에 대한 정보를 추가해주야 한다. ...

2024년 5월 7일 · 1 분 · 배준수

데이터베이스 테이블 계층 변경하기

Today I Learned 날짜 2024년 5월 3일 금요일 내용 DB구조에 대해 열심히 고민했다. 우리 서비스는 애초에 앱을 여러개 낼 계획이 없었기 떄문에 Shopify에서 받은 스토어 정보를 Shop 테이블에 저장하고 이 테이블을 중심으로 모든 로직이 이루어진다. 가장 최상위 테이블 역할을 한다. 알파리뷰 서비스에 가입한 계정에 관한 테이블인 ShopAdminAccount가 같은 계층에 있어 서로 참조할 수 있는 테이블이긴 하지만, 그외의 모든 데이터는 결국 Shop을 기준으로 정규화가 이루어져 있다. 따라서 서비스 삭제도 이 Shop을 삭제하면 이와 연관된 모든 테이블이 삭제된다(일부 남는 테이블과 리뷰서버 쪽도 처리하긴 해야 하지만…). ...

2024년 5월 3일 · 1 분 · 배준수

이메일 템플릿 렌더링

Today I Learned 날짜 2024년 5월 2일 목요일 내용 실수 처리 몇가지 실수를 뿌려놓은게 있어서 열심히 메꾸었다. 가장 먼저, 코어스크립트와 앱블록을 활성화한 유저들을 탐색하는 기능을 고쳤다. 당연히 Dict 일거라 생각하고 처리한 부분에서, 뜬금없이 문자열이 튀어나와 오류가 나고있었다. if not isinstance(settings_data, dict): 를 추가해서 해결했다. 스프레드시트에 데이터가 올바르게 들어가지 않고 있었다. 각 유저들이 앱을 사용하는 상황을 저장하는 방식을 바꾸었는데 이 로직의 코드는 변경하지 않아 작동하지 않는 문제였다. 지난주 이메일 레거시 코드를 개선하고 테스트 하는 과정에서 수신 주소를 내 개인 메일로 바꾸어놨는데, 이 부분을 복구하지 않고 실서버 까지 올라가버렸다.. VOC가 나한테 와서 상당히 당황스러웠다. 메일 주소 바꾸는건 어렵지 않았지만 문제는 템플릿이 렌더링되지 않는 것이었다. ...

2024년 5월 2일 · 2 분 · 배준수

Microsoft AI Tour in Seoul 참여기

Today I Learned 날짜 2024년 4월 30일 화요일 내용 너그러운 샐러드랩의 관용덕에 양재에서 열린 마이크로소프트 AI 투어에 다녀왔습니다. 아침 8시 30분에 양재 aT센터에 도착했습니다. 회사 이름을 넣을줄은 몰랐어요. 아침을 주길래 먹었습니다. 가자마자 뭔가 주길래 봤더니 코파일럿 잘 쓰는 법입니다. 참고하세용 9시 30분부터 키노트세션이 열렸습니다. 한 4~5천명 온 것 같아요. 저 Scott Hanselman님은 마이크로소프트 개발자 커뮤니티의 부사장이십니다. 다행히 각 자리마다 동시통역 오디오가 제공되서 알아듣는데는 성공했습니다. 이 날(4월 30일)부터 코파일럿에 공식적으로 한국어가 지원된다면서 시연을 해주었지만, AI가 100% 헛소리를 해버리는 바람에 대환장파티긴 했습니다. Copilot in Microsoft 365가 공식적으로 한국어 지원을 한다고 하니 엑셀이나 워드, 파포 작업하실 때 쓰시면 좋겠습니다. ...

2024년 4월 30일 · 4 분 · 배준수

쇼피파이 앱 결제방식

Today I Learned 날짜 2024년 4월 29일 월요일 내용 데모스토어의 결제 고객들에게 우리 서비스의 사용 예시를 보여주기 위한 데모버전 스토어가 있다. 이 스토어에선 당연히 우리 서비스에서 유료 플랜을 사용할 때만 접근 가능한 기능들도 보여준다. 따라서 구독 중으로 처리해야 하는데, 결제는 되면 안된다. 굳이 우리가 쓰는 서비스를 결제처리할 이유가 없다. 결제 관련된 로직은 처음 들여다봤는데, 예상과 다르게 처리가 쇼피파이쪽에서 이루어지고 있었다. app_subscribtion으로 처리되고 있었는데, 우리가 결제 간격과 가격 등을 설정하면 됐다. 무료 체험기간, 각 플랜의 이름 등등.. 쇼피파이는 이 설정에 따라 알맞은 때에 결제를 하고 웹훅으로 우리에게 보내준다. 우리가 저장한 데이터는 쇼피파이에 요청으로 보낸 설정과 동일하게 되어있다. 쇼피파이에 요청을 보내고(1) 그대로 우리 서버에도 저장해두는 것. 핵심은, 우리 데이터베이스를 이용해 결제를 처리하는게 아니라는 것과 결국 결제는 쇼피파이쪽에 보내진 데이터에 따라 이뤄진다는 것이다. ...

2024년 4월 29일 · 2 분 · 배준수

더미 리뷰가 생성안되는 이슈 처리

Today I Learned 날짜 2024년 4월 26일 금요일 내용 더미리뷰 프로덕트 리뷰 서비스에 처음 가입하는 스토어에게 더미 리뷰를 생성해준다. 리뷰가 있어야 위젯을 어떻게 이용할 수 있는지 확실히 알 수 있기 때문이다. 최근 가입한 스토어 몇개에 더미리뷰가 생성되지 않는 문제가 발견됐다. 관련 로직을 살펴보았다. 처음 서비스에 가입하여, 샵과 관련된 데이터를 생성할 때 리뷰서버로 요청을 보내 더미 리뷰를 만들어달라는 요청을 보낸다. 이 요청의 결과는 boolean 값으로 반환되는데 True면 샵 데이터에 check_demo_review 가 False값으로 저장된다. 문제가 된 샵들은 모두 True로 저장되어 있었다. 만약 요청이 잘못되었더라면, elastic apm에 에러나 로그가 남았을텐데 그렇진 않았다. 나는 요청자체는 작동하지만 응답으로 False값이 오는 것 같다고 예상했다. ...

2024년 4월 26일 · 2 분 · 배준수

shein 임포터 실패

Today I Learned 날짜 2024년 4월 25일 목요일 내용 Shein이 싫다. 결국 Shein 임포터 태스크는 잠정 보류됐다. 현재 일정상으론 내가 완성할 수 없기 때문이다. 그 이유라고 한다면 아직 프론트 작업은 시작조차 안한 상태고 크롬 드라이버 떄문인지, Shein에서 사람 탐색 기능때문인지 간헐적으로 요청이 실패하고 있으며 이 부분으로 인해 서비스가 멈추는걸 방지하고자 아마존 람다나 구글 쪽에 함수를 올리기엔 시간이 부족하다. 아쉽기도 하고 자존심도 상하고 하.. 예외처리 모든 앱블록을 조회하는 함수가 실서버에서 제대로 작동하지 않았었다. 원인은 ECS에 태스크를 등록할 때 보안그룹을 제대로 설정하지 않아 RDS에 접근하지 못한 것이 원인이었다. 이 부분을 해결하고 나서는, 여러 에러들이 떴다. Key Error와 메인 테마를 찾지 못해 변수가 지정되지 않아 생기는 오류들이었다. 쇼피파이 API로 가져오는 모든 테마의 형식을 내가 확인할 수 없으니, 원하는 형식이 아닐경우 예외처리하고 넘어가는 코드를 추가했다. ...

2024년 4월 25일 · 1 분 · 배준수

selenium을 이용한 크롤링

Today I Learned 날짜 2024년 4월 24일 수요일 내용 동적 페이지 크롤링 결국 리뷰를 가져오기 위해선, SPU가 필요하다. 이 상품정보 페이지에서 SPU를 이용해 리뷰를 서버에서 받아오고 있으니, 분명 어딘가 SPU를 받은 요청이 있을텐데… 진짜 개발자도구에서 수백개를 뒤진 끝에 찾았다. 우선 Shein의 상품 ID에 관한 간략한 설명이다. 상품에는 여러가지 고유 ID가 존재하는데 shein에는 3가지가 대표적으로 있다. SPU : 상품의 고유 ID (ex. 아이폰 13 프로) SKC : 상품 + 색깔의 고유 ID (ex. 아이폰 13 프로 화이트골드) SKU : 상품 + 색깔 + 옵션의 고유 ID (ex. 아이폰 13 프로 화이트골드 1TB) SPU를 변환해 여러 개의 SKC를 만들고, 여기서 또 변환해 SKU를 만든다. 정확한 변환 로직은 모르지만… 어제 말한 것처럼 하나 확실한건 여러 SKU 중의 하나는 반드시 SPU를 포함하고 있다. 다음은 내가 찾아간 과정이다. ...

2024년 4월 24일 · 4 분 · 배준수

Shein에서 리뷰를 가져오기

Today I Learned 날짜 2024년 4월 23일 화요일 내용 SHEIN Importer 기존에 아마존, 알리익스프레스에서 리뷰를 가져오는 기능이 있었는데 이 기능을 SHEIN까지 추가하기로 했다. 개발자 Docs를 찾아봤을 때 리뷰를 가져오는 API 엔드포인트는 아예 없었다. 크롤링 해와야 하나 고민했는데 도움을 받아, 개발자도구에서 요청을 보내는 URL을 알 수 있었다. 문제는 여기부터 발생했는데, 리뷰를 받아오기 위해서는 상품의 고유 ID인 SPU를 변수로 줘야한다. 하지만 이 SPU를 알 방법이 없다. 상품 상세페이지 URL에는 goods_id만 있는데 리뷰 요청떄만 딱 SPU를 사용한다. 그 이전에는 전혀 등장하지 않는 애다. 그 전 요청들 중에 이 값을 받아오는 게 있지 않을까 싶어 정말 싹싹 다뒤져봤는데 절대 등장하지 않는다. 정확히 리뷰 요청때만 등장하는 녀석이다. 도대체 이 값을 어떻게 얻어낼 수 있을지 모르겠다. ...

2024년 4월 23일 · 2 분 · 배준수

비활성화 기능 만들기

Today I Learned 날짜 2024년 4월 22일 월요일 내용 서비스 비활성화 기능 앱 비활성화 기능을 추가하는 태스크를 맡았다. 비활성화라고 하면, (1) 서비스 내 사용하도록 설정한 옵션들을 모두 끄고 (2) 코어스크립트를 비활성화하도록 안내 해야한다. 프론트, 백 모두 맡아서 기능 단위로 개발하게 됐다. 기존 상태에서 서버는 클라이언트에게 사용중인 서비스의 값들만 제공한다. 무슨 말이냐면, 클라이언트의 요청에 대한 응답으로 use_apps에 [100,300] 만 담아 보낸다면 이 유저는 프로덕트 리뷰와 리스트 디자이너만 사용하는 유저라는 뜻이다. 유저에 따라 이 배열의 길이와 내용은 달라진다. ...

2024년 4월 22일 · 2 분 · 배준수