학습 기록_Day16 - boostcampwm-2022/web33-Mildo GitHub Wiki
🖥️ 구현 내용
개발용 환경변수와 배포용 환경변수를 나누기
- 현재 .env에 개발용으로만 환경변수가 설정되어 있어 저번주 배포할 당시 수동적으로 환경변수를 고쳐야 되는 일이 발생함
- 이후 배포에 용이하게 개발용과 배포용 환경변수를 구분하여 앱이 동작하도록 함
- cross-env 모듈을 이용해서 실행 스크립트에 개발용, 배포용인지 알려주는 환경변수를 같이 넣어주어 구분할 수 있도록 함 (cross-env 모듈 설치해야됨)
- cross-env를 사용하면 os로 나타나는 오류가 해결됨
- 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 구현 방법
- github Actions 이용
- 쉘 스크립트 작성, DB 접근 부분에서 어려움이 있을 것 같음
- 크론이 정확하지 않을 수 있음
- 기존 server 인스턴스에서 구현
- 새로운 server 인스턴스 생성
- 굳이 crontab을 하기 위해 server를 파는 것은 금전적으로 낭비 같다. 나중에 성능상 문제가 있으면 파자.
- api 서버가 꺼져도 데이터는 계속 쌓여야 하므로 새로운 server 인스턴스를 파도 괜찮을 것 같다.
🚧 Trouble Shooting
서버 .env
- 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 해오지 않아도 됨