원티드 프리온보딩 기업과제 2차 회고록

전준영·2022년 10월 23일
0

프로젝트 회고록

목록 보기
3/6
post-thumbnail

📌 회원관리 및 운동 능력 기록 앱 만들기

1. 프로젝트 소개

전국치매센터표준데이터 JSON 데이터 파일을 데이터베이스에 저장하고 데이터를 조회해서 엑셀 파일로 다운로드하는 어플리케이션 입니다.

1. 프로젝트 진행기간 및 인원

  • 2022.10.07 ~ 2022.10.10
  • BE : 5명

2. 기술스택

  • Back-End : JavaScript, Express, Typeorm, MySQL, Swagger
  • Common : RESTful API, Git, Github
  • Communication : Slack, Notion, Zep

3. 맡은 기능

  1. 회원가입 기능
  2. JSON 데이터 파싱 후, 데이터베이스 저장

👉 Github link

4. db모델링

👉 DB diagram link

image

2. 프로젝트를 진행하며 느낀점

회원가입 기능을 만들면서 항상 유효성검사에 대해 안일한 생각으로 작성했었는데 이번에는 정규표현식을 활용하여 회원가입 기능을 만들어보았다.

const validateName = /^[가-힣]{2,10}$/;
  const validateAccount = /^[0-9a-zA-Z_-]{3,30}$/;
  const validateEmail =
    /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
  const validatePhoneNum = /^01([0|1|6|7|8|9]?)-([0-9]{3,4})-([0-9]{4})$/;
  if (!validateName.test(name)) {
    throw new ErrorCreator("Please check name", 400);
  }
  if (!validateAccount.test(account)) {
    throw new ErrorCreator("Please match account format", 400);
  }
  if (!validateEmail.test(email)) {
    throw new ErrorCreator("Please match the e-mail format", 400);
  }
  if (!validatePhoneNum.test(phoneNum)) {
    throw new ErrorCreator("Please match phone_number format", 400);
  }

아직 미숙하지만 구글링해보고 어떻게 사용해야하는지 숙지한 다음 내가 원하는 형식대로 바꾸어 표현해보았다.
항상 유효성 검사에 대해 철저하지 못하게 코드를 작성해왔던 것을 반성하게 되는 경험이었다.

그리고 JSON 데이터 파싱 후, 데이터베이스 저장이라는 기능을 하면서 데이터 베이스 수정을 많이 했다. 처음 생각엔 그냥 데이터를 저장하면 되겠거니 하고 했지만 은근 복잡한 기능이었고 내가 짜놓은 모델링의 틀에 맞추어 데이터를 변형하여 저장한다는게 정말 어려웠다.
멘토님들의 세션 리뷰를 통해 미리 지정된 id 값들이 있다면 typemapper를 따로 만들어 두어 지정하는게 가독성과 유지보수 측면에서 더 좋다는 리뷰를 보고 리팩토링을 진행했다.

before

 recordData.map((val) => {
    if (val.치매센터유형 === "치매안심센터") {
      val.치매센터유형 = 1;
    } else if (val.치매센터유형 === "광역치매센터") {
      val.치매센터유형 = 2;
    } else {
      val.치매센터유형 = 3;
    }
  });

after

//typemapper.js

const centerType = {
 치매안심센터: 1,
 광역치매센터: 2,
 치매상담전화센터: 3,
};

// services/hospitalService.js

const { centerType, provinceNum } = require("../typemapper");
     
	....
     
recordData.map((val) => {
   val.치매센터유형 = centerType[val.치매센터유형];
 });

이렇게 간단하게 변경되었고 하나더 require 해온 provinceNum에 대한 코드는

before

switch (province) {
        case "서울특별시":
          num = 1;
          break;
        case "경기도":
          num = 2;
          break;
        case "인천광역시":
          num = 3;
          break;
    
		....
        
        case "세종특별자치시":
          num = 16;
          break;
        case "제주특별자치도":
          num = 17;
          break;
      }

after

//typemapper.js

const provinceNum = {
  서울특별시: 1,
  경기도: 2,
  인천광역시: 3,

  	...
  
  세종특별자치시: 16,
  제주특별자치도: 17,
};

// services/hospitalService.js
const { centerType, provinceNum } = require("../typemapper");

  ...

num = provinceNum[province];

물론 파싱되는 일련의 과정들이 생략되어 제대로 다 표현할 순 없지만 이런식으로 코드들이 간단하게 리팩토링 되었다는 부분에 대해 알게되었고 앞으로도 typemapper를 정말 잘 활용해야겠다는 생각이 들었다.
이번 과제를 통해서 데이터를 나의 입맛대로 수정하는 방법을 더 심도있게 공부한 것 같아 정말 좋은 과제였다고 생각한다.
처음에는 별거 아닐것같은데? 라고 시작했다가 하다보니 어려웠던 과제였다.
항상 겸손한 마음가짐으로 임해야겠다고 다시 한번 느꼈고 앞으로도 나를 어렵게 하는 과제를 직면해서 퀴즈를 풀듯 하나하나 헤쳐나가며 배우고싶다고 느낀 프로젝트였다.👍

profile
Just do it!

0개의 댓글