• 이번 주 한 일

    • 프로젝트에서 사용하는 기술 스택/라이브러리와, 선정 이유를 적어주세요.

      • AXIOS, CHEERIO
        • puppeteer를 활용하다가 요청시 발생하는 오버헤드가 커서 시간이 오래 걸린다는 점을 인지하고 네트워크 패킷 분석으로 API를 찾아 스크래핑 할 수 있다는 사실을 알게 되어 라이브러리 변경
      • oAuth
        • 소셜 로그인 구현시 필요
    • 팀 전체 (리더님께서 필두로 정리해 주세요.)

      • 스크래핑 데이터 저장
      • 소셜로그인
      • 신발 API 데이터 저장
      • 캘린더 메모 기능
    • 팀원 개인별로 작성해 주세요. (개인 5분기록 대시보드 캡쳐)

      • 이재헌
        1. 무한 스크롤링 이용하여 페이지 데이터 긁어오기
        2. 스크래핑 데이터 저장
      • 김유진
        1. rapid api에서 신발 데이터 구조 확인
        2. 신발 데이터 가져온 후 저장(16개 브랜드별 최대 1500개)
      • 강다빈
        1. 슈프라이즈 api 이용해서 응모 정보 긁어와 저장하기
  • 이외에도 기술적인 방향을 잡기 위한 질문을 정리해두시면 가장 좋습니다!

    → 단, “A는 어떻게 구현하나요”의 질문은 삼가주세요.

    → “A와 B를 알아보았는데, 둘 중 A가 낫다고 판단했는데 맞을까요?”의 식의 고민의 흔적을 담아 질문해주세요.

    • 김유진 : post 메서드로 body에 브랜드를 입력한 후에 100개의 데이터를 limit로 주고 api 호출을 해서 반복문을 통해 1페이지부터 15페이지까지 긁어오도록 했는데요 한 번 긁어오고 api 요청을 하지 않을 것이라서 이 post 호출을 지워야할지 아니면 guard를 통해서 관리자만 접근할 수 있도록 해야 하는지 모르겠습니다.

    그리고 브랜드별로 신발의 데이터가 1500개가 안될 경우에 페이지가 중간에 끊기게 되는데 계속 15페이지까지 긁어오게 되서 불필요한 api 요청이 생깁니다. break문을 써서 멈추고 싶은데 긁어온 데이터의 results 안에 id가 존재하지 않으면 멈추도록 하려고 했더니 데이터가 존재하는데도 break가 걸려서 어떤 방법으로 요청을 멈춰야하는지 알고 싶습니다.

    rapid api 사이트에서 테스트를 해보았을 때 데이터가 9개가 있다고 하는데 코드를 실행해서 데이터를 저장하려고 하면 데이터를 저장하지 못하는데 데이터가 적을 경우에 이런 상황이 발생합니다. 어떻게 해결을 해야 할 지 모르겠습니다.

    • 강다빈 : 현재 구조에서 서비스계층 객체 내에서 배열로 저장하고 그 정보를 다음api 호출에서 this.배열로 사용하는 방식인데 너무 이상한 구조인지 / 말씀해주셨던 큐 or 레디스로 고도화를 하는게 이런 방식에서 발전되는 건지 궁금합니다.

    위 질문에 이어서 만약 현재 상태로 유지하면서 고도화를 하려면 현재 map,filter,2중반복을 타서 오래 걸리는거 같은데 (대략 10초이내) 이걸 변경하는 방법이 있을지 아니면 그냥 구조 자체를 변경해야하는지 궁금합니다.

    매일 응모 정보를 긁어오는게 맥스 200개 정도인것같은데 지금 구조는 반복문으로 하나씩 저장하고 있습니다 해본 결과 오류가 나도 해당 응모 정보만 왜 인지 트랜잭션이 알아서 롤백하면서 저장 안하고 나머지는 올바르게 저장하고 있어서 이걸 굳이 저번에 얘기해주셨던 5~10개 저장방식으로 변경해야하는지? 궁금합니다.

    그리고 오류가 나는곳이 지금 QueryFailedError: Unknown column 'NaN' in 'field list’ 이건데 api에서 받아올때 해당 키 자체가 없을때 이게 뜨고 있는 상황이어서 엔티티에 nullable처리 해주고 삼항식으로 해당 키값이 없는 경우 null 을 넣도록 해줬음에도 NaN이 뜨는 이유가 뭔지 모르겠습니다!

    • 최인철 : 일반사용자와 카카오로 로그인한 사용자랑 메모를 전부 적을 수 있게 구현을 해야하는데, 일단 일반 사용자는 메모를 작성할 수 있지만, 카카오로 로그인한 사용자는 작성이 되질 않습니다.. 두 사용자 모두 로컬db에 저장이 되어있고, 아직 플로우를 정확하게 이해를 하지 못해서 카카오 로그인이 제대로 된건지도 궁금합니다..

    • 이재헌:

    • 현재 스크래핑을 API 요청으로 받아오고 있습니다. 인섬니아에 제가 만든 스크래핑API를 요청하지 않고 서버를 시작하면 자동으로 스크래핑될 수 있게 하려면 어떤 방식을 써야하는지 알고 싶습니다. https://docs.nestjs.com/techniques/task-scheduling

    • puppeteer를 쓰고있다가 오버헤드가 엄청나다고 느껴 axios, cheerio를 사용하는 방식으로 바꾸어 url을 가져 오는데까지 성공했지만, 스크롤을 내릴 때 숨어 있던 페이지들이 생겨 어떤 API 요청이 왔을 때 페이지가 로드 되는지는 패킷 분석을 통해 page가 번호 순으로 나열되어있다는 걸 확인하고 아래의 데이터를 콘솔로 찍어 확인했습니다.

    posts: { page: 1, pages: 626, total: 6257, limit: 10, _links: { self: [Object], first: [Object], last: [Object], next: [Object] }, _embedded: { items: [Array] } },

    위 로그를 확인하고, 5번의 반복문을 돌려 총 50개의 뉴스 url을 뽑고 싶었는데 가져와지지 않는 상태입니다.

    그래서 현재 가장 최근에 게시 된 뉴스 10개만 가져와서 뉴스 데이터를 저장하여 조회할 수 있게 해주는 방식을 채택해도 되는지 고민입니다.

  • 숙제: 멘토링 결과 다음 주까지 해올 일

    • 팀 전체 (리더와 부리더님께서 필두로 정리해 주세요.)

    • 팀원 개인별로 작성해 주세요.

      • 이재헌
        1. 쿼리빌더를 사용한 이유와 ORM에서 사용할 수 있는 방법이 무엇이 있는지 알아보기
        2. 인덱스란게 무엇인지, 사용하는 이유 알아보기

      최인철

      소셜로그인 플로우를 이해하고, 라이브러리 사용 시 어떤 흐름으로 쓰여지는지를 공부하기.