ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW 정글 116일차] 나만의 무기 24일차 (끝까지 달려야 한다)
    기타/SW 사관학교 정글 2021. 11. 27. 04:47

    오늘은 어제 하루를 마치고 팀회의를 통해 나온 우리가 앞으로 해야할 것들 중에 내가 하고 싶은 것, 할 수 있는 것을 정하여 작업을 진행했다.

     

    일단은 수요일에 해결과제로 남긴 DB에 저장된 날짜데이터와 client에서 띄우는 날짜가 다른 것을 해결하는 것을 시작했다.

    https://straw961030.tistory.com/314

     

    [SW 정글 114일차] 나만의 무기 22일차 (에러..)

    오늘은 어제 계획했던 api 수정 작업부터 시작했다. 해야할 것은 하루에 해야할 챌린지를 하지 못해서 키우고 있던 생명체를 사망처리하는 것이다. 일단은 00시 00분에 스케쥴러가 돌면서 챌린지

    straw961030.tistory.com

     

    처음에 하고자했던 방식은 서버시간을 한국시간으로 맞추고 서버가 DB에 접근하여 받아왔을 때 UTC 시간을 한국시간으로 바꾸려고 했다.

    수요일부터 오랜시간동안 혼자 서칭하여 해결하다가 더 시간을 투자하기 힘들어 멘토님께 도움을 요청했고 해결할 수 있는 방법을 담은 링크를 보내주셨다.

    https://stackoverflow.com/questions/8083410/how-can-i-set-the-default-timezone-in-node-js

    https://velog.io/@taelee/mysql%EC%97%90%EC%84%9C-9%EC%8B%9C%EA%B0%84-%EC%B0%A8%EC%9D%B4%EB%82%A0%EB%95%8CGCP

     

    바로 읽어보고 client쪽 코드를 수정해보았지만 고쳐지지 않았다....

     

    그래서 방식을 바꾸었다.

    바꾼 방식은 서버시간은 UTC로 유지하고 00시 00분에 자동으로 실행되는 배치작업이나 날짜비교코드를 수정하는 것이다.

    /* 인증 가능 요일 확인 코드*/
    <수정 전>
    let date = new Date();
    let today = day[date.getDay()];
    if (alien.alien[today] === 0) {
      console.log("인증 가능 요일이 아닙니다.");
      return;
      } else {
    }
    
    
    <수정 후>
    let date = new Date(
    new Date().toLocaleString("en-US", { timeZone: "Asia/Seoul" }));
    let today = day[date.getDay()];
    if (alien.alien[today] === 0) {
      console.log("인증 가능 요일이 아닙니다.");
      return;
      } else {
    }
    
    
    /* 인증 수락 코드*/
    <수정 전>
    let today = new Date();
    if (
      today.getMonth() + 1 != request_month ||
      today.getDate() > request_day
      ) {
        res.json({
          result: "fail",
          msg: "인증 수락 가능한 날짜가 만료되었습니다.",
        });
        return;
      }
      
      
    <수정 후>
    let today = new Date(
    new Date().toLocaleString("en-US", { timeZone: "Asia/Seoul" }));
    if (
      today.getMonth() + 1 != request_month ||
      today.getDate() > request_day
      ) {
        res.json({
          result: "fail",
          msg: "인증 수락 가능한 날짜가 만료되었습니다.",
        });
        return;
      }
      
      
    /* 00시 00분 배치작업(목표를 시행하지 않은 생명체 사망 처리)*/
    <수정 전>
    exports.j = schedule.scheduleJob({ hour: 00, minute: 00 }, function () {
    let today = new Date();
    let day = today.getDay();
      
      
    <수정 후>
    /*UTC와 한국시간 시차를 고려 (-9시간)*/
    exports.j = schedule.scheduleJob({ hour: 15, minute: 00 }, function () {
    let today = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"}));
    let day = today.getDay();

    오랜시간동안 시계와의 싸움을 했고 처음에 생각했을 때에는 서버시간은 한국시간으로 바꾸고 날짜를 DB에 저장된 그대로 받아올 수 있도록 하게 하는 것이 더 쉽고 간단한 작업이라고 생각했는데 위 방식을 택하고 시행해보니 위 방법이 훨씬 간단했다....

    솔직히 좋은 방법인지는 모르겠지만 일단은 작동하고 에러가 될만한 부분이 안보이니까 반영하기로...

     

     

     

    다음으로 한 작업은 카테고리로 챌린지를 검색하는 작업이다.

    기존에는 챌린지이름으로만 검색을 할 수 있는 방식이였다.

    하지만, 유저가 챌린지명으로만 검색해서 원하는 챌린지를 찾는 것이 힘들 수 있다고 판단하였고 챌린지를 생성할 때 카테고리를 입력하게 하고 검색에서 입력받은 카테고리를 클릭하면 해당 카테고리에 맞는 챌린지만 검색이 되도록 기획을 했다.

    api만드는 것은 간단하게 할 수 있었고 이상하게 클라이언트에서 데이터를 받아온 것은 sql문에 대입하면 계속 " "이 없어서 SQL 에러가 뜬다...

    챌린지 생성 폼과 api를 연동할 때에는 한번도 나오지 않은 에러이고 지금도 발생하지 않은데 생명체 생성 폼 때부터 동일한 에러가 발생한다.

    일단은 ""를 묶어서 쿼리를 날리도록 해서 에러는 잡았는데 왜 어떠한 경우에는 나고 어떠한 경우에는 안나는지 모르겠다.

     

     

    카테고리별 검색 api 작성을 마친 후에는 이전에 만든 졸업버튼 api를 클라이언트와 연결하는 작업을 진행했고 역시 연결해보니 더 신경써야할 부분이 생겼다.

    예를 들면, 한 번 졸업버튼을 클릭하고 다음에 클릭하면 안되도록 fail response message를 보내도록...

     

     

    작업을 마치고 저녁을 먹은 후에는 며칠 전부터 하려고 계획했던 DB 테이블, 필드명 변경 후에 전체적인 코드를 수정하는 작업을 백엔드 3명이 머리를 모아 작업을 진행했다.

    이전에 DB를 개편하고 팀원 한 명과 할 때에는 클라이언트쪽 코드를 어디를 수정해야할지 정확히 이해하고 있지 않아서 진행을 중단했었다.

    이번에는 프론트 개발도 같이 진행하고 있는 조장님과 같이 3명이서 진행했다.

    처음에는 그냥 이전이름을 찾아서 바뀐 이름으로 바꾸기만 하면 되겠네?라는 생각으로 쉽운 작업이라고 느꼈지만 직접 해보니까 오타가 하나라도 나면 잘 되던 기능이 동작이 안하고 바꾸어야할 부분을 놓치면 동작이 안하니까 큰 집중력이 필요했다.

    다행히 1시간정도만에 목표로 했던 작업을 마무리했고 정상적으로 모든 기능이 작동하는 것을 확인했다.

     

     

    <바뀐 ERD>

     

     

    모든 팀원들이 맡은 작업들을 마무리하고 새벽 2시에 팀 회의를 가졌다.

    원래 오후 2시에 팀 회의를 가지고 하루를 시작했는데 어쩌다보니 어느 순간에 새벽 2시로....

    생각했던 것보다 인지하고 있는 버그를 잡는 작업이 빨리 마무리 됐고 그 만큼 우리가 추가적으로 구현해야할 것(메인 플로우에는 필요하지는 않지만 있으면 더 자연스러워보이는 기능들)과 해보고 싶은 것(도전적이고 기술적인 것들)을 할 수 있는 시간을 벌었다.

    남은 기간동안 풀속도로 빠르게 달려서 해보고 싶은 것들을 최대한 해보는 것이 목표이다.

     

     

    <해야할 것>

    알림기능 구현을 위한 socket.io 알아보기

    socket.io vs Web RTC 알아보기

    Docker 알아보기

    "왜 도커를 쓸까요? VM에 비해 도커의 장점 혹은 차이는?"

    - PM. → VM. → Docker → Kube

    댓글

Designed by Tistory.