파이썬 알고리즘 : 정수 내림차순으로 배치하기

2024년 2월 22일 알고리즘 문제풀이 문제 정수 내림차순으로 배치하기 난이도 Lv.1 코드 1 2 3 4 5 6 7 def solution(n): arr = list(str(n)) map(int,arr) arr.sort(reverse=True) map(str,arr) answer = ''.join(arr) return int(answer)

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

기획서로 계획 작성

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

공정하다는 착각

공정하다는 착각 지은이: 마이클 샌델 지음 출판사: 와이즈베리 감상 능력주의는 진급, 승진, 포상 등 집단 내에서 이익을 분배할 때 개인의 능력을 기준으로 삼는 것을 의미한다. 지극히 당연하고 합리적인 방식인 것처럼 보이며 실제로 능력주의의 가치를 달성하기 위해 사회적으로 많은 노력이 소모되고 있다. 그런 면에 익숙해져있다보니, 능력주의를 정답이라고 생각했었다. 어느정도 모범답안이 될 순 있겠다. 학연, 지연, 혈연으로 밀고 당겨주는 불합리함보다는 훨씬 나은 것은 분명하다. 나름대로, 능력주의에 있는 결함에 대해 생각을 하곤 했었다. 예컨대, 모든 수험생이 한날 한시에 같은 시험을 보는 수능은 능력주의를 가장 잘 보여주는 제도다. 국가적으로 철저히 보안을 신경쓰고, 철저히 원칙을 적용한다. 재벌가의 자녀들조차 재수를 하는걸 보면 납득이 되리라고 생각한다. 그날의 컨디션, 건강이나 사고 등 예측할 수 없는 변수는 존재하겠지만, 천재지변까지 통제할 수는 없다는 건 누구나 인정하는 사실이다. 수능은 완벽히 공정한가? 백만원이 넘는 과외를 받는 학생과 가정 형편이 어려워 아르바이트를 해야하는 학생이 공정한 절차를 치뤘다고 볼 수 있는가? 아픈 가족을 돌보는데 매일 시간을 써야하는 학생의 불리함도 천재지변으로 어쩔 수 없는 요인이라고 해야할까? 사실 이 문제는 이미 사회적으로도 충분히 고려되고 있는 문제다. 그 떄문에 특정 조건의 학생들에게 학습 자료를 제공한다거나, 입학 전형을 분리해서 적용한다. 가정에 경제적 지원을 복지로 제공하는 것과는 별개로 말이다. 나는 열심히 공부해서 좋은 대학에 진학했다. 정말 최선을 다하여 공부했다고 자신할 수 있지만 내가 무능을 노력으로만 이겨냈다고 생각하지 않는다. 나는 수능을 보기 위해 필요한 재능을 어느정도는 타고났다. 공부에 대한 재능은 아니다. 그랬다면 변리사 시험을 통과하지 않았을까? 내가 언어를 잘 못했고, 6등급인 물리를 1등급으로 만드는데 3개월이 걸린 것을 생각하면 좀더 세분화되있는 재능으로 생각해야 한다. 유머글이지만, 페이커가 시대를 잘 태어났다는 글을 본 적이 있다. 조선시대에 태어났으면 롤드컵 4회 우승이 불가능했다는 내용이었다(물론 나의 빛 나의 사랑 대상혁은 뭘 해도 성공했을 위인이라고 생각한다). 마찬가지로 내가 수 만년 전 구석기시대에서 태어났으면 재능을 인정 받았을까? 지금은 이 재능이 대학 졸업장으로 변해 나의 가치를 뽐내는 데 정말 좋은 근거가 되어준다. 하지만 구석기 시대에서 수능 과학탐구 성적을 올리는 재능은 어떻게 인정받을 것인가? 더하기를 못해도 더 빠르게, 오래 달려 사냥을 잘하는 사람이 더 중요한 사람이지 않았을까? 그 시대에 사냥의 결과물을 능력주의로 분배한다면 난 내 밥벌이는 제대로 했을까? 이에 대한 고민을 해본 적이 있다. 내 결론은 “어떻게 완벽히 공정할 수 있겠어?” ...

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

Shopify API

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

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