학습 기록_Day16 - boostcampwm-2022/web33-Mildo GitHub Wiki

🖥️ 구현 내용

개발용 환경변수와 배포용 환경변수를 나누기

  • 현재 .env에 개발용으로만 환경변수가 설정되어 있어 저번주 배포할 당시 수동적으로 환경변수를 고쳐야 되는 일이 발생함
  • 이후 배포에 용이하게 개발용과 배포용 환경변수를 구분하여 앱이 동작하도록 함
  • cross-env 모듈을 이용해서 실행 스크립트에 개발용, 배포용인지 알려주는 환경변수를 같이 넣어주어 구분할 수 있도록 함 (cross-env 모듈 설치해야됨)
cross-env NODE_ENV=development ...
cross-env NODE_ENV=production ...

nodemon이 아닌 tsc-watch를 사용하기

  • typescript 코드를 javascript 코드로 컴파일 한 뒤, node로 실행하는 과정을 반복해야하지만 ,tsc-watch를 사용하면 typescript 코드가 바뀔때 마다 자동으로 컴파일 해준 뒤 javascript로 실행시켜줌
  • → Typescript 버전 nodemon
  • 이전 nodemon에선 --exec 옵션으로 ts-node를 사용하여 nodejs 상에서 typescript 컴파일러를 통하지 않고 직접 실행시킴
  • → 실제 배포서버에서는 typescript를 javascript로 컴파일한 후 실행시키기 때문에 배포할 때의 환경과 더 비슷한 환경으로 실행시키는 것이므로 tsc-watch로 바꾸게 됨

📖 학습 내용

새롭게 알게 된 내용을 서술합니다. 길거나 깊은 내용은 따로 페이지를 생성하여 작성합니다.

h2 단락으로 나눕니다.

🩺 의사결정

화요일에 수행할 것

지난 주에 완성하지 못한 것

  • (지난주) 핀이 포커싱 될 경우 커지는 기능 완성
  • (지난주) 핀 클릭시 상세 모달창 출력
  • (지난주) 로딩 화면 렌더링
  • (지난주) 사용자가 위치 정보 거부했을 때 서울 중심지 보여주기

crontab 관련

  • crontab 서버 구축
  • crontab 서버에서 30분마다 실시간 도시 데이터 저장
  • crontab 서버에서 Redis / RabbitMQ 를 사용하여 24시간 이내의 정보 저장
  • api 서버에서 Redis / RabbitMQ 를 사용하여 24시간 이내의 정보 응답

페어별 기능 분리

  • A조(윤우 / 상준)
    • (지난주) 로딩 화면 렌더링
    • (지난주) 사용자가 위치 정보 거부했을 때 서울 중심지 보여주기
  • B조(한빈 / 현정)
    • (지난주) 핀이 포커싱 될 경우 커지는 기능 완성
    • (지난주) 핀 클릭시 상세 모달창 출력
      • 배열의 index보다 _id를 저장하는 것이 좋을 것 같음

crontab 구현 방법

  1. github Actions 이용
    1. 쉘 스크립트 작성, DB 접근 부분에서 어려움이 있을 것 같음
    2. 크론이 정확하지 않을 수 있음
  2. 기존 server 인스턴스에서 구현
  3. 새로운 server 인스턴스 생성
    1. 굳이 crontab을 하기 위해 server를 파는 것은 금전적으로 낭비 같다. 나중에 성능상 문제가 있으면 파자.
    2. api 서버가 꺼져도 데이터는 계속 쌓여야 하므로 새로운 server 인스턴스를 파도 괜찮을 것 같다.

🚧 Trouble Shooting

서버 .env

Untitled

  • pm2에서는 dist 폴더에 .env 파일을 넣어줘야 했다. 하지만 로컬에서 yarn dev 를 실행했을 땐 dist 폴더에 .env 파일을 넣어주지 않아도 잘 실행되었다.
  • 실험 : package.json 파일이 있는 server 디렉토리에서 node ./dist/src/app.js 를 실행하면 잘 작동하지만 server/dist/src 디렉토리에서 node app.js 를 실해하면 환경변수가 제대로 적용되지 않았다.
  • package.json 파일이 server 디렉토리에 있기 때문에 .env 파일을 따로 넣어주지 않아도 실행 가능한 것으로 추정
  • pm2는 외부에서 그 경로를 지정해준 다음 실행시키기 때문에 .env 파일을 따로 넣어주는 작업이 필요
  • pm2 공식 문서 1(pm2에서 환경변수 설정하기)
  • pm2 공식 문서 2(CLI를 사용해서 환경 구축 및 업데이트)

클라이언트 dotenv

  • 발생한 오류

    import dotenv from "dotenv";
    
    dotenv.config();
    

    코드를 추가했더니 에러 발생

  • React에서 커스텀 환경변수를 사용하기 위해서는 변수명에 접두어로 REACT_APP을 붙여줘야 함

  • CRA로 생성했으면 webpack에서 dotenv를 사용하기 있기 때문에 별도로 dotenv를 import 해오지 않아도 됨

  • CRA에서 커스텀 환경변수를 설정하는 법