반응형

이번 포스트에서 Node.js 컨테이너를 MongoDB컨테이너에 연결하는 방법을 실습해보도록 하겠습니다.


Node.js, express 프로젝트 준비하기

먼저 몽고디비와 통신하는 Node.js 프로젝트를 준비하겠습니다.  프로그램의 중요한 흐름 몇 부분만 소개하도록 하겠습니다.

node프로젝트에서 express로 웹서버를 만들어 주었습니다.

 그리고 init 함수를 호출해서 몽고 디비의 커넥션을 열고 있습니다.

여기서 주목해야할것이 커넥션 스트링인데, config.databaseConfig의 host명은 "mongodb"로 설정 되어 있습니다. 이것은 정해진 것이 아니라 작성자가 정의하는 문자열입니다. 그리고 이 호스트 이름을 mongoDB 컨테이너와 링크 설정을 할 때 설정값으로 사용될 것입니다.

참고로 init함수는 아래와 같습니다.

웹 서버는 3가지의 route url를 가지고 있습니다. 

/todo로 접속하면 몽고디비의 데이터를 가져와서 화면에 출력해 줍니다.

/newtodo로 접속하면 todo입력할수 있는 Todo입력 페이지를 제공해 줍니다.

/newpost로 post요청이 들어오면 입력한 Todo를 몽고 디비에 저장하고 다시 todo페이지로 리다이렉트 해줍니다.

간단히 프로젝트를 정리해보면, node의 express 서버에서 몽고디비의 연결을 가져온 후 요청된 url에 맞춰 디비를 조회하거나 업데이트하게 됩니다. 그리고 기억해야 할 점은 몽고 디비의 호스트를 "mongodb"로 설정한 점입니다. 이제 프로그램이 완성됐으니 이제 해야 할 일은 이미지를 만드는 일입니다.


도커 파일로 Node.js 이미지 만들기

이미지를 만들기 위해 아래와 같이 dockerfile을 만들었습니다.

dockerfile을 빌드하겠습니다.

docker build -f node.dockerfile -t fronquery/nodeapp .

docker list image로 이미지를 검색해보면 방금 빌드한 이미지가 나옵니다.

이미지가 준비되었으니 다음에 할 작업은 Mongo이미지를 실행하는 것입니다.


두 컨테이너 연결하기

첫 번째 컨테이너, MongoDb 컨테이너 실행하기

docker run -d --name my-mongodb mongo

컨테이너를 실행하고, docker ps로 확인해보면 몽고 컨테이너가 my-mongodb라는 이름으로 실행되고 있는 걸 확인해 볼 수 있습니다. 이 이름을 이용해서 노드 컨테이너와 연결하게 됩니다.

 

두 번째 컨테이너, Node.js 컨테이너 실행하기

Node.js 컨테이너를 실행하면서 몽고 디비와 연결을 하는 게 목표입니다. 몽고 디비의 컨테이너 이름은 "my-mongodb"이고 node프로젝트에서 몽고디비의 호스트명을 "mongodb"로 설정한 것을 잠시 리마인드 해주세요. 이 이름이 컨테이너 연결할 때의  핵심입니다.

docker run -d -p 3000:3000 --link my-mongodb:mongodb fronquery/nodeapp

--link 설정으로 my-mongodb:mongodb 를 설정하면서 도커를 실행시키고 있습니다. 컨테이너를 실행시키면서 my-mongodb라는 컨테이너를 연결해달라고 요청하고 있습니다. 그리고 my-mongodb는 mongodb로 할당시키고 있습니다.

 docker ps를 실행해보겠습니다. 여기 두 컨테이너가 실행 중임을 확인할 수 있습니다.

 

연결 확인해 보기

웹서버에 접속해 보겠습니다. 정말 두 컨테이너가 연결되었을까요?

/todo로 접속했습니다. todo페이지는 디비에서 todo데이터를 가져와 화면에 출력하지만 아직 몽고 디비에 데이터가 없어서 아무런 표시를 하고 있지 않습니다.

아직 디비에 데이터가 없는 상태

 

/newtodo 로 접속해서 디비에 데이터를 저장해 보겠습니다.

몽고디비에 데이터를 저장

 

Add Todo를 누르면 다시 todo화면으로 이동하고 DB에서 다시 데이터를 확인하게 됩니다.

몽고 디비에서 데이터를 잘 가져오고 있습니다!!!

이로써 우리는 두 컨테이너 몽고 디비 컨테이너와 Node.js 컨테이너가 연결돼있다는 사실을 확인할 수 있었습니다.


여기까지 읽어주셔서 감사합니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기