Docker로 Node.js 개발, 이렇게 하니까 진짜 편해졌어요 (로그 보존부터 환경 변수까지)
처음엔 Docker가 그냥 배포용 도구인 줄만 알았어요. 근데 써보니까, 이거 개발에도 엄청 유용하더라고요. 특히 Node.js 프로젝트 할 땐 진짜 신세계예요. 오늘은 제가 직접 해보면서 느꼈던 거랑, 어떻게 설정하면 편한지 찐 경험을 담아서 풀어볼게요. 로그도 잘 남고, 코드 바꾸면 바로 반영되고, 비밀번호 같은 건 안전하게 처리하고요. 다 같이 해봐요.
🧠 이런 개발 환경, 간절하지 않으세요?
이런 거요:
- 컨테이너 재시작해도 로그 안 날아가고요.
- 코드 수정하면 서버도 자동으로 반응하고요.
- DB 접속 같은 민감한 정보는 코드에 안 박고 안전하게 관리하는 거죠.
이게 처음엔 복잡해 보여도, 하나하나 해보면 별거 없어요. 저도 그랬어요.
🛠 Step 1: MongoDB 로그 날아가지 않게 하기
일단 MongoDB는 volume 설정해서 데이터 날아가지 않게 만들었고요. 여러 컨테이너가 붙을 수 있게도 해놨어요. 이건 이미 다들 해보셨을 테니까 넘어가고, 이제 Node.js 백엔드에 이걸 적용할 거예요.
🔄 Step 2: Node.js 컨테이너, 좀 더 유연하게 바꾸기
1. 일단 기존 컨테이너 멈춰줘요
기존에 돌던 거 있으면 꺼주세요:
docker stop goals-backend
2. 로그도 남기고, 코드도 실시간 반영되게 volume 추가하기
두 가지 volume 씁니다:
- 로그는 named volume으로
- 코드 수정되면 바로 반영되게 bind mount
docker run -d \
-v logs:/app/logs \
-v /full/path/to/backend:/app \
goals-node
/app/logs는 로그 저장하는 곳이고요, /app은 그냥 우리 코드 있는 디렉터리라고 생각하면 돼요.
⚠️ 백엔드 폴더 전체 경로 넣으셔야 돼요. 파일 하나 경로 말고!
3. node_modules 깨지지 않게 보호막 하나 추가하기
호스트에 node_modules 없으면 컨테이너가 엉망돼요. 그래서 이거 꼭 해주세요:
-v /app/node_modules
이거 하나면 갑자기 서버 안 켜지는 일은 안 생겨요. 제가 한 번 겪어봤거든요. 고통이었습니다.

🔃 코드 바꿀 때마다 자동으로 서버 리스타트 되게 하기 (nodemon 최고)
Docker는 기본적으로 코드 수정해도 서버 재시작 안 해줘요. 그래서 Nodemon이라는 친구가 필요해요.
Nodemon 설치는 이렇게
package-lock.json은 지워주시고요, package.json은 이렇게 바꿔요:
"devDependencies": {
"nodemon": "2.0.4"
},
"scripts": {
"start": "nodemon app.js"
}

Dockerfile도 손 좀 봐야 해요
CMD ["npm", "start"]
그다음 이미지 다시 빌드하세요:
docker build -t goals-node .
이제 컨테이너 실행:
docker run -d \
-v logs:/app/logs \
-v /full/path/to/backend:/app \
-v /app/node_modules \
goals-node
코드에 한 줄만 바꿔보세요. 로그 확인은 이렇게:
docker logs goals-backend
Nodemon이 알아서 서버 다시 켜줍니다. 진짜 감동이에요.
🔐 비밀번호 같은 거 코드에 박지 말자, 환경 변수 쓰자
진짜 중요한 부분이에요. 코드에 비번이나 계정 정보 넣으면 안 돼요. 나중에 Git에 올라가면 사고 납니다.
1. Dockerfile에서 기본값 넣기
ENV MONGODB_USERNAME=max
ENV MONGODB_PASSWORD=secret
기본값이긴 하지만, 실행할 때 원하는 값으로 덮을 수 있어요.
2. app.js에서 환경 변수 꺼내쓰기
const username = process.env.MONGODB_USERNAME;
const password = process.env.MONGODB_PASSWORD;
const uri = `mongodb://${username}:${password}@mongodb:27017/goals?authSource=admin`;
3. 컨테이너 실행할 때 변수 주입하기
docker run -d \
-v logs:/app/logs \
-v /full/path/to/backend:/app \
-v /app/node_modules \
-e MONGODB_USERNAME=max \
-e MONGODB_PASSWORD=secret \
goals-node
이제 docker logs goals-backend 하면 DB 연결도 잘 되는 거 확인할 수 있어요.
🧼 .dockerignore는 깔끔함의 시작이에요
안 써도 되는 파일 굳이 다 컨테이너에 복사하지 말고, 이런 식으로 걸러줘요:
node_modules
Dockerfile
.git
빌드 속도 빨라지고, 쓸데없는 파일 덜어내니까 관리도 편해요.

✅ 마지막 점검 리스트 (이거 체크하세요)
- 이미지 새로 빌드했나요?
- volume 설정 다 했나요?
- 코드 바꿀 때 nodemon이 반응하나요?
- DB 연결 테스트는 해봤나요?
- 프론트엔드도 잘 붙나요?
❤️ 이 방식, 진심 편합니다
제가 이거 안 하고 개발할 땐 진짜 매번 컨테이너 껐다 켜고 로그는 날아가고... 스트레스였어요. 근데 이렇게 구성해놓고 나니까,
- 로그도 날아가지 않고
- 코드 바꾸면 바로 적용되고
- 민감한 정보도 안전하게 관리되고
정말 하나하나가 삶의 질 향상이에요.
'SW > Kubernetes, Docker' 카테고리의 다른 글
| 여러 Docker 컨테이너를 한 번에 실행하는 가장 쉬운 방법 (Docker Compose 꿀팁) (0) | 2025.09.16 |
|---|---|
| Docker + React 실시간 반영 환경 설정법 (윈도우 WSL2 완벽 대응) (0) | 2025.09.15 |
| MongoDB 데이터를 Docker에서 안전하게 유지하는 방법 (볼륨 설정 가이드 포함) (0) | 2025.09.13 |
| Docker Networking 제대로 이해하기: 컨테이너 간 통신과 호스트 연결 완전 정리 (0) | 2025.09.12 |
| Docker 컨테이너 간 네트워크 연결 실습 가이드 (초보자도 가능) (0) | 2025.09.11 |