원티드 프리온보딩 3주차 (휴먼스케이프) 회고록

시나리오 및 시퀀스 정의하기

먼저 어떻게 프로그램을 제작할지 같이 시퀀스를 작성했다.
과제의 핵심포인트는 우리가 제작한 서버를 통해 공공 api에서 일정한 시간내에 변경된 데이터들을 조회하는 기능이였다. 그래서 주기적으로 우리서버에서 공공api서버로 데이터를 요청해야했다.

Task Scheduling

리눅스에서 cron을 사용해봤기에 Node.js node-cron 패키지와 통합되는 @nestjs/schedule 패키지를 사용했다.

테이블 설계

테이블 설계에서 큰 이슈는 없었다. 임상 데이터를 봤을 때 중복되는 데이터가 없었기에 정규화를 할 필요가 없다고 생각했고, 임상 데이터 형태 그대로 테이블을 제작했다.

임상정보 리스트 페이지네이션

문제

  • 어떻게 구현할 것인가?

    사용자로 부터 최대 갯수 limit, 시작 인덱스 offset을 입력 받습니다. Subject 테이블을 사용해 임상 정보 리스트를 DATABASE 에서 가져옵니다.
    추가적으로 가져온 게시글 개수를 측정하고 같이 응답합니다.

  • subject.service.ts

    필요한 데이터를 가져오기 위해 사용한 SQL쿼리

  async getPostList(pageInfo: GetListDto) {
    const subjectList = await this.subjectRepository
      .createQueryBuilder('subject')
      .orderBy('subject.id', 'DESC')
      .limit(pageInfo.limit)
      .offset(pageInfo.offset)
      .disableEscaping()
      .getMany();
    const subjectCount = await this.subjectRepository.count();
    return { subjectList, subjectCount };
  }

최근 일주일내에 업데이트(변경사항이 있는) 된 임상정보 리스트

  • 어떻게 구현할 것인가?
    처음에 공공 API로부터 데이터를 수집해 로컬 DB에 저장합니다. 생생날짜와 수정날짜가 동일하게 저장됩니다.
    그리고 주기적으로 공공 API로부터 데이터를 요청해 저희 서버에 저장된 데이터와 계속 비교를합니다. 만약 변경 사항이 생겼다면 해당 데이터는 변경 사항에 알맞게 수정이 되고 수정 날짜가 갱신됩니다. 생성날짜와 수정날짜가 다르다면 변경사항이 있는 데이터로 간주했습니다.
  • subject.service.ts

    필요한 데이터를 가져오기 위해 사용한 SQL쿼리

  async getPostListByUpdate(pageInfo: GetListDto) {
    const nowDate = new Date();
    const dayOfMonth = nowDate.getDate();

    nowDate.setDate(dayOfMonth - 7);
    const subjectList = await this.subjectRepository
      .createQueryBuilder('subject')
      .where('subject.createdAt != subject.updateAt')
      .andWhere(`subject.updateAt > ${moment(nowDate).format('YYYY-MM-DD')}`)
      .orderBy('subject.id', 'DESC')
      .limit(pageInfo.limit)
      .offset(pageInfo.offset)
      .disableEscaping()
      .getMany();
    return subjectList;
  }

좋은 웹페이지 즐겨찾기