쇼피파이 앱 결제방식

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

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

파이썬 알고리즘 : 메뉴 리뉴얼

2024년 4월 29일 알고리즘 문제풀이 문제 메뉴 리뉴얼 난이도 Lv. 2 코드 1차시도 85/100 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def solution(orders, course): answer = [] arr_set = set() for i in range(len(orders)): for j in range(len(orders[i])): arr_set.add(orders[i][j]) orders[i] = set(orders[i]) for n in course: arr = [] cnt = 2 nCr = itertools.combinations(arr_set,n) for x in list(nCr): tmp = 0 for p in orders: if set(x) <= p: tmp += 1 k = sorted(x) word = ''.join(k) if tmp > cnt: cnt = tmp arr = [word] elif tmp == cnt: arr.append(word) answer += arr answer.sort() return answer 반복문을 남발하여서 그런지, 4개 정도의 테스트케이스가 시간초과로 통과하지 못했다. ...

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

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

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

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

파이썬 알고리즘 : 기능개발

2024년 4월 26일 알고리즘 문제풀이 문제 기능개발 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def solution(progresses, speeds): answer = [] idx = 0 while idx < len(progresses): cnt = 0 for i in range(len(progresses)): progresses[i] += speeds[i] while idx < len(progresses): if progresses[idx] >= 100: idx += 1 cnt += 1 else: break if cnt: answer.append(cnt) return answer 가장 앞에 있는 기능이 100이 될때까지 모든 값들의 크기를 늘렸다. 이후 첫번 째 기능 개발이 완료되었을 때 100이 넘는 것들을 같이 처리해주고 갯수를 세주었다. ...

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

shein 임포터 실패

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

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

파이썬 알고리즘 : 소수 찾기

2024년 4월 25일 알고리즘 문제풀이 문제 소수 찾기 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def solution(n): answer = 0 for num in range(2,n+1): if num == 2 or num == 3: answer += 1 continue if not num%2: continue for i in range(2,int(num**(0.5))+1): if not num%i: break else: answer += 1 return answer

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

파이썬 알고리즘 : 주식가격

2024년 4월 23일 알고리즘 문제풀이 문제 주식가격 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def solution(prices): answer = [0 for _ in range(len(prices))] stk = [] for i in range(len(prices)): price = prices[i] if not stk: stk.append([price,i]) continue while stk: now_price, now_time = stk[-1] if price < now_price: answer[now_time] = (i-now_time) stk.pop() else: break stk.append([price,i]) if stk: while stk: p,t = stk.pop() answer[t] = len(prices)-1-t return answer

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

비활성화 기능 만들기

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

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