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

이메일 코드 뜯어 고치기

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

코트디부아르의 화폐 단위

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

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

한 번에 잘하자.

Today I Learned 날짜 2024년 4월 17일 수요일 내용 건강 이슈로 오전 반차. 이메일 템플릿3 나름 열심히 만드는데 여기저기 구멍이 숭숭 뚫려있다. 엑박이 뜬다던가, 버튼 크기가 개판이던가, 임의로 줄바꿈을 집어넣어서 모양이 개판이던가… 테스트를 안하는 것도 아니고, 분명 휴대폰으로도 확인하고 큰 모니터로도 확인하는데 왜 내 눈엔 안보일까. 철두철미한 자체 QA 가 필요하다. 한번에 OK 받도록 만들 것. 회고 그래도 끝이 보임.

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