권장하지 않는 방법과 편한 방법

Today I Learned 날짜 2024년 12월 31일 화요일 내용 권장되지 않는 방법은 해도 될까? 네이버 상품 상세정보에서 내가 추가한 태그를 확인해야 한다. 어떤 경우에 어떻게 변하는지 확인하기 위해 구체적으로 테스트 케이스를 설정했다. 약간의 배경지식을 더하자면 상품 상세정보 페이지는 HTML로 직접 작성하는 방식과 스마트에디터원을 사용하는 방식 2가지가 이용된다. 스마트에디터원은 HTML을 사용할 줄 모르는 사람을 위한 손쉬운 편집기 느낌이다. 사용자가 스마트에디터원으로 작성한 상품을 API로 수정할 경우, HTML 형식으로 무조건 변경된다. 그리고 HTML을 스마트에디터원으로 변경할 경우, 내용이 반영되지 않고 모두 제거된채 처음부터 다시 작성해야 한다. ...

2024년 12월 31일 · 3 분 · 배준수

되는 게 없는 날

Today I Learned 날짜 2024년 12월 30일 월요일 내용 되는게 정말 단 하나도 없는 닶도 없는 날이다. 네이버 상품 상세정보 조회하기 매주 월요일 오전, 네이버 상품 상세정보에 추가해놓은 이미지를 새로운 것으로 업데이트해야 한다. 이때 사용자가 상품 상세페이지에서 배너 이미지를 지웠다면 업데이트를 진행하지 않고 연동 중지 상태로 멈춘다. 따라서 업데이트 진행은 상품 상세정보에 저번주에 생성한 이미지가 있는 지에 따라 결정된다. 배너이미지의 HTML은 일정한 형식을 가진다. <a> 태그로 둘러쌓여있고, 안에는 <img> 태그가 있다. 이미지의 링크는 S3인데 내부 디렉토리도 정해진 규칙이 있다. 그래서 ...

2024년 12월 30일 · 2 분 · 배준수

태그된 게시물이 불러와지지 않음

Today I Learned 날짜 2024년 12월 27일 금요일 내용 태그된 게시물 태그된 게시물이 불러와지지 않는다는 이슈가 들어왔다. 확인해보니 진짜 안들어온다. 문제는 누구는 들어오고 누구는 들어오지 않는다는 것이다… {“error”:{“message”:“Unsupported request - method type: get”,“type”:“IGApiException”,“code”:100,“fbtrace_id”:“AJeSMqmb-9xrcVdqxJ9xf3L”}} 차라리 들어오는 계정이 눈에 띄는 특징(우리 테스트 계정만 들어온다던가)이라도 있었으면 답을 찾았을텐데 도저히 찾지 못했다. 태그된 게시물을 불러올 수 있는 계정과 불러올 수 없는 계정을 온갖 방법으로 비교해봤다. 액세스토큰 디버그 https://developers.facebook.com/tools/debug/accesstoken/ 에 들어가면 페이스북에서 받은 액세스 토큰을 디버그할 수 있다. 둘다 가진 권한이 똑같고, 유효한 토큰이라 토큰의 문제는 아니었다. ...

2024년 12월 27일 · 1 분 · 배준수

while문 무한루프가 발생한 이유

Today I Learned 날짜 2024년 12월 26일 목요일 내용 무한 루프 인스타그램에서 필요한 데이터들을 가져오는데 상당히 지나치게 오래걸린다. 이게 데이터가 많아서 그런거라고 생각했는데.. 충격적이게도 아주 허무한 코드 오류가 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 url = f"https://graph.instagram.com/{instagram_post.post_id}/comments" params = { "access_token": self.instagram_account.access_token, "fields": "timestamp,text,from,like_count", "limit": 50, } response = requests.get(url, params=params) res_json = response.json() if "data" in res_json: comment_arr += res_json["data"] while "paging" in res_json and "next" in res_json["paging"]: response = requests.get(res_json["paging"]["next"]) res = response.json() if "data" in res: comment_arr += res["data"] 이 코드였는데… 댓글이 50개 이상 있을 경우, 다음 페이지에 요청을 지속해서 보내는 반복문이다. 더이상 다음 페이지가 없을 때까지 반복된다. while문 안에서 새로 받아온 데이터를 res_json 이 아닌 res 로 지정해버렸다.. 그래서 res_json 은 최초로 보낸 요청의 것으로 계속 유지되어서 안에 while 문이 유지될 조건이 계속 충족되는 상태였고, 계속 똑같은 요청을 무한대로 보내고 있었다. 바보도 이런 바보가… ...

2024년 12월 26일 · 1 분 · 배준수

Postgresql Secondary Table에 필드 추가하기

Today I Learned 날짜 2024년 12월 24일 화요일 내용 secondary table에 필드를 추가하기 네이버 배너이미지에는 인스타그램 게시글의 사진이 포함될 수 있다. 한 게시글은 당연히 여러 이미지에 포함될 수도 있다. many to many를 설계 과정에서 어떻게 처리할지 고민하다가 secondary table로 구현했다. id로 4를 가진 네이버 배너이미지데이터가 생성되고 이 배너이지에 포함되는 게시글 3개의 id가 1,3,5라면 naver_banner_image_id instagram_post_id 4 1 4 3 4 5 secondary table에는 이렇게 저장이 된다. 만약 id가 12인 네이버 배너이미지가 생성되고 게시글을 3,5,22 를 id로 하는 데이터들을 포함한다면 ...

2024년 12월 24일 · 2 분 · 배준수

대형 고객님은 처음이라..

Today I Learned 날짜 2024년 12월 23일 월요일 내용 네이버 커머스 솔루션 쪽에 상당히 큰 업체가 들어왔다. 인스타그램에서 가져와야할 댓글만 16만개인데, 저장이 안되어있다. 실서버 EC2 로 돌려봤는데 몇시간 째 끝날 생각을 안한다… 잘 되고 있는거 맞나.. 회고 아프지 말자

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

secondary table에 필드 추가하기

Today I Learned 날짜 2024년 12월 20일 금요일 내용 순서를 저장하는 법 생성한 배너이미지에서 이미지 순서가 마음대로 변경된다는 이슈가 발견되었다. 난 인스타그램 포스트와 네이버 배너 이미지를 관계를 지어놨다. 여기에 순서는 반영되지 않으니 데이터베이스에서 불러올 때는 실제 유저가 선택한 사진 순서와 다를 가능성이 높았다. 그래서 이를 어찌 처리해야 하나 난감했다. 배너 이미지 데이터에 json 타입으로 데이터를 적어놔야 하나… 난 개인적으로 json 타입을 쓰는 걸 상당히 안좋아 한다. 차라리 테이블을 이나 필드를 만들고 필요할 때 마이그레이션을 하는게 낫지 않나 라는 생각과, 관리를 잘못하면 데이터 형식이 통일되지 않아 발생하는 문제들 등 때문이다. 뭔가 SQL을 쓰는 이점이 사라진다는 기분이 들기도 하고… ...

2024년 12월 20일 · 1 분 · 배준수

ThreadPoolExecutor로 병렬 처리하기

Today I Learned 날짜 2024년 12월 19일 목요일 내용 시간 단축을 위해 병렬 처리하기 네이버에서 홍보해준 덕에 인스타그램 UGC 서비스를 많은 사람들이 이용하고 있다. 그만큼 저장되어있는 인스타그램 계정과 게시글, 댓글 데이터도 늘어났는데 현재 게시글은 50만개, 댓글은 35만개가 저장되어 있다. 많아진 만큼 업데이트에도 상당한 시간이 소요되고 있는데, 크론이 거의 하루동안 돌아가기도 한다. 로직은 계정 데이터(팔로우 수, 게시글 수 등) 업데이트 게시글 데이터를 가져와 새로 생성된 것 추가하기 기존에 저장된 데이터와 비교하여 삭제된 게시글 삭제하기 태그된 게시글을 가져와 새로 생성된 것 추가하기 기존에 저장된 데이터와 비교하여 삭제된 태그된 게시글 삭제하기 이다. 6백개의 계정 하나하나씩 이 모든 로직을 처리해야 한다. 당연히 오래걸릴터이니 이에 대한 개선이 필요했다. 각각을 람다함수로 처리하고 이 람다함수를 관리하는 걸 SQS가 하면 어떨까 생각했고 이에 대해 코드브루 시간에 태용님께 여쭤봤는데 병렬처리에 관한 아이디어와 코드를 주셨다. 당연히 훨씬 구현이 쉬웠고 변경점도 적었다. 각 인스타그램 계정은 데이터가 서로 독립적이라 이렇게 처리되도 문제가 될게 없었다! 그래서 코드는 ...

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

욕심부리지 않고 나눠 먹기

Today I Learned 날짜 2024년 12월 18일 수요일 내용 욕심 금지 최근 아임리포트에서 구글 스프레드시트 업데이트하는 요청이 실패하는 경우가 많다. 특히 키워드 데이터를 넣을때가 문제가 되는데, 아무래도 데이터가 너무 많아서 업데이트 요청이 지나치게 오래걸리고, 타임아웃으로 실패하는 듯 하다. 그래서 데이터 제한을 15만에서 10만으로 줄였다. 그럼에도 이 문제는 나아지지 않았다. 하지만 더 줄인다면? 데이터를 더 적게 줘서 돌아간다면 모든게 해결될까? 정작 유저가 필요로 하는 만큼의 데이터를 주지 않는다면 아무 의미가 없다. ...

2024년 12월 18일 · 1 분 · 배준수

데이터베이스 세션 관리의 중요성

Today I Learned 날짜 2024년 12월 17일 화요일 내용 드디어 마침내 결국 찾은 오류의 원인 지난주부터 아임리포트에 이상한 현상이 발견되었다. 네이버에서 대용량 보고서 요청을 보내도 빈 응답값이 반환되는 현상이다. 끈질기게 원인을 찾았으나 결국 찾지 못했는데, 증상만 보면 다음과 같다. 매일 오전에 실행되는 자동 업데이트에서만 발생한다. 수동 업데이트를 아무리 많이 보내봐도 재연되지 않는다. 요청에 대한 응답 코드는 200이나 빈 배열이 반환된다. 발생하는 로우데이터, 날짜 모두 불분명하다 여러 시나리오를 추정해봤으나 발견하지 못했다. ...

2024년 12월 17일 · 3 분 · 배준수