스프린트 전 개발팀 회의

Today I Learned 날짜 2024년 2월 22일 목요일 내용 3회의 다음 스프린트의 기획과 디자인이 어제 나왔다. 저번 스프린트에 대한 회고에서, 사전에 개발자들끼리 조율하지 않아 발생하는 문제들에 대해 팀 구성원 모두 인지하고 있었기 떄문에 약속한대로 프론트와 백 간의 주고 받는 데이터에 대해 이야기를 나누었다. 이 Try의 관찰자로서 어떻게 이야기를 주고 받을지에 대해 큰 틀을 짰다. 데이터 그 자체에 주목하며 각 페이지 별로 필요한 데이터를 확인한다. ex. 위젯의 생성 시간, 상품의 평점 등 ...

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

기획서로 계획 작성

Today I Learned 날짜 2024년 2월 21일 수요일 내용 스프린트 파악하기 다음에 진행될 스프린트의 기획과 디자인이 나왔다. 완성본은 아니지만, 플로우차트와 PRD 문서를 참고하면서 내가 무엇을 어떻게 구현해야 할 지 파악했다. 여러 부분에서 어떻게 구현해야 할지 난감하기도 하고, 내가 잘 모르는 부분이라 걱정도 된다. 실시간 데이터를 반영해야 하는 부분이 있다. 최근 작성된 리뷰, 구매 등을 파악해야 하는데 이 부분이 많이 난감하다. 기존에 우리 서비스에도 있는 내용이긴 한데, 스크립트가 스토어의 테마에 추가되는 부분이라 어떻게 구현하는 건지 파악이 힘들다. 실시간 정보를 어디에 저장하고 어디서 받아오는지 빨리 파악해야 하는데.. 고객에게 성과를 보여주기 위해 클릭 수를 체크해야 한다. 이 부분도 어떻게 처리해야 하지… 장바구니도 Shopify 쪽에서 관리하는 걸로 알고 있는데 프론트에서 호출할 때마다 카운트해서 저장해야 되나..? 아직까지는 “잘” 구현하는 것보단 “어떻게” 구현해야 할 지가 더 큰 문제긴 하다. 기획 문서를 봐도 잘 떠오르지 않는다. 갈 길이 참 멀구만 ...

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

당연히 안되는 것 구별해내기

Today I Learned 날짜 2024년 2월 20일 화요일 내용 유지 보수 종료 유지 보수 스프린트가 종료됐다. 이전에 AI 서비스를 만드는 스프린트와 다음에 진행될 것의 사이에서 이전에 부족하거나 고쳐야 할 부분을 다듬었다. 개인적인 욕심으로는, AI 때 만든 기능들에 대한 테스트 코드를 추가하고 싶었는데 미루길 반복하다 시간이 부족해서 못했다. 주어진 시간이 없다기 보단, 내가 AI 시작하기 전에 완성했어야 했지만 그러지 못한 것들에 낭비된 시간, 이메일 CSS 한다고 날린 시간이 크다. 개인적으로 시간을 들여서라도 좀 만들어놔야겠다. ...

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

쿼리문에 join이 필요한 경우

Today I Learned 날짜 2024년 2월 19일 월요일 내용 SQL 쿼리문에서 Join 그동안 쿼라를 이용해 관계(relationship)를 맺고 있는 여러 데이터를 가져올때 joinedload를 사용했다. 예를 들어, shop_detail 테이블에 있는 필드 use_ai는 우리 서비스에서 AI 기능을 사용하는 지를 나타낸다. id가 shop_id로 일치하는 Shop을 불러올 때, shop_detail도 같이 가져오기 위해 쿼리문을 다음과 같이 작성할 수 있다. 1 2 stmt = select(models.Shop).options(joinedload(models.Shop.shop_detail).where(models.Shop.id == shop_id) result = db.execute(stmt).scalar_one_or_none() 이 떄, result는 [models.Shop](http://models.Shop) 형식이겠지만, shop_detail을 참조할 수 있다. print(result.shop_detail.use_review)와 같은 형식으로! ...

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

table만으로 Email html 만들기

Today I Learned 날짜 2024년 2월 16일 금요일 내용 Email Template를 깨달은 남자 난 더이상 Email에 담을 HTML을 만드는 게 두렵지 않다. 깨달아버렸기 때문이다. 2가지 과정에서 깨달음이 있었다. Div가 아닌 Table 이메일 서버가 HTML을 출력할 때 의도하지 않게 해석하는 경우가 많다. <head> 나 <body>를 읽지 않는 경우도 많고 <div>를 제대로 처리하지 않아 padding이나 margin이 엉망이 되기도 한다. 검색해보면 가장 많이 나오는 말은 <table>, <tr>, <td> 태그를 사용하라는 것. 이 태그는 테이블을 만드는데 사용되는데, tr은 table row의 약자로 행을 의미하고 td는 table data로 행 내에 들어갈 정보를 의미한다. 사실 가로(열)로 이해해도 무방하다. ...

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

공식적으로 불가능을 확인

Today I Learned 날짜 2024년 2월 15일 목요일 내용 앱을 삭제한 스토어의 데이터에 접근하는 법 은 없었다. Shopify partner에게 답변이 왔는데, webhook 시그널의 전달과 access token 무효화는 비동기적으로 발생해서 접근할 수 없다고 한다. 당장은 방법이 없어, 우리 서버 내 데이터만 삭제하는 걸로 Task를 종료했다. 아름다운 사람은 머문 자리도 아름답다는 누군가의 말처럼, 우리가 삭제된 이후에 우리의 흔적을 남기지 않도록 하고 싶은데 마땅한 방법이 떠오르지 않는다. 앱을 삭제하는건 Shopify 쪽에서 발생하는 일이라 우리가 제어할 수 있는 방법이 없다. 미래를 볼 순 없는 노릇이니 삭제할 만한 shop을 고를 수도 없고.. 삭제 이후에는 재설치하지 않는 한 access_token을 얻을 수 없는데 어찌해야 할까.. 짱구좀 굴려봐야겠다. ...

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

삭제한 Store의 API에 접근할 수 없는 이유

Today I Learned 날짜 2024년 2월 14일 수요일 내용 안돼 앱을 삭제한 shop의 메타필드와 테마 내 에셋을 삭제하는 Task를 진행중이다. 문제가 되는 부분을 정리하자면 app이 삭제되면 웹훅 시그널이 도착하는데, 이 때 shopify API로 메타필드나 에셋에 접근하면 access token으로 인해 401이 뜬다. 메타필드와 asset에 접근하는 다른 커맨드를 이용해 잘 작동되는게 확인된 access_token을 삭제해도 마찬가지로 aceess_token으로 인해 401이 뜬다. 열심히 구글링하는 과정에서 다음 링크를 발견했다. 요약하면, “app/uninstalled”라는 topic의 웹훅이 도착했을 떄는 이미 우리 app이 삭제된 이후기 떄문에 access token이 무효화되어 스토어의 에셋이나 메타필드에 접근할 수 없다는 것. 무려 Shopify 파트너의 답변이라… 그렇다면 알파리뷰를 삭제한 store의 스니펫을 위해 API로 전송한 데이터를 삭제할 수 있는 방법이 없다. 그리고 shopify 개발자 포럼을 확인해보니 이 문제를 나만 겪는게 아닌가보다. ...

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

rich snippet 위치 찾기

# Today I Learned ## 날짜 2024년 2월 13일 화요일 ## 내용 ### 왤까? 저번주부터 진행하던 Task는 고객이 서비스를 설치할 당시 생성된 데이터들 중 우리 서버에 있는 것과 Shopify에 저장해둔 것을 찾아 삭제해야 한다. 고객이 서비스를 삭제할 때 발생하는 일련의 과정은 웹훅으로 구현되어 있다. 내 로컬에서 태스크를 진행하기 위해 테스트 서버와 로컬에 웹훅을 설치해 열심히 구현했다. 저번 TIL에 있었던 metafields나 asset이 여기에 해당된다. 생성될 때의 함수를 보고 반대로 했다. 내가 지워야할 데이터는 구글에 rich snippet을 제공하기 위해 생성되었던 것들인데, 탐색해서 삭제하는 로직을 완성했다. 문제를 겪는 부분이 있고, 분명 발생해야 할 문제인데 그렇지 않은 부분도 있다. 우선, 설치를 삭제한 shop의 테마를 shopify에서 조회하는데 자꾸 실패한다. 이미 작성된 다른 커맨드를 이용해 테마를 조회할 떄는 잘 나오는데 왜 여기서만 문제가 될까? 같은 함수를 사용하는데.. 삭제해야할 테마가 존재하지 않는다면 그냥 넘어가도록 로직을 설정할지, 무언가 잘못된 부분이 있는지 아직 확신이 서지 않는다. 왜 안될까? 두번쨰로, 테마의 asset을 다루는 API는 Shopify에 예외적인 상황임을 알려 승인받지 않는다면 더 이상 지원하지 않는다. 우리 서비스는 승인을 받았지만, 실서버만 적용되기 때문에 테스트서버에선 asset API가 작동되지 않을 것이라고 조언을 받았었다. 이 과정을 어떻게 처리해야할지 참 고민이 많았는데 아직까지 나타나지 않고 있다. 왜 될까? ## 회고 긴 연휴 끝이라 집중을 잘 못할까 걱정했는데 기우였다. 휴식이 최고.

2024년 2월 13일 · 1 분 · 배준수

Shopify API

Today I Learned 날짜 2024년 2월 7일 수요일 내용 새로 시작한 Task에 대해 파악하는데 하루 종일 썼다. 내가 등록한 ECS Task가 5일동안 작동하지 않았는데, 로그나 apm.capture에 아무것도 안떴다. 다시 작동하니까 아무 문제 없이 잘 되는데 이유를 모르겠다. 그냥 해프닝이길.. Shopify에서 정보 받아오기 메타필드(metafield) 그동안 잘 보지 않았던 부분이라 정확한 개념을 우선 파악했다. Shopify에는 스토어에 대한 정보를 저장하여 매번 서버에서 가져오지 않고 프론트에서 동적으로 출력하는데 사용할 수 있다. 데이터를 메타필드에 저장한다. ...

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

스프린트 준비

Today I Learned 날짜 2024년 2월 6일 화요일 내용 많은 것을 하진 못했다. weekly review report email은 잘 작동했지만 1가지 오류가 발생했다. 실서버 데이터 중 잘못된 데이터가 있어 그 샵의 시간대를 찾지 못했다. 어제 미처 추가하지 못한 부분이라 해당 부분에 대한 예외처리 코드를 추가했다. 당장 급한 Task는 없다고 생각해 테스트 코드를 작성하려고 했다. 이번에 만든 기능들에 대한 유닛테스트 코드를 작성해두고 싶었다. 2달? 정도 전 내가 이미 있던 테스트들이 고장나있던 상태라 고쳤는데 1가지 오류가 발생했다. 모든 타입의 위젯을 생성해보는 테스트였는데 특정 타입에서 item_per_page 라는 속성이 없어 발생한 문제였다. 각 위젯별로 위젯에 보여줄 아이템의 갯수를 설정할 수 있는데 GALLERY_GRID_TEMPLATE 타입에는 설정할 수 없다. 내가 파악하기론, GALLERY_GID 라는 위젯 안에 들어가는 템플릿이기 때문이다. 따라서 위젯을 생성하는 함수에서는 처리하지 않는 타입이라 오류가 발생했다. 제외 이유를 각주에 추가하고 테스트 케이스에서 제외했다. ...

2024년 2월 6일 · 1 분 · 배준수