• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

프론트서버 배포 후 EADDRINUSE에러 발생

24.05.10 06:37 작성 24.05.10 07:26 수정 조회수 116

0

안녕하세요 제로초님

덕분에 front배포 잘 하게 되었습니다.

그후 접속해서 테스트했는데, 회원가입할 때 connect_refused가 발생해 로그를 찾아보았습니다.

EADDRINUSE를 발견하고 원인을 찾으려고 뒤져봤는데 해결되지 않아 여쭤봅니다. ㅠ

front = 13.125.119.94 

back = 13.125.252.5

 

아래는 설정한 내용

/front/package.json

"scripts": {
    "dev": "next dev",
    "build": "cross-env ANALYZE=true NODE_ENV=production next build",
    "start": "cross-env NODE_ENV=production next start -p 80",
  },

 

/back/packge.json

"scripts": {
		"dev": "nodemon app",
		"start": "cross-env NODE_ENV=production pm2 start app.js"
	},

 

/back/app.js

// node에서는 import / export 안쓰고 require / module.exports 사용
const express = require('express');
const cors = require('cors');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const dotenv = require('dotenv');
const morgan = require('morgan');
const path = require('path');
const hpp = require('hpp');
const helmet = require('helmet');

const postRouter = require('./routes/post');
const postsRouter = require('./routes/posts');
const userRouter = require('./routes/user');
const hashtahRouter = require('./routes/hashtag');
const db = require('./models'); // sequelize에서 model 모두 등록 // express에서 그 sequelize를 등록해야 한다.
const passportConfig = require('./passport');

dotenv.config();
const app = express();
db.sequelize
	.sync()
	.then(() => {
		console.log('db연결 성공!');
	})
	.catch(console.error);
passportConfig();

// 운영용 빌드
if (process.env.NOD_ENV === 'production') {
	app.use(morgan('combined')); // 로그볼 수 있게 해주는 것
	// 보안에 도움되는 패키지들
	app.use(hpp());
	app.use(helmet());
} else {
	app.use(morgan('dev')); // 로그볼 수 있게 해주는 것
}

app.use(
	cors({
		origin: ['http://localhost:3000', 'nodebird.com', 'http://13.125.119.94'], 
		credentials: true, 
	})
);

app.use('/', express.static(path.join(__dirname, 'uploads')));

app.use(express.urlencoded({ extended: true })); 
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
	session({
		saveUninitialized: false,
		resave: false,

		secret: process.env.COOKIE_SECRET,
	})
);
app.use(passport.initialize());
app.use(passport.session());


app.use('/post', postRouter);
app.use('/posts', postsRouter);
app.use('/user', userRouter);
app.use('/hashtag', hashtahRouter);

app.listen(80, () => {
	console.log('서버 실행 중');
});

 

프론트 실행화면

백엔드 실행 화면

 

 

아래는 에러 내용입니다.

/front 에러

AxiosError: connect ECONNREFUSED 13.125.252.5:443
0|npm      |     at AxiosError.from (file:///home/ubuntu/react-nodebird/prepare/front/node_modules/axios/lib/core/AxiosError.js:89:14)
0|npm      |     at RedirectableRequest.handleRequestError (file:///home/ubuntu/react-nodebird/prepare/front/node_modules/axios/lib/adapters/http.js:610:25)
0|npm      |     at RedirectableRequest.emit (node:events:517:28)
0|npm      |     at eventHandlers.<computed> (/home/ubuntu/react-nodebird/prepare/front/node_modules/follow-redirects/index.js:38:24)
0|npm      |     at ClientRequest.emit (node:events:517:28)
0|npm      |     at TLSSocket.socketErrorListener (node:_http_client:501:9)
0|npm      |     at TLSSocket.emit (node:events:517:28)
0|npm      |     at emitErrorNT (node:internal/streams/destroy:151:8)
0|npm      |     at emitErrorCloseNT (node:internal/streams/destroy:116:3)
0|npm      |     at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
0|npm      |     at Axios.request (file:///home/ubuntu/react-nodebird/prepare/front/node_modules/axios/lib/core/Axios.js:45:41)
0|npm      |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
0|npm      |     at async y (/home/ubuntu/react-nodebird/prepare/front/.next/server/chunks/414.js:1:1838) {
0|npm      |   port: 443,
0|npm      |   address: '13.125.252.5',
0|npm      |   syscall: 'connect',
0|npm      |   code: 'ECONNREFUSED',
0|npm      |   errno: -111,
0|npm      |   config: {
0|npm      |     transitional: {
0|npm      |       silentJSONParsing: true,
0|npm      |       forcedJSONParsing: true,
0|npm      |       clarifyTimeoutError: false
0|npm      |     },

 cause: Error: connect ECONNREFUSED 13.125.252.5:443
0|npm      |       at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16) {
0|npm      |     errno: -111,
0|npm      |     code: 'ECONNREFUSED',
0|npm      |     syscall: 'connect',
0|npm      |     address: '13.125.252.5',
0|npm      |     port: 443
0|npm      |   }

 

back 에러

     | Warning: connect.session() MemoryStore is not
0|app      | designed for a production environment, as it will leak
0|app      | memory, and will not scale past a single process.
0|app      | Error: listen EADDRINUSE: address already in use /
0|app      |     at Server.setupListenHandle [as _listen2] (node:net:1800:21)
0|app      |     at listenInCluster (node:net:1865:12)
0|app      |     at Server.listen (node:net:1964:5)
0|app      |     at Function.listen (/home/ubuntu/react-nodebird/prepare/back/node_modules/express/lib/application.js:635:24)
0|app      |     at Object.<anonymous> (/home/ubuntu/react-nodebird/prepare/back/app.js:75:5)
0|app      |     at Module._compile (node:internal/modules/cjs/loader:1364:14)
0|app      |     at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
0|app      |     at Module.load (node:internal/modules/cjs/loader:1203:32)
0|app      |     at Module._load (node:internal/modules/cjs/loader:1019:12)
0|app      |     at Object.<anonymous> (/home/ubuntu/react-nodebird/prepare/back/node_modules/pm2/lib/ProcessContainerFork.js:33:23) {
0|app      |   code: 'EADDRINUSE',
0|app      |   errno: -98,
0|app      |   syscall: 'listen',
0|app      |   address: '/',
0|app      |   port: -1
0|app      | }

 

front monit

 

back monit

 

비슷한 질문들이 올라와 있어서 (sudo) npx pm2 kill 해보거나 다른 검색들을 해봤는데 원인을 모르겠더라구요

어떤 부분을 수정해야할지 어떤부분을 확인해봐야할지 봐주시면 정말 감사하겠습니다.

답변 1

답변을 작성해보세요.

1

지금 백엔드 80포트에 뭔가 다른게 돌아가는 것 같은데요. 이미 실행한 백엔드 서버이거나 nginx같은 다른 프로그램같습니다. sudo lsof -i tcp:80 해보세요

챠챠_님의 프로필

챠챠_

질문자

2024.05.10

image

백엔드 서버를 끄고 확인했을 때,

image서버 키고 확인했을 때 입니다.

 

따로 켜져있는게 없는것으로 보이는데 어떤 부분을 더 확인해야하는지 모르겠어서 난감한 상황입니다.

여유되실 때 조언부탁드립니다.

음 지금 백엔드는 정상적으로 다시 켜진걸로 보입니다. sudo pm2 list 해서 재시작 수 계속 올라가는 게 아니면 정상입니다. 다시 에러메시지 확인해보세요.

챠챠_님의 프로필

챠챠_

질문자

2024.05.10

image

다시 켜본 결과 동일한 에러가 발생하고 있습니다.

다른 질문에서 connect.session은 무시하셔도 괜찮다고 하셔서

error부분만 해결하면 될거같았는데,

어느 부분 때문인지 막막합니다.

백단 쪽만 처음부터 해보는게 좋을까요?

Error: listen EADDRINUSE: address already in use 특정포트라고 하면

특정포트를 찾아서 끄고 하면 될거같은데

Error: listen EADDRINUSE: address already in use / 이렇게 되어있기도하고

다른 포트 사용하는것도 안보여서 선생님의 의견이 궁금했습니다.

지금 실시간으로 보고계신 게 아니라 예전 에러 로그를 보고계신 거 아닌가요? 과거 쌓여있는 로그를 보고계신거 같은데요?

그냥 sudo pm2 list를 해서 잘 돌아가고 있으면 문제 없는 겁니다.

챠챠_님의 프로필

챠챠_

질문자

2024.05.10

답변 감사합니다 선생님
그래서 이번에 바뀐 ip로 새로 시도해보니까

말씀하신대로 전의 에러는 사라지고 다른 에러가 나왔습니다.

그걸해결하고 말씀해주신대로 sudo npx pm2 list 각각 잘나오는거 확인하고

회원가입 테스트를 다시 해봤는데

image

동일한 connection_refused에러가 나왔습니다.

추가로 이상한점은 front에서는 monit에서
image로그가 잘 보이는데

image리스트에도 잘 나오고

 

back에서는

image하나도 안보입니다.
image로그 확인해보면 정상적으로 연결된거같은데

뭐땜에 connection_refused가 발생하는지 감이 안잡히니

어디를 더 확인해봐야할지 조언해주시면 정말 감사하겠습니다.
image

이건 백엔드 주소가 잘못된 겁니다. 지금 https 세팅을 안했는데 443 포트로 보내고 계신것같은데요. http는 80 포트입니다.

챠챠_님의 프로필

챠챠_

질문자

2024.05.10

와우 선생님 정말 감사합니다.

조언해주신대로 확인해보니 정상적으로 작동합니다!

이 파트만 몇일째 못넘어가서 슬슬 포기하고 넥스트 강의 들어야지 했는데,

이제 남은 파트 진행 가능하게 되었습니다.

감사합니다.