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

JWT 디코딩

Today I Learned 날짜 2024년 10월 8일 화요일 내용 JWT 디코딩 네이버에선, 솔루션에 가입한 유저의 정보를 JWT 토큰으로 넘겨준다. 이 토큰을 각 솔루션에 제공되는 공개키를 이용해 디코딩하여 유저 정보를 저장해야 한다. 쇼피파이에서도 했던 거라 그리 안어려울 거라 생각했는데 난관에 많이 부딪혔다. 인식하지 못하는 알고리즘 JWT 토큰은 헤더, 페이로드, 시그니처로 이루어져 있다. 헤더에는 토큰 타입과 시그니처의 해싱 알고리즘이 나타나있고, 페이로드에는 토큰에 담아 전달하려는 정보가 담겨있다. 시그니처는 토큰의 검증에 사용한다. 헤더에 사용해야하는 알고리즘이 적혀있지만, 일반적으로는 정해져있다. 예를 들어, 쇼피파이에선 Docs에 HS256을 사용한다고 나와있어서 굳이 헤더를 열어볼 필요가 없다. 그리고 이 알고리즘이 보통 많이 쓰이기도 하고… ...

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

공인 IP와 사설 IP

Today I Learned 날짜 2024년 10월 7일 월요일 내용 공인 IP 주소 네이버 커머스 API 개발을 시작했다! 여기서 우선 내 스토어에서만 사용하는 애플리케이션을 개발하고 있는데, IP를 등록해야 한다. 해당 IP에서 오는 요청만 네이버 API가 답해준다. warp 터미널에 있는 AI한테 내 IP 확인 커맨드를 물어봤다. ipconfig getifaddr en0 그랬더니 192.168.0.2 가 떴다. 네이버에 요청을 보내니 허용되지 않은 IP라는 답만 받았다. 이것 저것 알아보면서 2시간을 낭비했고, 혹시나 싶어 구글에 내 공인 IP 확인 사이트에 들어가서 확인해보니 내 IP는 전혀 달랐다! 이 값으로 설정하니 바로 요청이 성공했다. 그럼 저 IP는 뭔가 찾아보니, 사설 IP라고 한다. ...

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

잘 만들기 잘했다.

Today I Learned 날짜 2024년 10월 4일 금요일 내용 다음 주 네이버 스마트스토어에 배포할 새로운 서비스에 들어가기 전, 긴급하게 아임리포트를 수리했다. 기존 몇 개의 로우데이터 타입을 삭제하고 새롭게 추가해야 하는데.. 생각보다 상당히 금방 됐다. 이틀 걸릴 줄 알았는데 3시간 정도…? 추상 클래스나, 디렉토리 구조 등을 내가 평소에 생각하고 고민했던 걸 충분히 반영했더니 유지 보수가 상당히 쉽다. 열심히 고민한 보람도 있고… 근데 다른 사람이 볼 때는 어떨란지 모르겠다. 회고 문서화 다해놨는데 싹 갈아 엎어야하네 아오 ...

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

검색광고에서 키워드와 검색어는 다르다

Today I Learned 날짜 2024년 10월 2일 수요일 내용 키워드와 검색어는 다르다. 아임리포트에 데이터 오차 문제를 해결하다가 큰 문제를 발견했다… 네이버 검색광고 데이터엔 키워드와 검색어라는 게 있는데, 난 그동안 이게 같은건 줄 알았다. 코드 상에서도 혼동해서 쓰고 있기도 했고… 하지만 이 둘은 명백히 다른 데이터다. 모든 캠페인 내 광고그룹들은 항상 검색어를 가진다. 하지만 키워드는 어떤 광고그룹들은 가지고 있지 않은 경우가 있다. 예를 들어, 쇼핑몰 상품형 광고그룹 데이터들은 키워드를 가지고 있지 않아서 조회할 수 없다. ...

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

2023년 10월 4주차, 11월 1주차 2주간 기록

주간기록 날짜 2023년 10월 23일 ~ 2023년 11월 05일 계획 책너두 : Real MySQL 8.0 1권 팀스파르타 Devcamp 심화과정 GSAT 공부 10월 23일 : LG CNS 1차 면접 10월 29일 : GSAT 결과 10월 27일 데브캠프 심화교육 종료 회원가입 및 로그인, 소셜 로그인(네이버, 카카오, 구글) 구현 완료 취준 종료 회고 데브캠프도 너무 바빴고, 취업준비가 끝나면서 일주일간 아예 놓고 쉬면서 여러 생각도 하고 준비도 했다. 자세한 회고는 따로 남긴다.

2023년 11월 5일 · 1 분 · 배준수

2023년 10월 3주차 주간 기록

주간기록 날짜 2023년 10월 16일 ~ 2023년 10월 22일 계획 책너두 : Real MySQL 8.0 1권 팀 스파르타 Devcamp 심화과정 : NestJS + TypeORM + PosgreSQL GSAT 공부 10월 22일 : GSAT 예비소집 결과 데브캠프 심화교육 회원가입 및 로그인 구현 완료 카카오 로그인 구현 완료 회고 취직했다! 아직 안끝났으니 긴장 풀지말고 조금만 더 힘내자

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