
Intro
Udemy 러닝크루 2기 스터디에 참여하면서 이번 주제는 Network에 대해서 공부했다. 사실 줄곧 Data Science 분야만 공부하다보니 API나 Network이런 개념에 대해서 생소했었지만, 지나가다 한번씩 경험해봤던 클라우드나 SSL 같은 개념들을 접하면서 Operation에도 많은 흥미가 생겼었다. 이번 게시글에는 Network를 공부하면서 배웠던 3가지 통신에 대해서 적어보려한다.
데모앱을 Local에서 실행시키면...
강의에서는 강사님께서 구현하신 데모앱을 통해 Local 환경에서 mongoDB와 node를 통해 구현한 api 간의 통신에 대해서 먼저 설명해주셨다. mongoose라는 모듈을 사용하여 Json이라는 텍스트 파일을 기반으로 DB와 통신하는 단순한 앱이었고 정상적으로 작동했다.
그리고 Demo App의 경우, Local이 아닌 Container 환경에서 실행시켜도 웹(WWW)내 더미 API와의 통신에서, 별도 설정을 해주지 않아도 Container에서 통신할 수 있었다. 그럼 이제 대조적인 사례를 살펴보자.
HostOS가 관리하는 프로그램과의 통신
만약 우리가 데모앱을 구현할 때, Container 내부에 DB를 만들어주지 않는다면 어떻게 될까? 강의에서도 소개되었지만 DB를 찾을 수 없다고 한다. 왜냐하면 우리가 설치해준 MongoDB는 Local 즉, HostOS에 의해 관리되는 프로세스이기 때문이다. 우리가 사용하는 Container 관점에서 해당 MongoDB 어플리케이션은 Emulator와 Docker Engine에 의해 격리되어 인식할 수 없는 프로그램이 된다. 앞서 WWW와의 통신은 별도의 처리없이도 자연스레 가능했던 점과 '격리'가 된다는 차이를 확실하게 느낄 수 있다.
다만, 데모앱과 DB와의 통신과정에서 도메인으로 mongodb 프로토콜에 host.docker.internal 이라는 주소를 사용하면, HostOS가 관리하는 어플리케이션의 주소를 찾을 수 있어서 통신이 가능해진다. 아마 추측컨데, 이전 스터디에서도 Linux가 아닌 OS환경에서 Emulator에 접속하면 실제 기명 볼륨으로 저장된 데이터에 접근 가능했던 것을 다뤘던 적이 있었는데(추후 정리해서 링크 첨부), 강제로 격리를 뚫고 접근할 수 있는 방법이 있다는 것을 인지하면 위 방식이 가능하다는 건 놀라운 일이 아니라고 생각한다.
컨테이너 간 통신
이 경우는 데모앱을 구동할 컨테이너와 DB를 구성할 컨테이너를 각각 따로 만들어 두개의 컨테이너 간의 통신에 대한 내용이다. 미리 정리하면 두 컨테이너가 동일한 네트워크 환경에 존재한다면 해당 컨테이너의 이름을 도메인 주소로 활용하여 통신이 이뤄질 수 있다.
docker run -d --name mongodb mongo
docker container inspect mongodb
# NetworkSettings > IPAddress > Domain Update
이렇게 직접 IP Address를 찾아서 하드코딩해주는 방법도 있지만 좀 더 우아한 방법은 Container 간 통신이 가능할 사설 Network를 만들어주는 것이다.
docker network create <name>
docker run -d --name mongodb --network <name> mongo
# Domain Update = container name = mongodb
docker run -d --name demoapp --network <name> --rm -p 3000:3000 demoapp_image
먼저 사설망을 정의해주고, 사용할 두 컨테이너들을 동일한 네트워크에서 실행시켜준다. 이때 Demo App 상에서 mongoose로 연결한 주소에 host.docker.internal로 host App과 이어줬던 것과 같이 사설 네트워크에 속해있는 container name으로 연결해줄 수 있다. 후에 Kubernetes를 공부할 때 Pod 개념과 이어지는지 주목해보자 .. !
Outro
API부터 조금 생소했었지만,,, 1주 미뤄서 2주동안 공부해서 node.js REST API에 대해서 조금 이해했고 그러고 보니 강사님의 Demo App도 뜯어보고 싶다는 생각이 들었다. Docker Network 자체는 어렵지 않았지만 스터디하면서 스터디원들과 고민했던 것들이 누적되면서 좋은 관점들이 자꾸 생기는 것 같다.
인스타 주소 🎗
'MLOps > Docker Compose' 카테고리의 다른 글
[8] Utility Container (0) | 2025.03.25 |
---|---|
[7] Ochestration (0) | 2025.03.25 |
[5] Argument와 Environment Value 설정 (0) | 2025.03.18 |
[4] Docker Data Storage 관리(Application,Temporary, Persistent) (0) | 2025.03.04 |
[2] Dockerfile 정의와 관련 명령어 (0) | 2025.02.25 |