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

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

트러스트

트러스트 지은이: 에르난 디아스 출판사: 문학동네 감상 크게 네 파트로 나누어져 있는 소설. 첫 파트를 읽을 때까진 이야기의 흐름을 쉽게 쫓아갈 수 있었다. 두 번째 파트에선 무슨 이야기를 하는 건지 전혀 감을 잡을 수 없었다. 세 번째 장에 들어서선 이 책이 어떤 구조로 짜여졌는지 이해했고 내가 읽은 것들이 무엇이었는지 알게 되었다. 마지막에선, 숨도 못 쉬면서 읽은 느낌이다. 후기들을 보면 이야기의 구조를 파악하는 것이 나에게만 힘든 건 아닌 듯하다. 이로 인해 두 번째에 나오는 이야기에서 길을 잃는다 하더라도, 이 책은 정말 읽을 가치가 있고 재밌는 소설이다. 월스트리트를 바탕으로한 경제를 다루는 듯한 소설. 하지만 경제는 전혀 중요하지 않으며 한 부부의 삶의 관한 이야기이다. 스포를 해보자면, 네 챕터는 모두 하나의 이야기를 다룬다. 이 소설 속 세계에서 써진, 사실을 기반으로 한 부부에 관한 소설, 의도치 않게 소설의 주인공이 된 남편이 오해를 풀고자 쓴 자서전, 자서전을 쓰도록 돕기 위해 고용된 작가, 그리고 아내의 일기. 사랑 이야기가 아닌 소설을 읽고 싶다면 강력하게 추천한다. ...

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

이메일 코드 뜯어 고치기

Today I Learned 날짜 2024년 4월 19일 금요일 내용 혁명적으로 힘든 하루였다. 변수 통일 어제 말한대로, 잘못된 변수명을 모두 통일했다. 메일과 관련된 부분이고, 특히 우리 서비스의 가장 핵심적인 부분인 리뷰 작성에 대한 메일발송을 처리하는 부분이기 때문에 기존 기능에 문제가 생겨선 안된다. 그래서 일일이 모두 테스트해서 정상작동하는지 확인해야 했다. 웹훅을 이용해 로컬에서 주문 데이터를 생성하고 메일을 보내기 위한 메시징로그가 어떻게 처리되는지 확인했다. 이 과정에서 리뷰 작성을 유도하는 메일 시스템이 어떻게 진행되는지 더 잘 알 수 있었다. 우선 상품이 주문되어 Lineitem 데이터가 생성되면, 고객이 활성화한 모든 메일의 메시징 로그가 생성된다. First Review Request부터 Logn term Review Request까지. 하지만 First Review 요청을 제외하곤 target_datetime은 값이 비어있어 전송되지 않는다. 이후 배송처리(fullfill)되면 나머지 메시징로그들에도 고객이 설정한 것에 맞게 target_datetime 들이 설정된다. 이후 주기적으로 크론이 작동하며 보내야할 메시지를 보내는 로직이다. ...

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

파이썬 알고리즘 : 데이터 분석

2024년 4월 19일 알고리즘 문제풀이 문제 데이터 분석 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def solution(data, ext, val_ext, sort_by): answer = [] for x in data: arr = dict() arr["code"] = x[0] arr["date"] = x[1] arr["maximum"] = x[2] arr["remain"] = x[3] if arr[ext] < val_ext: answer.append(x) if sort_by == 'code': idx = 0 elif sort_by == 'date': idx = 1 elif sort_by == 'maximum': idx = 2 else: idx = 3 answer.sort(key = lambda x: (x[idx])) return answer

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

코트디부아르의 화폐 단위

Today I Learned 날짜 2024년 4월 18일 목요일 내용 이메일 레거시 코드 개선 이메일 보내는 로직이 2개로 나누어져있다. 하나는 message_sender로 클래스로 구현되어있고, 다른 쪽은 템플릿 만드는 함수, 데이터 처리하는 함수, 전송하는 함수가 구현되어있다. 클래스에는 이 함수들이 메서드로 구현되어 있는 형태인데 추상 패턴이라 이메일 뿐만 아니라 웹 푸시, SMS 전송에도 사용할 수 있다. 따라서 모든 이메일 전송은 전자의 클래스를 사용하도록 개선해야 한다. 단순히 사용 함수를 바꾼다고 해결할 문제는 아닌게, 받는 변수와 처리 로직이 다르다. 전송 클래스는 변수로 messaging_log 테이블의 레코드를 받게 되는데 누구에게 어떤 이유로 어떤 형식의 메일을 보냈는지가 기록되는 테이블이다. 이 테이블에 기록을 남기는 메일은 프로덕트 리뷰 서비스로 발생하는 것들만 포함된다. 첫 리뷰 요청 메일이라던가, 장기간 사용 리뷰 요청 등등 정책에 의해 메일이 전송되어야 할 경우, 해당 메일 전송을 예약하기 위해 전송 대기 상태로 저장해둔다. 1달 후 보내져야 할 메일은 그 시간이 기록된 채로 테이블에 저장되고, 어떤 타입의 메일들은 저장된 즉시 처리되어 전송완료 상태로 변경된다. ...

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

파이썬 알고리즘 : Score of a String

2024년 4월 18일 알고리즘 문제풀이 문제 Score of a String 난이도 Easy 코드 1 2 3 4 5 6 class Solution: def scoreOfString(self, s: str) -> int: answer = 0 for i in range(len(s)-1): answer += abs(ord(s[i]) - ord(s[i+1])) return answer ord() : 문자의 아스키코드 숫자 값을 반환 chr() : 숫자의 아스키코드 숫자 값을 반환

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