본문 바로가기
TIL

Error: listen EADDRINUSE: address already in use [PORT]

by 케이리케리 2023. 12. 29.

 

환경변수로 포트 번호를 설정한 후 서버를 열어보려다 만난 오류이자 나의 실수^^

 

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가 있는지 확인한 후에 깃에 푸시해야한다.