github-blog.png


⚒️ Refactoring

  • ALL-CON에서는 한달간의 콘서트 정보만 allConcerts 배열에 담아 보여주고 있다.

    한달이 지나게되면 콘서트 정보중 activation0으로 비활성화되어 서버에서 보여주지 않고 있다. (콘서트 삭제는 관련 댓글 및 게시글들이 모두 삭제되므로 비활성화를 선택)

    스크린샷, 2022-02-15 17-45-59

  • 기존에는 콘서트가 비활성화 될 시 관련 게시글은 조회수를 -999999 음수값으로 강제로 할당하여 조회수로 검색시 맨 뒤로 나열되게끔 수정해주었으나 만약 불순한(?) 목적으로 조회수를 올리거나 시간이 오래지나 조회수가 0 이상의 양수값으로 전환된다면 올바르지 않은 결과가 초래되므로 Articles 테이블에도 activation 컬럼값을 추가해 비활성화 해주기로 했다.



1. 보완이 필요한 사항


  • Articles 테이블의 현재 스키마는 다음과 같다.

    스크린샷, 2022-02-15 17-44-23

    해당 Articles 테이블 컬럼중 activation 컬럼값을 추가하고, 서버에서 nodeSchedule을 통하여 1일 1회 티켓 발매 후 한달이 지난 콘서트들은 비활성화를 시키는데 해당 콘서트에 종속된 게시글들 또한 모두 비활성화 진행이 필요하다.



2. 문제 해결

2-1. Sequelize Model 파일 스키마 수정 && addColumn() 함수를 통한 마이그레이션


  • 어제 학습한 내용대로 addColumn() 함수를 통해 마이그레이션으로 Articles 테이블의 스키마를 수정해주었다.

    up: async (queryInterface, Sequelize) => {
      return queryInterface.addColumn('Articles', 'activation', {
        type: Sequelize.BOOLEAN,
        allowNull: false,
        defaultValue: true,
      });
    };
  • 초기값은 true로 설정 (티켓 오픈 후 한달이 지난 콘서트 게시글은 false로 비활성화 된다.) , 데이터 타입과 옵션을 설정해주었다.

    스크린샷, 2022-02-16 00-23-06

    스키마를 수정했기 때문에 기존 게시글들을 수동으로 하나하나 데이터 값을 수정해줘야 하나 싶었는데, defaultValue값을 true로 준 탓인지 기존 게시글들도 모두 activation 컬럼의 값이 true로 활성화되었다. (휴…)



2-2. concertCleaner() 함수 및 Controller 변경


  • 매일 오전 09시에 서버에서는 콘서트 정보를 concertCleaner() 함수를 통해서 티켓 오픈일이 한달 지난 콘서트 DB의 activationfalse로 바꾸어 주고 있다.

    여기에 더불어 해당 콘서트에 종속된 게시글 DB들의 activation 또한 함께 false로 바꾸어 주었다.

  • 또한, 이제는 Controller 또한 수정하여 게시글을 뱉어주는 요청이 들어온다면, order값을 내림차순으로 주어서 activationfalse인 게시물은 후순위로 밀리게끔 설계하였다.




3. 결과


  • 클라이언트에서 이제 조회수순으로 정렬을 하여도 order의 우선순위가 activation 내림차순이기 때문에 비활성화된 콘서트에 종속된 게시물들을 후순위로 밀리게 설계하였다.

    스크린샷, 2022-02-16 00-40-09

    콘서트가 비활성화되어 목록에서는 사라졌지만 게시글은 후순위로 밀렸을 뿐이라서 조회/수정/삭제 처리는 가능한 상태이다.

    스크린샷, 2022-02-16 00-59-54

  • 위 사진과 같이 상단 콘서트 목록은 공백으로 보여지고 있다.

    빈 콘서트 목록 처리를 어떻게 해야할지 클라이언트를 담당한 팀원분과 조율해서 내일까지 Task를 가져가야 할 듯 하다.