SW/Kubernetes, Docker

Docker 컨테이너 간 네트워크 연결 실습 가이드 (초보자도 가능)

얇은생각 2025. 9. 11. 07:30
반응형

Introduction: 나만 몰랐던 Docker 컨테이너 연결법

처음엔 저도 그랬어요. Node.js 앱 하나 만들고 MongoDB에 저장하려고 했는데... 둘 다 Docker 안에 넣었더니 갑자기 아무것도 안 되는 거예요. 분명 잘 만든 거 같은데 왜 연결이 안 되지? 진짜 멘붕이었죠.

근데 알고 보니 이런 경험, 저만 겪는 게 아니더라고요. Docker 처음 접하면 누구나 한 번쯤은 겪는 통과의례랄까. 그래서 이번에 이 과정을 쭉 정리해봤어요. Docker 초보라도, 앱 구조를 좀 더 깔끔하게 정리하고 싶은 분이라면 꼭 한 번 따라 해보세요.

 


 

왜 굳이 여러 컨테이너로 나누냐고요?

 

왜 굳이 여러 컨테이너로 나누냐고요?

처음엔 '한 컨테이너에 다 넣으면 되지 않나?' 생각했어요. 근데 실제로 써보면, 역할을 나누는 게 훨씬 좋아요. 관리도 쉽고, 나중에 문제 생겨도 어느 부분인지 딱 감이 오거든요.

 

예를 들어:

  • Node.js API는 하나의 컨테이너에 따로 돌리고,
  • MongoDB는 또 다른 컨테이너에 따로 띄우고요.

일단은 지금 돌고 있는 Node 앱부터 꺼주세요:

docker stop favorites

 

이제 로컬에 깔린 MongoDB는 쓸 일 없습니다. Docker로 띄우면 더 깔끔하고 편하거든요. 애초에 설치 안 하신 분들은 완전 잘하신 거예요.

 


 

MongoDB, Docker로 바로 띄우기

 

MongoDB, Docker로 바로 띄우기

다행히도 MongoDB는 공식 이미지가 있어요. Dockerfile 따로 만들 필요 없이 바로 실행하면 돼요.

docker run mongo

 

근데 이렇게 실행하면 터미널이 멈춰있는 느낌? 그래서 백그라운드 모드로 이름까지 지정해서 실행하면 더 편합니다:

docker run -d --name mongodb mongo

 

이제 MongoDB가 도커 안에서 돌아가고 있어요. 신기하죠?

 


 

이제 Node 앱이 MongoDB를 찾아야 하는데...

문제는 여기서 시작돼요. Node 앱이 MongoDB한테 말을 걸어야 하는데, host.docker.internal은 컴퓨터한테 말 거는 거라 MongoDB를 못 찾죠.

그래서 MongoDB의 IP 주소를 알아야 해요:

docker container inspect mongodb

 

나오는 내용 중 NetworkSettings에 보면 IP가 있어요. 그걸 복사해서 Node 앱 연결 주소에 붙여 넣습니다.

그리고 다시 이미지 빌드하고 실행!

docker run --name favorites -d favorites-node-image

 

Postman으로 테스트해볼까요?

  • GET /favorites → 아무것도 안 나와요. 당연해요, 아직 아무것도 안 넣었으니까요.

하지만 중요한 건 연결이 됐다는 사실! 에러 안 나면 일단 성공입니다.

 


 

근데 매번 IP 바꾸는 건 너무 귀찮지 않나요?

맞아요. 컨테이너를 껐다 켜면 IP도 바뀌어요. 그때마다 주소 바꾸고, 빌드하고... 너무 비효율적이죠.

그래서 Docker에서는 network라는 기능을 제공합니다. 이게 진짜 꿀이에요.

 


 

Docker 네트워크 만들기, 생각보다 쉬워요

 

Docker 네트워크 만들기, 생각보다 쉬워요

컨테이너끼리 친구처럼 서로 이름 불러가며 이야기하게 하려면, 같은 네트워크에 있어야 해요.

먼저 둘 다 꺼줍니다:

docker stop favorites
docker stop mongodb

 

그리고 정리도 해줘야죠:

docker container prune

 

그다음 네트워크 생성:

docker network create favorites-net

 

잘 만들어졌는지 확인도 하고요:

docker network ls

 

이제 MongoDB를 새 네트워크에 포함시켜 실행합니다:

docker run -d --name mongodb --network favorites-net mongo

 


 

이제는 이름으로 서로 불러보자!

네트워크 안에서는 컨테이너 이름이 곧 주소예요. DNS 같은 느낌이랄까요?

그러니까 Node 앱에서 MongoDB 연결 주소를 mongodb로 바꾸세요. (컨테이너 이름이 그거니까요!)

 

그리고 다시 빌드하고 실행:

docker run --name favorites -d --rm -p 3000:3000 --network favorites-net favorites-node-image

 

다시 Postman으로:

  • GET /favorites → 아직은 빈 배열
  • POST로 favorite 하나 저장
  • 다시 GET → 이번엔 저장된 데이터 나옵니다!

 

이제 진짜 컨테이너끼리 말이 통해요. 감동...

 


 

포트를 굳이 안 열어도 되는 이유

혹시 궁금하셨나요? MongoDB 실행할 때 포트 안 열었잖아요. 그 이유는 단순해요. 외부에서 접근할 게 아니라면 굳이 열 필요가 없거든요.

같은 네트워크 안에서는 포트 없이도 잘만 대화합니다. 효율적이죠?

 


 

결론: 처음엔 복잡했지만, 해보니 별거 아니었어요

이제 여러분도 해냈어요:

  • 앱을 역할에 따라 나누고,
  • 네트워크로 연결하고,
  • 실전에서 쓸 수 있는 구조를 완성했습니다.

Docker network만 잘 써도 관리가 진짜 편해져요. 처음엔 좀 낯설어도, 익숙해지면 이만큼 유용한 게 없습니다.

반응형