Docker Networking이 뭐길래: 직접 써보며 느낀 연결의 모든 것
Docker를 처음 배우기 시작했을 때, 사실 네트워크 개념이 제일 헷갈렸어요. ‘이게 대체 왜 필요한 거지?’ 싶었는데, 막상 실제로 앱을 돌려보고 여러 케이스를 접하다 보니, 아 이게 진짜 중요한 거구나 싶더라고요. 오늘은 제가 직접 경험하면서 깨달은 Docker 네트워크의 다양한 연결 방식을 이야기해볼게요. 너무 딱딱하게 가지 말고, 수다 떨듯 편하게 얘기해볼게요.

Docker Networking, 쉽게 말하면?
- 컨테이너 안의 앱이 외부 API와 통신하려면 네트워킹이 필수예요.
- swapi.dev 같은 외부 API에 요청을 보내는 게 네트워크 연결의 대표 예시예요.
컨테이너 안에 앱이 하나 돌아가고 있다고 상상해봐요. 그게 Node.js든, Python이든, 뭐든 간에 그 앱이 밖에 있는 다른 API랑 대화를 하려면 어떻게 해야 할까요? 바로 네트워킹이 필요하다는 얘기죠.
예를 들어, 제가 좋아하는 스타워즈 영화 목록을 가져오려고 swapi.dev에 GET 요청을 보내봤거든요. 그게 바로 첫 번째 연결 시나리오였어요.
1. 컨테이너에서 인터넷으로 나가는 길
컨테이너 안에서 밖으로 나가는 건 의외로 쉽더라고요. Node.js 앱에서 Axios로 외부 API에 요청을 보내는 구조인데, Docker는 기본적으로 이런 외부 연결을 막지 않아서 편했어요. swapi.dev 같은 공공 API를 활용하면, 연습용으로 딱 좋더라고요.
2. 컨테이너와 내 컴퓨터 간의 연결
근데 문제가 있었죠. MongoDB를 로컬에 설치해놨는데, 이걸 컨테이너 안에서 접근하려니 잘 안 되는 거예요. 나중에 찾아보니 host.docker.internal이라는 주소를 써야 컨테이너가 내 컴퓨터(DB 포함)를 바라볼 수 있다는 걸 알았어요. 이걸 알고 나니까 세상 편해졌죠. 환경 따라 좀 다르긴 한데, Windows나 Mac에서는 잘 통하더라고요.
3. 컨테이너끼리도 대화를 한다고?
여기서 끝이 아니더라고요. 이번엔 MongoDB 자체도 컨테이너로 돌려보고 싶었어요. 그럼 결국 앱 컨테이너랑 DB 컨테이너가 서로 소통해야 하잖아요? 이때 Docker 네트워크를 새로 만들어서 이름 기반으로 연결하면 되더라고요. 약간 처음엔 낯설었지만, 익숙해지면 오히려 명확하고 좋았어요.
이게 바로 마이크로서비스 구조의 맛 아닐까요? 각자의 역할이 분명한 컨테이너들이 협력하는 느낌이랄까?

Node.js 데모 앱으로 직접 해보기
- Node.js 기반의 간단한 API 앱을 만들어 다양한 네트워크 시나리오를 테스트해봤어요.
- MongoDB, Axios, Express 등을 활용해 외부 요청과 데이터 저장을 모두 처리할 수 있도록 구성했어요.
제가 만든 데모 앱은 아래 라이브러리들을 써요:
- Axios: 외부 요청 보낼 때
- Express: API 만들 때 필수
- Body-parser: JSON 데이터 쉽게 다루려고
- Mongoose: MongoDB랑 친해지려고
기능은 딱 4개:
- GET /favorites: 저장된 즐겨찾기 보기
- POST /favorites: 새로 즐겨찾기 저장
- GET /movies: 스타워즈 영화 목록 가져오기
- GET /people: 캐릭터 정보 받아오기

Docker 없이 먼저 돌려봤어요
MongoDB만 깔려 있다면 실행도 간단해요.
- npm install로 라이브러리 설치
- node app.js로 앱 실행
- Postman으로 요청 날려보기
- GET localhost:3000/movies → 영화 목록 확인
- POST localhost:3000/favorites → JSON 넣고 저장하기
- { "name": "A New Hope", "type": "movie", "url": "https://swapi.dev/api/films/1/" }
- GET localhost:3000/favorites → 저장된 항목들 보기
이러면 앱이 외부 API랑, 그리고 로컬에 설치된 DB랑 동시에 연결되죠. 이제 MongoDB도 컨테이너로 만들면 진짜 ‘네트워크 3종 세트’ 완성입니다.
이게 왜 중요하냐고요?
- 단순한 연결을 넘어서, 실제 앱 구조를 설계하고 운영하는 데 중요한 요소예요.
- 다양한 위치의 API와 DB를 유연하게 연결해야 할 필요가 많아지면서 네트워크 설정이 핵심이 됐어요.
처음엔 그냥 연결만 되면 되는 거 아닌가? 싶었는데, 실제로 프로젝트를 진행하다 보면 이 구조가 얼마나 중요한지 깨닫게 돼요. API는 밖으로 나가야 하고, DB는 안에 있거나 밖에 있거나 하고, 또 여러 컨테이너가 하나의 앱처럼 협력해야 하니까요.
그래서 제가 느낀 몇 가지 팁:
- 컨테이너 하나엔 하나의 역할만 맡기기 (이게 진짜 편해요)
- 직접 네트워크 정의해서 연결 관리하기
- localhost는 절대 만능이 아니에요! 상황에 맞게 주소 설정하기
이제 다음 스텝은?
- Node.js 앱과 MongoDB를 각각 컨테이너로 분리하고, Docker Compose로 동시에 실행할 수 있도록 구성해볼 거예요.
- 모든 연결이 자연스럽게 이어지도록 만드는 게 목표예요.
Node.js 앱이랑 MongoDB를 각각 컨테이너로 만들고, Docker Compose로 한 번에 띄우는 거죠. 직접 해보면 진짜 ‘내가 뭔가 만들고 있다’는 실감이 들 거예요. 연결도 뚝딱 되고요.
정리하며, 그냥 제 경험으로는...
- Docker 네트워킹은 실전에서 반드시 마주하게 되는 개념이에요.
- 직접 해보면서 익혀두면 어떤 구조든 자신 있게 설계할 수 있어요.
Docker 네트워크 기능은 그냥 기능 하나가 아니라, 전체 구조의 핵심이에요. 컨테이너끼리 어떻게 말을 주고받는지를 알게 되면, 복잡한 앱도 훨씬 쉽게 관리할 수 있어요. 저처럼 실무에서 쓰고 싶다면, 꼭 한 번 직접 만들어보고 느껴보세요. 무조건 추천입니다.
'SW > Kubernetes, Docker' 카테고리의 다른 글
| Docker 컨테이너 간 네트워크 연결 실습 가이드 (초보자도 가능) (0) | 2025.09.11 |
|---|---|
| Docker로 Node.js와 MongoDB 연결하는 법 (초보자도 가능한 실습 가이드) (0) | 2025.09.10 |
| Docker ARG와 ENV 차이점 완벽 정리: 실무에서 바로 써먹는 설정 팁 (0) | 2025.09.08 |
| Dockerfile COPY 꼭 써야 할까? Bind Mount만으로 충분할지 완전 정리! (0) | 2025.09.07 |
| Docker에서 read-only mount 설정하는 이유와 실전 적용 팁 (0) | 2025.09.06 |