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

네이버가 보고서를 주지 않는다.

Today I Learned 날짜 2024년 12월 16일 월요일 내용 네이버는 왜 주지 않는가 아임리포트 자동 업데이트 떄, 생성한 보고서 조회 요청에 자꾸 빈 값이 들어온다. 무작위로 중구난방하게 발생하고 있어 원인을 도저히 파악할 수 없다. 특히나, 매일 아침 실행되는 실서버 정기 업데이트에서만 발생하기 때문에 버그를 재현할 수 없다는게 가장 큰 문제… 일단 구체적으로 어느 날짜의 보고서 조회가 빈값을 반환하는지 확인할 수 있도록 로그문을 추가해놨다. 실제로 없어서 안주는 건지, 뭐가 잘못된건지 내일이면 알 수있지 않을까! ...

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

pre-signed url 이 0 Unknown error를 반환할 때

Today I Learned 날짜 2024년 12월 13일 금요일 내용 pre-signed url이 작동하지 않는 이유 현재 티켓페이지에서 사용자가 추가한 이미지와 파일을 저장하는 방식은 그다지 좋지 않다. 서버에게 티켓의 이미지와 파일을 S3에 저장해달라고 요청을 보냄 서버는 저장 후 그 링크를 반환함 반환받은 링크를 티켓 데이터에 추가하여 티켓 데이터 생성 요청을 보냄 이 방식이다. 만약 클라이언트가 S3에 저장할 수 있다면 굳이 서버에게 파일을 보내지 않아도 된다. 이를 위해 pre-signed-url을 보내도록만 요청을 변경해야 한다. 이 URL은 설정한 시간만큼만 유효한 URL이다. 서버에게 어떤 버킷 내 어떤 키에 생성해야 할지 알려주고 url을 받아왔으나 생성이 되지 않는다. 클라이언트의 요청에 0 Unknown Error만 나와 정확한 원인도 모른다… 구글링을 한참 해보니 pre-signed url을 생성하기 위해 boto3 클라이언트를 초기화할 때 리전을 입력해보라고 한다. ...

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

path parameter를 선택적으로 받기

Today I Learned 날짜 2024년 12월 12일 목요일 내용 선택적으로 path parameter 받기 쇼핑몰 상세 페이지에서 오른쪽 네비게이션 바를 통해 티켓을 볼 수 있다. 이 티켓을 클릭하면 티켓 페이지를 새창으로 띄워줘야 하고 상세보기에는 해당 티켓이 나타나야 한다. 티켓페이지에선 상세보기도 하위 컴포넌트로 구현되어 있어서 어떤 티켓을 눌러도 중앙 쪽에 있는 돔에만 변화가 생길뿐 나머지는 그대로다. 즉, 티켓 페이지의 최상위 컴포넌트에는 정해져있는 로직에 따라 최초로 상세보기에 띄울 티켓을 선택할 뿐이고 그 외는 없어서 구현해야 했다. ...

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

구독 : 데이터 확정 후 실행하기

Today I Learned 날짜 2024년 12월 11일 수요일 내용 리마인더 알람기능 이것저것 아주 간단한 기능들을 고치거나 만드는 중. 기본 코드가 워낙 보기 쉽게 잘 짜여져있고 로직도 단순해서 큰 어려움은 전혀 없었다. 다만, 리마인더 기능은 조금 고민이 들었다. 티켓에는 리마인더 기능이 있는데, 노션에서 처럼 일정 기간 후 유저에게 알려줘야 한다. 물론 유저가 티켓 페이지에 접속했을 떄만.. 그래서 유저가 티켓 페이지에 들어왔을 때 리마인더를 조회하도록 했다. 설정된 리마인더 시간이 가장 빠른 것부터 보여준다(다시 말하면 알람이 울린지 가장 오래되었다는 뜻). ...

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

2년차 개발자

Today I Learned 날짜 2024년 12월 10일 화요일 내용 코어 작업에 투입되었다. 아는 구조, 로직, 코드가 하나도 없어서 작은 태스크부터 맡기로 했는데 우선 티켓 관리 페이지 QA부터 처리하기로 했다. 프론트까지! 딱 작년 이맘때에 첫 태스크를 맡았을 때의 느낌이 난다. 1년동안 열심히는 살았는지, 로직 파악이나 코드 파악 등도 훨씬 빨라졌고 로컬 세팅도 알아서 잘 했다. 첫 시작으로 아주 좋은 태스크를 맡은 듯 하다. 회고 정말 오랜만에 다른 사람의 코드를 보는 거라 뭔가 설렌다. ...

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

대기열 탐색 로직을 앞당기자

Today I Learned 날짜 2024년 12월 9일 월요일 내용 빠르게 대기열을 처리하자 아임리포트가 진행하는 매일 아침 정기업데이트가 심각하게 오래 걸린다. 이대로는 유저가 사용할 리가 없으니 최대한 줄이는 작업이 필요하다. 현재는 대기열 시스템을 만들었으나 약간의 로직상 구멍이 있다. 로우데이터 처리 로직이 끝나야만 대기열을 추적한다는 것.. 대기열 시스템이 존재하는 것은 네이버 API 사용 제한으로 인한 것이니 전체 로직중 가장 처음인 네이버 처리만 끝나면 대기열에 있는 로우데이터를 꺼내와 동시에 처리해도 무방하다. 이 부분을 처리할 방법이 떠올랐는데.. ...

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