Day 23 개발일지 Web - boostcamp-2020/Project03-A-TOTP GitHub Wiki

개발 일지

IP Location

로그인한 사용자의 IP와 주소를 보여주기로 결정하였다. 때문에 사용자의 IP를 기준으로 위치를 알려줄 수 있는 API가 필요했다. 찾다보니 대부분이 영어로 위치를 알려주고 있었지만, 한글로 위치를 알려주는 한곳을 찾았다. 이 사이트는 4일 동안만 무료로 사용할 수 있어서 데모를 보여주기 전까지는 영어로 위치를 알려주는 무료 API를 사용하기로 결정하였다.

로그 페이지네이션

로그를 전부 보여주기에는 로그 내용이 너무 많기 때문에 6개씩 페이지를 나눠서 보여주기로 했다.
이전 프로젝트에서는 페이지네이션을 사용해보지 않아서 Server Side로 페이지 네이션을 어떻게 할지 찾아봤다. 내가 찾은 것은 Sequelize로 findAndCountAll 이라는 함수를 사용해서 where에 해당하는 로우값의 전체 갯수와, limit, offset옵션에 해당하는 개수만큼 순서대로 준다는 것이었다.
이 방법을 사용하기 위해서 model.findAndCountAll(query, { where }); 의 방식으로 사용하였더니 결과는 나오지만 원하는 결과가 나오지 않았다 ...
그래서 내가 해결한 방법은

      const offset = 6 * (num - 1);
      const result = await logsModel.findAndCountAll({
        where: {
          auth_id: {
            [Op.like]: id,
          },
        },
        order: ['access_time', 'DESC'](/boostcamp-2020/Project03-A-TOTP/wiki/'access_time',-'DESC'),
        limit: 6,
        offset,
      });

이렇게 사용하였다. 함수를 찾아보니 예시 코드가 where가 먼저 적용되어있던 것을 확인하고 그렇게 해주었으며, order를 내림차순으로 주면서 가장 최신 것 부터 순서대로 limit의 개수에 맞게 가져오도록 하였다. 서버 사이드 페이지네이션으로 나름 편하게 페이지를 보여준 것 같다.

redis Event

redis에서 일어나느 Event를 구독형태로 전달 받을 수 있어 Session이 변화하는 필요한 Event만 받아서 처리 가능하다.

개인 회고

진구

금방할 수 있는 것들을 먼저 해놓고 어려운 것들을 하자라는 생각으로 개발을 진행했지만 역시 쉬운 것은 없다고 느꼈다. 빨리 끝내고 넘어가야한다는 생각이 오히려 더 초조하게 만드는 느낌 ..? 시간이 많이 없어도 여유를 갖고 개발을 해보도록 노력해야겠다.

석암

session event 를 통해서 원격으로 제거하는 것을 고려했다 이 방식이 맞는 방식인지에는 의문이 있으나 우선 작동이 되는것에 신기함을 느끼고 다른 좋은 방도가 있는지 고려해야겠다.