ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <TIL> 외부 API 요청 응답 시간 개선
    클래스/└ TIL 2022. 5. 10. 00:20
    728x90

     

    🧭

     

    깃헙 이슈 생성

    깃헙에서는 프로젝트에 대한 이슈를 생성해서 필요 기능 구현, 디버깅, 마일스톤 관리 등을 할 수 있습니다.

     

    외부 API 요청 성능 개선

    좌표값을 구하기 위해 카카오 API 및 공공 API를 활용하고 있습니다.

    요청 3개를 보낼 경우 3.022s, 10개를 보낼 경우 9.666s 정도 소요되었습니다.

    각각의 요청을 병렬처리하여 응답속도를 개선하였습니다.

    요청 3개를 보낼 경우 1.027s, 10개를 보낼 경우 1.353s 정도 소요되었습니다.

    그러나 429 Too Many Requests 에러를 응답받았습니다.

    40~50개의 요청을 한번에 보내다보니 kakao API에서 응답을 거부하였습니다.

    어쩔 수 없이 요청을 20회로 나누어 보냈습니다.

    대신 시간이 4초대로 늘어났습니다.

    프로젝트에서 중요한 부분이라 시간을 단축시킬 방법을 조금더 찾아봐야 겠습니다.

    (다음날 이벤트를 미리 만들어 둔다든지...)

    주소 데이터가 비어 있는 경우에는 filter 처리해서 불필요한 데이터를 프런트엔드로 보내지 않도록 하였습니다.

    현재는 주소 데이터를 페이지당 1개씩 랜덤하게 가져오지만, 정말 랜덤하려면 무작위 페이지에서 무작위 주소 데이터를 추출하는 방식으로 변경하는 것을 고려해야 합니다.

     

    TypeORM 시작하기

    1) mysql2, typeorm, @nestjs/typeorm 설치

    2) 설정

    2-1) app.module에 forRoot(config)를 imports

    2-2) quests.module에 entity, repository를 imports

    3) 코드

    3-1) entity 작성 - 테이블 생성 / 테이블 간 관계 정의

    3-2) dto 작성 - 컬럼 생성시 데이터 검증

    3-3) repository 작성 - 실제 DB 다루는 로직

    3-4) service 작성 - repository를 활용해 DB를 다루는 코드 작성

     

    TypeORM 작성하기

    1) 데이터 저장 - find로 찾은 데이터를 OneToMany 관계의 데이터 생성시 추가하면 id 값으로 들어갑니다.

    2) 소수점 작성방법 - 고정 소수점 방식과 부동소수점 방식이 있습니다.

    2-1) @Column('decimal', { precision: 9, scale: 6 }) - 고정 소수점 방식

    2-2) precision은 실수의 총 자릿수, scale은 소수 부분의 자릿수를 지징합니다. (위 예제의 경우 987.654321)

    2-3) precision이 scale보다 작은 경우 아래와 같은 QueryFailed 에러가 발생합니다.

     

    깃헙 정리

    과거 무의미하게 작성했던 레포지토리를 정리했습니다.

    20년 하반기 ~ 21년 상반기까지 깃헙이 꽤나 듬성듬성합니다.

     

    728x90

    '클래스 > └ TIL' 카테고리의 다른 글

    <TIL> git reset, TypeORM, Jest  (0) 2022.05.14
    <TIL> 오늘 만난 에러들  (0) 2022.05.11
    <TIL> git(hub), API 요청  (0) 2022.05.08
    <TIL> 한글 키워드로 주소 검색하는 방법  (0) 2022.05.06
    <TIL> 카카오 로컬 API, git pull  (0) 2022.05.06
And bytes to code before I sleep.