지금은 로컬의 index.js 파일을 변경하여도 docker내의 파일은 변경되지 않는다.
위의 두가지 모두 적용해야 도커내에서도 매번 build를 하지 않고 변경된 소스코드를 적용할 수 있다.
이미 nodemon으로 실행시키는 것은 적용된 상태다. 그렇기에 1번 과정만 추가하면 된다.
그렇다면 1번 과정은 어떻게 추가할 수 있을까? 이를 위해 Volumns 가 필요하다.
먼저, 04-06-docker-compose-with-mongoose-board 폴더를 복사고 이름을 04-07-docker-compose-with-mongoose-board2 로 변경한다.
backend → docker-compose.yaml 파일에 volumes를 추가해 준다.
version: '3.7'
# 컴퓨터들
services:
# 컴퓨터이름
my-backend:
build:
context: .
dockerfile: Dockerfile
volumes: # 추가된 부분
- ./index.js:/myfolder/index.js
- ./email.js:/myfolder/email.js
ports:
- 4000:4000
# 컴퓨터이름
my-database:
image: mongo:5
ports:
- 27017:27017
volumes: ./index.js : /myfolder/index.js
위가 의미하는 것은 현재 위치의 index.js 파일을 docker 컴퓨터 내부의 myfolder 안의 index.js 와 연동해준다는 것을 의미한다.
volumes를 통해 로컬의 소스코드와 도커내의 소스코드를 공유할 수 있다.
db에 저장할 때, ODM 명령어가 아니라 실제 변경된 db의 명령어를 확인하고 싶을 때가 있다.
이때, debug 모드가 필요하다. 이를 사용하면 실제 mongoDB의 명령어가 어떻게 오가는지 확인할 수 있다.
mongoose에 대한 로그를 보기 위해서는 index.js파일에 아래 내용을 추가해야 한다.
// index.js
// 생략...
mongoose.set("debug", true) // debug가 추가된 부분
// 몽고DB 접속!!
mongoose.connect("mongodb://my-database:27017/mydocker10")
.then(() => console.log("db 접속에 성공하였습니다."))
.catch(() => console.log("db 접속에 실패하였습니다."))
app.listen(4000, () => {
console.log("백엔드 API 서버가 켜졌어요!!!")
})
로그를 통해 DB에 저장되는 query문을 확인할 수 있다.