alembic revision의 의미

Today I Learned 날짜 2024년 11월 20일 수요일 내용 Alembic revision FastAPI에선 Postgresql 의 마이그레이션을 위해 alembic을 사용한다. Django 처럼 프레임워크에서 제공하는 ORM이 없다보니 SQLAlchemy 를 사용하는데, 이 SQLAlchemy에서 제공하는 도구다. alembic revision --autogenerate 라는 명령어로 데이터베이스 변경 내역을 스크립트로 만들고, alembic upgrade head 명령어로 입력한다. 네이버 상품 상세페이지에 추가되는 이미지에 이제는 인스타그램 게시글도 추가되도록 만들었다. 오늘이 실서버 배포날이라 실서버에서 마이그레이션을 적용하는데 이런 오류가 떴다. 1 2 3 4 File "/usr/local/lib/python3.12/site-packages/alembic/script/revision.py", line 245, in _revision_map down_revision = map_[downrev] ~~~~^^^^^^^^^ KeyError: 'eea2e21515bc' 이게 무슨소리인고 찾아보니 이전 스크립트가 없다는 의미다. 이해를 위해 revision에 대해 알아보자. ...

2024년 11월 20일 · 3 분 · 배준수

크론 전수검사

Today I Learned 날짜 2024년 11월 19일 화요일 내용 크론 총 점검 네이버와 쇼피파이에서 제공하는 서비스에는 여러 크론이 돌아간다. 우선 현재는 매일 인스타그램 계정, 미디어, 댓글 상태를 업데이트 매일 인스타그램 미디어 URL이 만료되면 최신화 매일 네이버 배너이미지에 포함될 댓글을 최신화 매주 월요일 네이버 배너이미미지를 상품 상세페이지에 업로드 구글 스프레드시트에 현재 사용 데이터를 업로드 가 돌아간다. 이 중 1,2는 같이 돌아가는데 미디어 데이터와 댓글 데이터가 워낙 많아서 그런지 벌써부터 4~5시간 씩 걸린다. 서비스가 더 커지기 전에 조치를 내려야겠다 싶어 QA 기간에 이것저것 수정했다. ...

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

파이썬 HTML 엔티티

Today I Learned 날짜 2024년 11월 18일 월요일 내용 HTML 엔티티 매주 월요일, 네이버 상품 상세페이지를 조회하여 지난 주에 추가해둔 게 잘 있는지 확인한다. 상품 상세페이지는 HTML로 작성되어있어서, 이미지 태그를 추가해놨다. <img src="...../상품명" 이 친구를 찾으면 되는데, 분명히 있는데도 없다고 뜬다… 뭔가 싶어 상세페이지 전체를 확인했다. 왜 &가 & 로 바뀌어 있나 했더니 HTML 엔티티라고 한다.특수문자가 HTML 엔티티로 바뀌는 이유를 친구에게 물었다. 1 2 3 1. HTML 엔티티는 특수문자를 안전하게 표현하기 위한 표준 방식입니다. 2. <, >, & 등의 문자는 HTML 구조를 깨트릴 수 있기 때문에 엔티티로 변환됩니다. 3. 자동 변환된 HTML 엔티티는 html.unescape() 또는 브라우저의 파서를 통해 원래 문자로 복원할 수 있습니다. 더 자세히 말해달라고 했다. ...

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

순서 변경해서 사용성 높이기

Today I Learned 날짜 2024년 11월 15일 금요일 내용 순서의 중요성 유저가 진입하여 인스타그램 계정을 연동하면 관련 데이터를 불러온다. 기존에 로직은 포스트 데이터 불러오기 → 각 포스트마다의 댓글 불러오기 이후 배너이미지를 생성할때 선정된 게시글의 댓글들만 GPT로 평가 였다. 초기 스토어들이 각 게시글마다 댓글이 거의 없는것을 알게 되었고, 개선작업에서 계정에 있는 모든 댓글에서 적합한걸 불러와주기로 했다. 따라서 댓글을 처음 가져와 저장하는 시점에 점수를 판정해야 한다. 또 바뀐건, 포스트를 가져오는 로직이다. 기존에는 첫 로그인시 50개를 가져온 후, 그날 밤 크론을 통해 모두 다 불러와줬다. 이걸 바꾸어서 첫 로그인시 그냥 다 가져와주기로 했다. 따라서 로그인하면 모든 게시글을 불러오고 모든 댓글들을 불러오고 모든 댓글들을 검사해야 한다. ...

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

epoch 시간

Today I Learned 날짜 2024년 11월 14일 목요일 내용 인스타그램 미디어 URL의 만료시간 인스타그램 미디어는 일정 시간이 지나면 URL이 바뀐다. 따라서 위젯으로 만든 사진이나 비디오, 썸네일은 모두 엑박으로 변해버린다.. 이게 변하는 시간도 정확히 알수가 없어서, 현재는 하루에 2번이나 모든 미디어의 링크를 다시 인스타그램에서 받아온다. 그런데 개발민수님에게 꿀팁을 들었다. 링크 끝에 시간을 나타내는 값이 있다고한다. https://scontent-ssn1-1.cdninstagram.com/v/t51.29350-15/459768583_1048138156946599_8516737515[…]64gm1R92wFZfLsMr7Ut1kMJCpkn1VbHdC2m6uY7A&oe=66FBE2F9 링크는 이렇게 생겼는데, 끝에 oe값이 시간을 나타낸다고 한다. 이 66FBE2F9 를 10진수로 바꾸면 1727783673 가 나온다. 이건 epoch 라는 타입의 시간인데, 실제 우리가 볼 수 있는 시간대로 변환하면 ...

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

인스타그램 Carousel_album

Today I Learned 날짜 2024년 11월 13일 수요일 내용 진짜 모든 미디어를 저장하기 이번 스프린트에 유저의 태그된 게시글도 불러와야 한다. 이것 자체는 상당히 간단했는데, /tags 엔드포인트로 요청을 보내면 다 가져왔다. 문제는 캐러셀 타입의 포스트들이다. 인스타그램 미디어에는 3가지 종류가 있다. IMAGE, VIDEO, CAROUSEL_ALBUM 이다. 게시글을 올릴 때 뭐가 됐든 하나만 올리면 IMAGE, VIDEO 로 올라가지만 여러 장을 올릴경우 CAROUSEL_ALBUM으로 올라간다. 이떄 데이터에 담긴 media_url 은 가장 처음에 나오는 이미지를 대상으로 한다. 나머지 뒤에 있는 것들은 이 미디어의 children들로 처리된다. 사실 이 말이 엄밀하진 않은게, 이 children에는 자기 자신도 포함된다. 즉 게시글에 사진을 3장 올리면 children 안에 3개의 Child 데이터가 존재하는 셈이다. 즉 ...

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

불친절한 메타

Today I Learned 날짜 2024년 11월 12일 화요일 내용 태그된 게시물 인스타그램엔 태그라는게 있다더라. 나는 안해서 모르지만.. 그냥 해시태그인줄 알았는데 다른 개념이다. 유저가 올린 포스트에 말풍선 모양으로 다른 유저를 태그할 수 있다. 쇼핑몰 주인이 올린 게시글은 사실 제품 상세페이지에도 포함된 경우가 많고, 실제로 도움이 될만한 것들은 그 쇼핑몰이 태그된 게시물들의 사진이라서 태그된 게시물도 가져오기로 했다. 그리고 기존에는 각 게시물의 대표이미지만 가져왔으나 이젠 그 옆에 같이 올라가 있는 이미지들도 가져오려고 한다. ...

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

1주 단기 스프린트

Today I Learned 날짜 2024년 11월 11일 월요일 내용 초 단기 스프린트 네이버 커머스 솔루션에 오는 고객들의 사용 실태를 파악했다. 댓글을 이미지로 만들어 줘야 하는데, 댓글이 없는 분들이 많아 급하게 단기 스프린트를 진행한다. 인스타그램에 올린 게시글들도 포함해주기로 했다. 당장 다음주부터 시작할 스프린트가 있는데… 이번주도 다이나믹해질 것 같다. 회고 아침에 7시 50분에 일어났다. 지각으로 인해 반차를 썼다. 슬펐다. 그 시간에도 여전히 자고 있지만 지각하지 않는 사람도 분명 있을텐데..

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

셀레니움에 모든 이미지 인식시키기

Today I Learned 날짜 2024년 11월 8일 금요일 내용 이모지 인스타그램 댓글엔 이모지를 참 많이 쓴다. 그저께 TIL에도 썼듯이, 하트는 어떻게 해결했는데 여전히 몇가지 이모지가 텍스트로 나와 상당히 거슬린다. 이렇게 나온다.. 어떻게 할까 하다가 GPT가 기가 막힌 아이디어를 제공해줬다. 저 이모지를 태그로 씌운후 클래스를 설정해서, 그 클래스에만 폰트를 적용하는 거다. 🤣 를 <span class="emoji" style="padding:0;">🤣</span> 이런식으로 감싼 후, HTML 스타일에 1 2 3 .emoji { font-family: 'Noto Color Emoji', 'Apple Color Emoji', sans-serif; } 를 추가해줬다. 이제 관건은, 어떻게 이모지를 감지할 거냐는 건데.. 인스타그램에서 자주 쓰이는 이모지 10개만 처리할까 하다가 파이썬에 이모지 라이브러리가 있다는 게 기억났다. 이모지 라이브러리를 이용해 감지해서 태그를 감싸되, 이모지를 HTML 엔티티로 변경하고 Markup으로 감싸줬다. 감싸주지않으면 저 태그자체를 그냥 문자열로 파악해서 적용이되지 않는다. ...

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

GA4 Measurement Protocol 테스트하는 법

Today I Learned 날짜 2024년 11월 7일 목요일 내용 Google Measurement Protocol 아임리포트의 사용 실태(?)를 확인하기 위해, 구글 애널리틱스에 이벤트를 전송하는 기능을 추가해야 한다. 분명 요청은 204가 뜨는데, 이벤트에서 감지가 안된다… 처음 해보는 거라 어떻게 디버깅을 해야할지 몰라서 애를 먹었다. 열심히 찾아보니 역시 답은 나온다. https://ga-dev-tools.google/ga4/event-builder/ 여기 링크에 들어가면, 내가 보내려는 데이터의 형식이 올바른지 테스트할 수 있다. 이런식으로, 제대로 된 값이 갖춰지면 밑에 올바르다고 뜬다. 저 SEND TO GA를 누르면 실제 보내볼수 있다. ...

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