# 원티드 프리온보딩 백엔드 인턴십 7th : 231108 TIL

- Author: @laetipark
- Published: 2023-12-03
- Updated: 2023-12-31
- Source: http://blex.me/@laetipark/%EC%9B%90%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A6%AC%EC%98%A8%EB%B3%B4%EB%94%A9-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%9D%B8%ED%84%B4%EC%8B%AD-7th-231108-til
- Tags: 백엔드, til, nodejs, nestjs, 원티드, github, 프리온보딩, 캐시, cache

---

### 1️⃣ 할당된 업무에 대한 진행상황.
`In Progress`: 코드 검토 및 Readme.md 및 REST API 작성  
`Done`: 마이그레이션, 사용자 회원가입 및 로그인, 사용자 정보 조회 및 변경, 맛집 조회 API

### 2️⃣ 진행한 작업에 대한 리뷰 및 커밋한 내용 리뷰진행.
- 맛집 조회할 때 쿼리문 내 거리 조건에 대한 `filter`를 진행하고 정렬할 수가 없어 당장은 모든 맛집을 조회한 후 `then`을 통해 `filter`를 진행하였습니다.
- 하지만 맛집 목록이 많아진다면 이는 데이터 조회에 많은 시간을 소모할 것으로 생각하고, 이를 개선하는 방향을 찾아보고 싶습니다. 🤔
```typescript
await this.restaurantRepository
      .createQueryBuilder('r')
      .select(`r.id`, `id`)
      .addSelect(`r.placeName`, `placeName`)
      .addSelect(`r.business_type`, `business_type`)
      .addSelect(`r.business_state`, `business_state`)
      .addSelect(`r.road_name_address`, `road_name_address`)
      .addSelect(`r.city_name`, `city_name`)
      .addSelect(`r.latitude`, `latitude`)
      .addSelect(`r.longitude`, `longitude`)
      .addSelect(`r.view_count`, `view_count`)
      .addSelect(`r.total_rating`, `total_rating`)
      .where(`r.placeName LIKE :placeName`, {
        placeName: `%${search}%`,
      })
      .getRawMany()
      .then((result: any[]) => {
        // NOTE: 거리 조건에 대한 filter 진행 후 거리순 대한 정렬 작업
        const startIndex = (page - 1) * pageCount;
        return result
          .filter((item) => {
            return (
              this.utilService.latLonToKm(
                [item.latitude, item.longitude],
                [lat, lon],
              ) < range
            );
          })
          .map((item) => {
            return {
              ...item,
              distance: this.utilService.latLonToKm(
                [item.latitude, item.longitude],
                [lat, lon],
              ),
            };
          })
          .sort((a, b) =>
            orderBy === 'DESC'
              ? b[`${sortBy}`] - a[`${sortBy}`]
              : a[`${sortBy}`] - b[`${sortBy}`],
          )
          .slice(startIndex, startIndex + pageCount);
      });
```

### 3️⃣ Today I Learned
- 기능 별 개발에 대한 스케줄을 정하고 수행하는 것에 대한 필요성을 느꼈습니다. 😢
- 프로젝트를 하면서 cache(캐시) 사용에 대해 배우게 되었는데 이에 대해 정리해 볼 계획입니다!

### 📁 수행 기업 과제 Repository
- [[ 여기가자 ] 지리기반 맛집 추천 서비스 RESTful API 서버, laetipark, github](https://github.com/laetipark/lets-go-here)
