2앱 체제 구현

Today I Learned 날짜 2024년 5월 9일 목요일 내용 샵 디테일 수정 새로운 브라우즈 부스터 앱에서 사용할 샵 테이블을 별도로 생성했었다. 이 앱에 앞으로 다양한 서비스가 추가될 테지만, 우선은 필요한 최소한으로 구현하는게 좋다고 클린 아키텍처에서 배웠다. 알파플러스 앱에선 쇼피파이에서 보내주는 데이터는 샵 테이블에, 우리 서비스에서 사용하기 위해 필요한 정보들을 담는데는 샵 디테일 테이블을 사용한다. 우선 브라우저 부스터 앱은 샵 디태일을 별도로 만들지지 않았다. 배운대로 했다는 뿌듯함을 느꼈다. 브라우저 부스터 앱을 설치해도, 알파플러스와 동일한 온보딩 및 회원가입 과정을 겪어야 해서 샵 데이테일 테이블이 필요하다는 것을 꺠달았다. 바로 샵 디테일을 만들었다. 난 생각의 범위가 참 좁다. ...

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

Shopify Session 설치

Today I Learned 날짜 2024년 5월 8일 수요일 내용 Shopify session 새로 추가될 앱을 같은 서버에 만들었다. 앱이 설치되는 방식은 대략 다음과 같다. 쇼피파이에 설정해둔 우리 서버의 엔드포인트로 요청이 들어오면(/shopify) 우리 서버는 shopify_session을 이용해 허용 URL을 만들고 redirect시킨다. 앱을 설치하는 고객은 앱이 요청하는 권한(고객 데이터 접근, 주문 데이터 접근 등등)에 대해 확인하고 허가하는 창으로 안내되고, 허용하면 다시 우리 서버로 요청이 넘어온다. 이후로 온보딩 플로우로 넘어가든, 로그인으로 넘어가든 우리 코드대로 처리된다. ...

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

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

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 분 · 배준수