마크 주커버그와 5가지 액세스 토큰의 비밀

Today I Learned 날짜 2024년 6월 10일 월요일 내용 페이스북과 인스타그램은 하나인듯 하나가 아님. 진짜다. 내가 페이스북을 끊은지 오래되었고, 인스타그램을 계정만 만들어놔서 혼나는건지 모르겠으나 얘네는 자기들 맘대로 공유하고, 분리하고 난리부르스를 친다. 상당히 맘에 들지 않으나 내가 뭘 할수 있겠는가. 그저 열심히 Docs를 읽고 만들었다. 이번 기능은 “인스타그램 비즈니스 계정”에서 게시글에 달린 댓글을 가져와야 한다. 그래서 난 인스타그램 계정에 접근하는 법을 열심히 알아봤고 기능을 구현했다. 그리고 인스타그램 비즈니스 계정과 그냥 계정은 다르다는 사실을 깨달아버렸다. 그래도 언젠가 쓰지 않을까? 하는 마음으로 한구석에 조용히 쑤셔넣어놨다. ...

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

에러 알람과 예외처리의 난관

Today I Learned 날짜 2024년 6월 8일 금요일 내용 에러 알람 휴일에 쉬는데, 실서버에서 에러가 난다고 온갖 알람이 오두방정을 떤다. 다행히(?) 서버 트래픽의 문제라던가, 기능상의 문제는 아니였고 크론이 실행되는 도중 발생하는 문제였다. 자동적으로 업데이트 되야할 데이터가 원할하게 돌아가지 못했다는 뜻이다. 쉬는데 참 마음이 찝찝해서 금요일이 되자마자 실서버에서 처리해주었다. 원인은 크게 두가지였다. Orphan Data 직역하면 고아 객체긴 한데.. 관계된 데이터가 없다는 뜻이다. 예를 들어, 우리 서비스에선 Shop 데이터가 존재하면 이 하위 개념으로 shop_detail 데이터가 존재하게 된다. 영속성 전이(CASCADE)를 설정해놓으면 shop이 삭제될때 연관된 shop_detail도 따라없어져야 한다. 그럼에도 불구하고 아주 낮은 확률로 혼자 남아있는 shop_detail이 발견된다면 연관된 shop이 없는 이 shop_detail 데이터를 고아 객체라고 부르는데, 이것 떄문에 발생하는 오류들이 꽤 있었다. 버그나 로직의 구멍이 있다기 보단, 초기 개발때 로직이 불완전한 상황에서 만들어진 데이터들로 인해 생긴듯 하여 커맨드를 작성해서 지워줬다. ...

2024년 6월 7일 · 2 분 · 배준수

브라우저 부스터 많관부

Today I Learned 날짜 2024년 6월 5일 수요일 내용 실서버 배포 드디어 브라우즈부스터가 출시됐다! 그리고 처음으로 나 혼자 실서버를 배포했다. 슨배임의 기가 막힌 문서작성능력으로 아무 탈없이 배포를 완료했다. 혹시나 뭔일 날까 싶어 벌벌 떨긴했는데 큰 이상은 없었다. 미리미리 실서버 배포할 때 돌려야할 커맨드, 추가해야할 크론, 마이그레이션 내용을 작성해놓은 덕분인 듯. 임베디드 앱 다음 앱은 기존과 달리 쇼피파이 어드민 페이지 내에서 임베디드 형태로 출시하기로 했다. 서버는 그대로 유지하지만, 기존과는 전혀 엮이지 않도록 처리하려고 한다. 브라우저 부스터도 병렬적으로 별개의 앱이긴 했으나 결국 최상위단에서 계정을 기준으로 묶였으므로 아예 별개라고 하긴 어려웠으나, 이번 앱은 전혀 겹치는 부분이 없도록 만들려고 한다. 나중에 사용자가 늘어서 트래픽을 많이 소모한다면 서버를 분리하는 작업을 해야겠지만.. 그랬으면 좋겠다. ...

2024년 6월 5일 · 1 분 · 배준수

쇼피파이 임베디드 앱

Today I Learned 날짜 2024년 6월 4일 화요일 내용 쇼피파이 임베디드 앱 임베디드 앱이라 하면, 쇼피파이 어드민 내에서 작동하는 앱을 의미한다. 기존 우리 앱을 실행할 경우 우리가 별도로 구현한 서비스 페이지로 이동한다. 임베디드 앱은 아이프레임을 이용해 쇼피아이 어드민 내에서 내부의 창을 통해 접속한다. 쇼피파이 어드민에서 접근하기 때문에 별도로 계정을 처리해야 할 스트레스가 없다는 것이 장점이다. 이 장점은 나에겐 별도의 스트레스가 되었다. 우리 서비스는 2개의 서버로 구성된 MSA 방식이라 샵과 리뷰를 기준으로 구분되어 있다. 이번 스프린트에서 만들 기능은 별도의 앱이긴 하나 매우 작은 기능이라 데이터가 거의 없다. 테이블도 하나면 충분하고, 거기서도 shopify에서 주는 access_token 만 저장하면 된다. Redis에 데이터를 저장하지 않기 떄문에, 분리할 경우 불필요한 리뷰서버와 샵서버 간 통신이 많아 질거라고 생각해 이 서비스는 리뷰서버에서만 처리되도록 구현할 계획이다. ...

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

인스타그램 스프린트 시작

Today I Learned 날짜 2024년 6월 3일 월요일 내용 인스타그램은 인생의 낭비가 아니다. 다음 스프린트로 인스타그램에서 댓글들을 가져오는 기능을 추가하게 되었다. API를 이용하면 크게 어려울 것 없다고 생각했는데 이것저것 코드를 끄적이다보니 생각대로 잘 안되는 부분이 있다. 결국 서버는 유저의 access token으로 각 요청을 다뤄야 한다. 이 토큰이야 로그인을 통해 인스타그램 내에서 우리 앱을 허용하면 우리가 받게 될 거라고 생각한다. 테스터 계정을 등록해서, 임의의 액세스 토큰을 가지고 여러 요청들을 처리해 볼 수 있는데, 원하는 데이터가 안가져와진다! 이번 스프린트 상당히 쉽지않아 보인다. ...

2024년 6월 3일 · 1 분 · 배준수

실서버 배포 문제 (2)

Today I Learned 날짜 2024년 5월 31일 금요일 내용 실서버에서 놓친 부분 아침에 갑자기 리뷰 작성페이지가 열리지 않는 것, 리뷰와 평점이 상품과 함께 나타나지 않는다는 이슈가 생겼다. 헐레벌떡 알아보니 메타필드가 문제였다. 메타필드에는 shop_access_code가 저장된다. 이번에 새로운 앱을 추가하면서 shop_access_code를 6글자에서 8글자로 변경했다. 메타필드는 업데이트 해주지 않았는데, 테스트 서버에서 큰 이상이 없었기 떄문이다. 또한 혹시나 싶은 마음에 항상 access_code를 처리할 때 6글자면 8글자로 바꾸어 인식하도록 추가해놨었다. 그런데 실서버에서만 문제가 됐다. 커맨드를 몰려 모든 샵들의 메타필드에서 샵액세스코드를 6글자에서 8글자로 업데이트해주었다. ...

2024년 5월 31일 · 1 분 · 배준수

클래스로 묶는 것은 항상 좋은 코드인가?

Today I Learned 날짜 2024년 5월 30일 목요일 내용 클래스로 묶는 목적 리스트 디자이너 고도화 작업중에 고민이 생겼다. 이번에 추가해야할 기능은 상품 자동진열 방식에 따라 자동으로 상품 목록을 업데이트 해주는 것이다. 위젯의 자동진열 기준이 판매량 순이라면, 매일 특정한 시간에 그 샵의 판매량 순서를 확인하고 변경이 있다면 위젯에 등록될 상품도 변경해줘야 한다. 기능 자체는 어찌어찌 만들었는데, 코드를 어디에 어떻게 배치해야 할지에 대해 나름 고민이 생겼다. 이 기능의 로직을 조금 더 작은 단위로 구별해보면 다음 순서로 이루어진다. ...

2024년 5월 30일 · 3 분 · 배준수

실서버 배포 1차시도 실패

Today I Learned 날짜 2024년 5월 29일 수요일 내용 실서버 배포 오늘 처음으로 내가 실서버를 배포했다. 뭐 잘못될까봐 무서운데 여러모로 크고 작은 문제를 겪었다. EC2 인스턴스 내에서 데이터베이스 마이그레이션을 하는데, 파일 수정이 안됐다. alembic으로 새로운 변경을 적용할떄 보통 Enum 타입이 오류가 많이난다. 오늘도 나서, 해당 부분을 수정했는데 파일 저장이 안됐다. 파일을 읽고 쓸 권한이 없다고 경고창이 떴다. 전체 디렉토리, 특정 파일 모두 chmod로 권한을 줬으나 잘 안되다 갑자기 됐다. 지 맘대로여 아주.. ...

2024년 5월 29일 · 1 분 · 배준수

데이터베이스 정규화의 중요성

Today I Learned 날짜 2024년 5월 28일 화요일 내용 정규화와 연관된 데이터 업데이트 리스트 디자이너 고도화작업을 시작했다. 이전에 개발된 것에서 문제를 찾았는데, 상품 정보가 변경되어도 곧바로 리스트 디자이너 위젯에 적용되지 않는다. 우선 이 부분을 해결하려 했다. 계획상으론 그리 어렵지 않았는데, 웹훅을 이용해 상품이 업데이트 될 경우 그 상품이 ListDesignerProduct 에 연관된 데이터가 존재할 경우 그 데이터도 업데이트 시켜주면 될거라 생각했다. 하지만 예상치 못한 곳에 빠져 고민이 생겼다. 필요한 데이터는 product가 아닌 product_variants에 있다. ...

2024년 5월 28일 · 2 분 · 배준수

자잘한 QA 처리

Today I Learned 날짜 2024년 5월 27일 월요일 내용 QA 이것저것 자잘한 QA를 열심히 처리했다. 코어스크립트 활성화 여부를 체크할 때 알파플러스 앱 ID가 입력되고 있어서 제대로 반영이 안됨. 상품 등록할때 데이터베이스에선 상품 아이디를 secondary_product_id 로 처리하지만 스키마와 프론트에선 product_id 로 처리해서 데이터가 누락됨. 할인코드가 “THANKYOU” 로 시작되야 하는데 “BROWSE_BOOSTER”로 만들어짐 상품 정보가 변경되었을 때 반영이 안됨. 어떤 샵에 대한 웹훅인지 확인하는 과정에서 shop_url로 Redis 캐시를 확인하는데 새 앱 정보는 들어있지 않아 다른 앱 정보에서 샵을 찾고 있었음. 계정 설정 페이지에서 관계된 계정을 찾는데 잘못된 방식으로 탐색해서 화면에 출력되지 않음 관리자 계정을 추가할 때, 연관된 스토어 추가에 새로운 앱은 반영되지 않음 등등.. 배설한 업보가 많다 많아. ...

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