— 백엔드 개발자와 인프라 관점에서 보는 컨테이너 기술의 본질


1. Docker는 백엔드의 영역인가, 인프라의 영역인가?

많은 개발자가 이렇게 묻습니다.

“도커는 DevOps가 쓰는 거 아닌가?”
“백엔드 개발자가 굳이 알아야 하나?”

✅ 결론부터 말하면

Docker는 인프라 기술이지만, 현대 백엔드 개발자가 반드시 이해해야 할 실행 환경 기술이다.

📌 관점별 차이

관점Docker의 의미
백엔드 개발자 실행 환경 표준화 도구
인프라/DevOps 배포, 오케스트레이션, 리소스 격리 수단
아키텍트 서비스 경계 단위 패키징 전략

왜 백엔드가 알아야 하는가?

  • MSA 환경에서는 서비스 단위 배포가 기본
  • 테스트/로컬/스테이징/운영 환경 차이 제거 필요
  • CI/CD 파이프라인과 직결
  • 클라우드(NCP, AWS, GCP)는 컨테이너 기반이 표준

즉,
“코드를 어디서 어떻게 실행할 것인가?”는 더 이상 인프라만의 문제가 아니다.


2. Docker의 본질

Docker는 애플리케이션 + 실행환경을 하나의 이미지로 패키징하는 기술입니다.

기존 방식

  • 서버 세팅
  • JDK 설치
  • DB 설치
  • 라이브러리 설치
  • 환경 변수 설정

→ 환경이 바뀌면 깨짐

Docker 방식

  • Dockerfile로 환경을 코드화
  • 이미지 빌드
  • 어디서든 동일 실행

3. Docker의 장점

1️⃣ 환경 일관성

“내 PC에서는 되는데요?” 문제 해결

2️⃣ 빠른 배포

VM보다 가볍고 빠름

3️⃣ 격리성

서비스 단위 분리 가능
ex) payment, settlement, redis, kafka 분리

4️⃣ CI/CD 친화적

GitHub Actions, Jenkins에서 바로 빌드/배포 가능

5️⃣ 클라우드 친화적

ECS, EKS, Kubernetes 기본 단위가 컨테이너


4. Docker의 단점

❌ 학습 비용

  • 이미지 레이어 이해 필요
  • 네트워크 구조 이해 필요

❌ 디버깅 난이도 증가

컨테이너 내부 접근 필요

❌ 상태 관리 어려움

DB 데이터는 볼륨 관리 필요

❌ 리소스 관리

특히 Windows/Mac에서 오버헤드 존재


5. OS별 Docker 사용 형태

 

  • Docker Engine이 직접 Linux Kernel 위에서 동작
  • 가장 가볍고 성능 좋음
  • 프로덕션 환경 기본

실서버는 거의 Linux

  • Docker Desktop 사용
  • 내부적으로 WSL2에서 Linux 실행
  • 약간의 리소스 오버헤드 존재

실제로는 “리눅스 위에서 돌아가는 Docker”

  • Docker Desktop 사용
  • 내부적으로 WSL2에서 Linux 실행
  • 약간의 리소스 오버헤드 존재

실제로는 “리눅스 위에서 돌아가는 Docker”

 

 

  • Docker Desktop 사용
  • 내부적으로 VM 기반
  • Apple Silicon(M1/M2)은 ARM 기반 이미지 필요

 

🔎 정리

OS실행 방식성능실무 적합성
Linux 네이티브 최고 운영 환경
Windows WSL2 보통 개발용
Mac VM 기반 보통 개발용

6. Docker vs Docker Compose

🐳 Docker (단일 컨테이너 실행)

 
 
docker run -p 8080:8080 my-app
 
  • 컨테이너 1개 실행
  • 단순 테스트용

🧩 Docker Compose (멀티 컨테이너 관리)

 
version: "3"
services:
app:
build: .
ports:
- "8080:8080"
db:
image: mysql:8
 
docker-compose up
 

Compose의 장점

  • 여러 서비스 동시 실행
  • 네트워크 자동 구성
  • 개발 환경 구성 자동화

비교 정리

구분                                                 Docker                                                              Docker Compose 
목적 단일 컨테이너 실행 다중 서비스 관리
설정 방식 CLI 중심 YAML 선언형
실무 사용 단순 실행 로컬 개발 필수

7. 백엔드 아키텍처 관점에서 Docker의 의미

특히 다음 상황에서 필수입니다.

  • MSA 설계
  • 이벤트 기반 시스템
  • Redis/Kafka 분리
  • Payment/Settlement 서비스 분리

컨테이너는 결국 서비스 경계 단위 배포 수단입니다.

Hexagonal Architecture를 적용했다면
각 Adapter 단위로 컨테이너화 가능


8. Docker는 결국 무엇인가?

Docker는 단순히 “컨테이너 툴”이 아닙니다.

실행 환경을 코드로 관리하는 기술
Infrastructure as Code의 시작점

백엔드 개발자가 도커를 이해하면

  • 배포 구조 이해도 상승
  • DevOps 협업 수월
  • MSA 설계 역량 상승
  • 클라우드 전환 대응 가능

📌 마무리

Docker는 선택이 아니라
현대 백엔드 개발자의 기본 소양이다.

인프라 관점에서 시작됐지만,
이제는 아키텍처와 분리할 수 없는 기술이다.

 

LIST

+ Recent posts