작성
·
217
0
compose.yml 파일 작성 하여 실행시에 하기처럼 실행과정에서 db 와 disconnect 관련 문구가 출력되는게 확인되었습니다.
[실행 과정 중 확인된 구문]
guestbook-backend-1 | App listening on port 8000
guestbook-backend-1 | Press Ctrl+C to quit.
guestbook-backend-1 | Disconnected: unable to reconnect to mongodb://db:27017/guestbook
guestbook-backend-1 | /backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:474
guestbook-backend-1 | throw err;
guestbook-backend-1 | ^
guestbook-backend-1 |
guestbook-backend-1 | Error: Disconnected: unable to reconnect to mongodb://db:27017/guestbook
guestbook-backend-1 | at NativeConnection.db.on (/backend/routes/messages.js:10:11)
guestbook-backend-1 | at emitNone (events.js:106:13)
guestbook-backend-1 | at NativeConnection.emit (events.js:208:7)
guestbook-backend-1 | at NativeConnection.set (/backend/node_modules/mongoose/lib/connection.js:119:12)
guestbook-backend-1 | at /backend/node_modules/mongoose/lib/connection.js:529:26
guestbook-backend-1 | at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:415:14)
guestbook-backend-1 | at executeCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:404:25)
guestbook-backend-1 | at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:293:21)
guestbook-backend-1 | at connectCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:249:5)
guestbook-backend-1 | at process.nextTick (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:471:7)
guestbook-backend-1 | at combinedTickCallback (internal/process/nexttick.js:132:7)
guestbook-backend-1 | at process._tickCallback (internal/process/next_tick.js:181:9)
제가 작성한 구문의 문제인가 싶어 수업자료로 올라와있는 구문을 사용할시에도 동일하게 에러가 확인되었습니다.
(로컬 인프라 환경은 aws ec2 ubuntu 22.04 입니다.)
다만 해당 에러 확인 후에 혹시나 싶어 포트 접근 해보니 정상적으로 페이지 오픈 및 방명록 기록까지 진행되었습니다.
확인 한번만 부탁드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
Docker Compose로 서비스를 실행할 때 MongoDB와의 연결이 끊어졌다는 메시지가 나타난 문제에 대해 도와드리겠습니다. 먼저, 해당 에러 메시지는 MongoDB가 아직 준비 상태가 아니거나 네트워크 문제로 인해 연결을 잃었을 때 발생할 수 있습니다. Docker Compose를 사용하여 컨테이너의 준비 상태를 확인하는 권장 방법은 healthcheck
구성을 compose.yml
파일에 추가하는 것입니다.
예를 들어 MongoDB 서비스에 대한 healthcheck
구성은 다음과 같습니다:
services:
db:
image: 'mongo'
healthcheck:
test: ["CMD", "mongostat", "--port", "27017"]
interval: 30s
timeout: 10s
retries: 5
healthcheck
항목을 통해 MongoDB 서비스가 정말 준비가 되었는지 확인할 수 있습니다. MongoDB가 준비되지 않은 상태에서 백엔드 애플리케이션이 연결을 시도하면 위와 같은 “Disconnected” 오류를 볼 수 있습니다.
게스트북 백엔드 서비스에서 MongoDB에 연결하는 코드에 재시도 로직이 포함되어 있는지 확인하고, 해당 로직이 정상적으로 작동하는지, MongoDB 서비스가 완전히 준비되었을 때 까지 백엔드 서비스가 연결을 시도하도록 설정되어 있는지 점검해야 합니다.
AWS EC2 Ubuntu 환경에서도 정상적으로 작동한다면, MongoDB 서비스가 완전히 초기화되고 사용 가능해 진 이후에 정상적인 연결이 이루어지는 것일 수 있습니다. 처음에 에러가 발생하고 이후에 정상 작동한다면 초기 연결 시도에서 문제가 발생하고, 후속 연결 시도에서는 성공하는 것으로 보입니다.
Spring Boot의 Docker Compose 지원에 대한 자세한 정보를 참고하고자 하신다면 아래의 Spring Boot Reference Documentation을 참고하세요.
현재 상황에 대한 추가 정보 제공이 필요하다면 추가적인 로그나 설정 파일을 제공해 주시면 더 구체적인 해결책을 제공해 드릴 수 있습니다.