SW/Kubernetes, Docker

Docker Networking 개념 쉽게 배우기: 실습 기반 설명과 팁

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

Docker Networking이 뭐길래: 직접 써보며 느낀 연결의 모든 것

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

 

Docker Networking, 쉽게 말하면?

 

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 데모 앱으로 직접 해보기

  • Node.js 기반의 간단한 API 앱을 만들어 다양한 네트워크 시나리오를 테스트해봤어요.
  • MongoDB, Axios, Express 등을 활용해 외부 요청과 데이터 저장을 모두 처리할 수 있도록 구성했어요.

 

제가 만든 데모 앱은 아래 라이브러리들을 써요:

  • Axios: 외부 요청 보낼 때
  • Express: API 만들 때 필수
  • Body-parser: JSON 데이터 쉽게 다루려고
  • Mongoose: MongoDB랑 친해지려고

 

기능은 딱 4개:

  • GET /favorites: 저장된 즐겨찾기 보기
  • POST /favorites: 새로 즐겨찾기 저장
  • GET /movies: 스타워즈 영화 목록 가져오기
  • GET /people: 캐릭터 정보 받아오기

 

Docker 없이 먼저 돌려봤어요

 

Docker 없이 먼저 돌려봤어요

MongoDB만 깔려 있다면 실행도 간단해요.

  1. npm install로 라이브러리 설치
  2. node app.js로 앱 실행
  3. 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 네트워크 기능은 그냥 기능 하나가 아니라, 전체 구조의 핵심이에요. 컨테이너끼리 어떻게 말을 주고받는지를 알게 되면, 복잡한 앱도 훨씬 쉽게 관리할 수 있어요. 저처럼 실무에서 쓰고 싶다면, 꼭 한 번 직접 만들어보고 느껴보세요. 무조건 추천입니다.

반응형