환경변수로 포트 번호를 설정한 후 서버를 열어보려다 만난 오류이자 나의 실수^^
dotenv를 설치
npm install dotenv
프로젝트 최상위 폴더에 .env 파일 생성

.env 파일 안에 포트넘버 선언
PORT = 1225;
app.js 파일에 dotenv 호출했다.
const express = require("express");
const app = express();
const dotenv = require("dotenv");
dotenv.config();
app.listen(process.env.PORT);
에러났다
node:events:492
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use 1225;
at Server.setupListenHandle [as _listen2] (node:net:1855:21)
at listenInCluster (node:net:1920:12)
at Server.listen (node:net:2019:5)
at Function.listen (/Users/yunjiwon/Desktop/book-store-project/node_modules/express/lib/application.js:635:24)
at Object.<anonymous> (/Users/yunjiwon/Desktop/book-store-project/app.js:7:5)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Module._load (node:internal/modules/cjs/loader:1023:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
Emitted 'error' event on Server instance at:
at emitErrorNT (node:net:1899:8)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '1225;',
port: -1
}
그래서 구글링해봤다.
해결 방법 1 (=> 실패)

sudo lsof -i :1225
이 명령어로 1225번 포트를 사용 중인 프로세스를 찾는다.

응 없어~ (다른 사람들은 나오는데 왜 나는 안나오는 거니...)
그래서 다른 방법을 찾아봤다.
해결 방법 2 (=> 실패)

npx kill-port 1225
오케이. 이번엔 이걸로 내가 설정한 포트넘버 사용하고있는 프로세스 종료시켜본다.

1225 포트넘버 사용하고 있는 프로세스가 없단다. 그래서 방법 1, 2 둘다 소용 없던 거였음.
해결 방법 3. 코드 다시 확인 (=> 성공)
내가 쓴 코드에서 오류가 있을 수 있겠다는 생각이 들었다.
오타가 없는지, 잘못 작성한게 없는지 확인해봤다.
우선 정말 1225 포트넘버가 중복사용이 아닌지 확인
app.listen()에 직접 포트넘버 넣어봤다.
const express = require("express");
const app = express();
app.listen(1225);
잘 작동하는 걸 보니 중복사용인 포트넘버가 아님을 확신했다.

dotenv를 사용한 app.js 코드로 다시 고치고 오탈자를 확인했지만 없었다.
const express = require("express");
const app = express();
const dotenv = require("dotenv");
dotenv.config();
app.listen(process.env.PORT);
그렇다면 .env 파일밖에 없다.
// PORT = 1225;
PORT = 1225
혹시나 싶어 ;(세미콜론)을 지우고 실행해봤다. 잘된다;;

환경변수 사용법을 모른 내 잘못이었다. 제대로 공부하지 않아서 일어난 일이다. 덕분에 환경변수 사용 주의점을 알았다.
❗️❗️환경변수 형식❗️❗️
✅ key = value 쌍 형식으로 변수 정의.
✅ 각 줄 끝에 세미콜론(;)이나 콤마(,)를 쓰지 않는다.
✅ 홑따움표('')나 쌍따옴표("")로 감싸지 않는다.
🌟추가 기록
- dotenv는 환경변수를 .env파일에 저장하고 process.env로 로드하는 의존성 모듈이다.
- config() 함수를 호출 하면 .env파일에 저장된 환경 변수를 process.env 모듈을 통해 불러올 수 있다.
- 주의 사항 : .env파일은 꼭 .gitignore에 등록한 뒤 깃허브에 내용을 올려야 한다.
why❓ 환경변수에는 민감한 내용이 많이 들어가기 때문에(토큰, API key, 각종 아이디와 패스워드)
깃허브에 올리는 순간 모든 사람들에게 공개되어 비상사태 발생한다.
꼭! gitignore 파일에 .env가 있는지 확인한 후에 깃에 푸시해야한다.
'TIL' 카테고리의 다른 글
| AxiosError: Network Error / CORS 에러 (0) | 2024.02.29 |
|---|---|
| SQL 에러 errno: 121 "Duplicate key on write or update" , ERROR 1061: Duplicate key name ~~ (0) | 2024.01.12 |
| Error Cannot find module 'express' & your cache folder contains root-rowned files, due to a bug ~ (0) | 2023.12.14 |
| TIL 8일차 - 백엔드 구조, 웹 서버 역할, Node.js 설치 (1) | 2023.11.30 |
| TIL 7일차 - CSS, Javascript 간단 정리 (0) | 2023.11.30 |