천 번 난 오류

Today I Learned 날짜 2024년 10월 25일 금요일 내용 천 번의 오류 우리 슬랙의 무료 평가판 기간이 끝나면서, 마지막에 추가한 sentry 알람이 사라졌다.. 이제 에러가 나는지 직접 들어가서 확인해봐야 한다. 요즘 설치 수가 많아지면서 그래도 잘 작동하는 줄 알았는데.. 똑같은 오류가 천 번 이상 지속적으로 나고 있었다. 오류 메시지는 쇼피파이 상품 미디어의 ID가 이미 존재하는 값이라, DB가 롤백된다는 내용이다. 모두 쇼피파이 설치 로직에서 발생했다. 쇼피파이 상품 미디어의 ID는, 쇼피파이에서 제공하는 값이다. 쇼피파이에서 globally unique id라 했으니까 분명 중복이 된 값이 들어올리는 없고.. 이미 저장된 상품을 또 저장해서 발생한 문제인지 알아봤는데, 이 에러가 터진 샵들 중 첫 설치인 샵들이 많았다. ...

2024년 10월 25일 · 2 분 · 배준수

알림톡에 링크 추가

Today I Learned 날짜 2024년 10월 24일 목요일 내용 알림톡에서 손님받기 알림톡에는 3가지 링크가 포함된다. 완성된 배너이미지 보러 가는것, 다운로드 받기, 삭제하기 버튼이다. 해당 버튼을 누르면 기존 어드민과는 별개의 페이지로 이동하고 해당 액션을 취할 수 있다. 그 내부에서 처리하는 건 이미 존재햐는 기능이라, 버튼을 누르면 서버 엔드포인트로 요청을 보내도록 구현할 수도 있겠으나, 그 요청을 검증해야 한다고 생각했다. 리소스를 건드리는 작업인 만큼, 권한이 있는 클라이언트의 요청임을 확인하고 싶었다. 버튼을 누르면, 하고자 하는 행동과 jwt 토큰이 path로 포함된 채 이동한다. 클라이언트에선 jwt 토큰을 서버로 보내 검증을 요청한다. 서버는 토큰이 올바르다면, 필요한 유저정보 (서비스 ID, 액세스 토큰, 플랫폼)와 배너이미지의 ID를 반환한다. 토큰이 올바르지 않다면 웬놈이냐며 쫒아낸다. 만약 이 과정이 없었다면 ID만 알아도 URL로 접근해 남의 리소스를 처리할 수 있을수도 있다. ...

2024년 10월 24일 · 1 분 · 배준수

페이스북 테스트앱으로 댓글 수집

Today I Learned 날짜 2024년 10월 23일 수요일 내용 테스트용 페이스북 앱 페이스북 앱은 참 갈대같다. 로그인과 관련된 설정을 바꾸더라도 안바뀔 떄도 있고 바로 바뀔 떄도 있다. 콜백 URL을 여러개로 설정해도 괜찮을 것처럼 UI가 되어있긴 한데, 어떻게 될지 모르겠다. 실서버에서도 사용하는거라 괜히 잘못 건드렸다가 요즘 아주 신나신 서비스께 누가 될까봐 건드리지를 못하겠다. 이번에 네이버 스마트스토어 쪽 서비스를 추가하면서 QA를 진행할 차례다. 지금 설정대로라면 인스타그램 로그인 부분은 실서버에 가서야 QA를 할 수 있는데.. 실서버 올라간다고 바로 솔루션이 개시되는게 아니라(심사 필요) 상관은 없다만.. 그래도 철저한 QA를 위해, 앞으로 개발의 편의성을 위해 테스트용 페북 앱을 만들어야 한다. 기존에도 시도했었으나 왠지 모르게 댓글만 안불러와진다. 게시글은 되는데 댓글만.. ...

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

알림톡 머갈톡

Today I Learned 날짜 2024년 10월 22일 화요일 내용 알림톡 배너 이미지를 모두 생성한 사람에게 알림톡을 보내줘야 한다. 처음 만들어 보는거긴 한데.. 나름 API 문서도 잘되어있고 테스트용 서버도 만들어놓은 서비스라, 생각보다는 쉽게 만들었다. 1 코드 비공개 로컬에서 잘 되길래, 테스트서버에 올리고 실제 알림톡을 보내봤는데 안보내진다. 뭔가 파라미터가 잘못됐다는데.. 정말 2시간동안 눈이 빠져라 찾아봐도 잘못된 부분이 없었다. 혹시나 싶어 발송메서드의 key 부분을 다시 API 문서에 있는 텍스트로 복사 붙여넣기 해봤다. 하는 과정에서 다시한번 봤으나, 다른 글자는 없었다. 그런데 갑자기 작동한다. 뭐가 잘못되었는지 여전히 모르고, 왜 작동하는지 여전히 모르겠다. ...

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

Selenium에게 패배한 개발자 : PIL

Today I Learned 날짜 2024년 10월 21일 월요일 내용 Selenium은 말을 듣지 않는다. 인스타그램 댓글을 가져와 이미지를 생성하고 있다. 과정은 Jinja2로 HTML 생성 ⇒ Selenium으로 HTML을 렌더링해 높이 파악 ⇒ HTML2Image로 높이를 정한 이미지 생성 이다. 근데, HTML 하단의 여백이 배경이 없이 나타난다. 그라데이션 모델은 배경이 CSS가 아니라 이미지인데, 하단 84px 정도는 이 배경이미지를 불러오지 못해서 하얗게 나타난다. 이걸 해결하기 위해 온갖 시도를 다해봤으나 실패했다… 오전에 우스갯소리로 “이걸 생성해서 흰색 만큼 자르는건 개발자로서 수치스러운 겁니다”라고 했었는데.. ...

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

서버가 HTML의 길이를 파악하는 법

Today I Learned 날짜 2024년 10월 18일 금요일 내용 HTML에서 전체 길이를 파악하는 법 인스타그램에서 가져온 댓글 10개를 이미지로 만들어야 한다. html2image는 생성할 때 사이즈를 표시할 수 있는데, 어떤 값을 넣어야 할지 불명확했다. 댓글의 작성 길이에 따라 어찌 될지 모르니… GPT께서, selenium을 이용하라고 하신다. 기본적인 원리는 selenium으로 서버에서 크롬창을 띄운다. 거기에 내가 이미지로 만드려는 HTML 파일을 올린다. 그 창의 길이를 측정한다. 이미지로 만들 때 그 값을 높이로 제공하면 딱 알맞은 이미지가 생성된다. 다. 코드가 참 더러운데 어떻게 작동은 된다…? ...

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

안전한 S3 링크 : presigned_url

Today I Learned 날짜 2024년 10월 17일 목요일 내용 path parameter VS query parameter 네이버 커머스 API를 보면서 열심히 개발중이다. 상품 상세페에지에 이미지를 추가해야 하는데 PUT이라 덮어 씌워지는 형태다. 따라서 우선 데이터를 조회하고, 거기서 상세정보 페이지 데이터만 변경한 후 다시 보내줘야 한다. 분명 “https://naver-api/commerce/v1/origin-product/{ProductOriginNo}” 로 보내면 된다고 하는데, 자꾸 없는 리소스라고 한다. 네이버 문서에 의하면, 없는 주소로 요청을 보냈다는 의미다. 분명 맞는데… 그러다 발견했다. 저 상품 넘버를 “path parameter”로 보내라고 쓰여있었다. 실제로 위에 써져 있는 형태는 path parameter다. ...

2024년 10월 17일 · 2 분 · 배준수

댓글 점수 매기기

Today I Learned 날짜 2024년 10월 16일 수요일 내용 댓글 점수화 기준에 적합한 댓글 중 상위 10개를 추려 이미지화해야 한다. 기존에 AI를 파인튜닝할 때, 적합한지 아닌지만 판단하도록 했었는데, 부적절하다는 생각이 들었다. 왜냐하면 적합한 것이 10개 이상일 경우, 어떻게 더 좋은 댓글을 가려낼 것인가? 댓글이 부족하다면, 기준에 미치지 못하는 문의성 댓글이나 부정적 댓글도 걸러낼 수 있는가? 한 번 판단한 댓글을 또 다시 판단할 필요가 있는가? 라는 생각이 들었다. 그래서 댓글 테이블에 점수 필드를 만들어놓고 비워뒀다. 처음 판단 때 점수를 적어서 기록해놓고, 이 값이 있는 댓글은 굳이 AI에게 묻지 않아서 비용을 아꼈다. 점수는 0~10 점 사이로 설정했는데 0점은 아예 부적합한 댓글이다. 댓글을 선정할 때 점수가 높은 순으로 뽑았고 아무리 부족해도 0점은 뽑지 않았다. 만족 ...

2024년 10월 16일 · 1 분 · 배준수

HTML을 이미지 파일로 변경하기

Today I Learned 날짜 2024년 10월 11일 금요일 내용 HTML2image 네이버 스마트스토어 상품 상세페이지에 이미지를 추가해야 한다. 이미지는 AI로 선정한 댓글들이 들어간 위젯이다. Jinja2로 동적으로 데이터를 넣고 나서, HTML로 저장하고 그 파일을 이미지로 변환하려고 했다. 1 2 3 4 5 6 7 8 9 def _image_test(db: Session): 코드 비공개 return hti.screenshot( html_file="a.html", css_file="b.css", save_as="test.png", ) 일단 테스트로 만들어 놓긴 했는데.. 위는 Jinja2 로 렌더링 하는 코드고 아래 hti가 html2image 인스턴스다. html string도 넣을 수 있고, 파일도 넣을 수 있다. ...

2024년 10월 11일 · 1 분 · 배준수

uselist, passive_delete, cascade

Today I Learned 날짜 2024년 10월 10일 목요일 내용 데이터베이스 설정의 의미 데이터베이스에서 고민이 생겼다. 오른쪽에 있는 네이버 관련된 부분을 작성해야 했는데, 다음과 같은 조건을 만족해야했다. 네이버 스토어는 여러개의 네이버 이미지 배너를 가질 수 있다. 네이버 이미지 배너는 하나의 네이버 상품과 관련될 수 있다. 네이버 이미지 배너는 다수의 인스타그램 게시글과 관련될 수 있다. 네이버 상품과 네이버 이미지 배너는 네이버 스토어의 자식테이블이다. 중복된 데이터 생성은 최대한 방지한다. 이미지 배너 데이터가 삭제되더라도 네이버 상품과 인스타그램 게시글 데이터는 삭제되선 안된다. 어렵다.. 사실 5번만 무시(?) 한다면 일은 훨씬 쉬워진다. 그냥 네이버 배너이미지 테이블 밑에다가 중복된 데이터를 저장하는 테이블을 2개 만들고 관계가 생성되면 복붙해서 넣어주면 된다. 하지만 중복된 데이터는 효율성이나 리소스 낭비의 문제도 있지만 데이터 무결성과도 연관이 있다. 똑같은 데이터가 2개 있을 때, 하나가 삭제되면 반드시 다른 하나가 삭제되야 하는데 그렇지 않게 될 경우 발생할 수 있는 위험성들이라던가.. ...

2024년 10월 10일 · 6 분 · 배준수