Backend 백엔드

[ 27 ] ODM ( mongoose ) 을 통해서 백엔드와 데이터베이스 연결하기

박민우_ 2024. 8. 20. 14:53

도커파일 명령어가 한줄인  경우 간략하게 compose설정하기 

my-database 컨테이너의 Dockerfile 명령어는 한줄이므로 image : mongo:5 로 편하게 가져올 수 있다. 

// docker-compose.yaml 파일

version : '3.7'

# 컴퓨터들

  # 내데이터베이스컴퓨터:
  #   build:
  #     파일경로:
  #     파일명: Dockerfile.mongo

services :

  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 4000:4000
    
    
    
  my-database:
    image : mongo:5
    ports:
      - 27017:27017

백엔드 서버 ODM 연결 설정하기

// index.js 파일

import mongoose from 'mongoose'

mongoose.connect('mongodb://localhost:27017/mydocker')
.then(()=>console.log('db 접속에 성곡하였습니다'))
.catch(()=> console.log('db 접속에 실패하였습니다'))

app.listen(4000,()=>{
    console.log('서버 시작')
});

 

localhost:27017 연결 에러

docker-compose build 이후 docker-compose-up 으로 서버를 실행하면,

 

서버 컨테이너와 데이터베이스 컨테이너가 서로 연결되지 못하는 에러가 발생한다.

원인 

백엔드 서버 컨테이너에서 localhost:27017 로 연결을 시도하는데, 여기서 localhost 는 백엔드 서버 컨테이너를 의미한다. 따라서 27017 포트로 연결을 시도해도 연결을 할 수 없다.

해결방법

도커 컴포즈안에서 name resolution ( 이름을 통해서 서로 연결 ) 을 통해서 연결하면 된다.

내 컴퓨터와 컨테이너가 데이터 통신을 할 필요가 없고 컨테이너간 통신만 필요하다면 ,

네임 리졸루션을 사용하면 되니까 포트포워딩은 필요없다.

 

// index.js 파일
// name resolution 사용 ( localhost 가 아니라 my-database )

mongoose.connect('mongodb://my-database:27017/mydocker')
.then(()=>console.log('db 접속에 성곡하였습니다'))
.catch(()=> console.log('db 접속에 실패하였습니다'))

결과 

ODM 으로 db 접속에 성공!

728x90