앱을 만들다 보면 종종 “서버가 필요하다”는 이야기를 듣게 됩니다. 하지만 실제로 서버를 직접 구축하고 운영하기란 꽤나 부담스러운 일입니다. 이럴 때 등장하는 것이 바로 Docker입니다.
Docker는 복잡한 서버 환경을 손쉽게 구현할 수 있는 도구로, 개발자뿐 아니라 이제는 앱 개발자에게도 필수 도구가 되어가고 있습니다. 이번 글에서는 Docker가 어떤 개념인지, 그리고 실습을 위해 어떻게 사용할 수 있는지를 단계별로 알아보겠습니다.
Docker란 무엇인가?
Docker는 리눅스 기반의 가상화 기술을 활용해 애플리케이션이 실행될 수 있는 독립된 환경을 만들고 배포할 수 있게 도와주는 도구입니다.
컨테이너 vs 가상머신
- 전통적인 가상머신(VM)은 OS 전체를 가상화하여 구동해야 하기 때문에 무겁고 느립니다.
- 반면, Docker는 컨테이너(container)라는 단위를 사용하여 훨씬 가볍고 빠르게 실행됩니다.
Docker의 핵심 개념
용어 | 설명 |
이미지 | 애플리케이션을 실행하기 위한 모든 설정과 파일이 포함된 패키지 |
컨테이너 | 이미지를 실행한 실제 인스턴스. 애플리케이션이 구동되는 공간 |
도커 허브 | 다양한 Docker 이미지를 공유하고 가져올 수 있는 저장소(레포지토리) |
왜 Docker를 써야 할까?
- 운영체제에 상관없이 동일한 환경을 구성할 수 있습니다.
- 애플리케이션을 실행하는 데 필요한 모든 것을 이미지로 패키징할 수 있어 배포가 쉬워집니다.
- 실습용 서버도 단 몇 줄의 명령어만으로 실행 가능!
Docker 설치 및 실습 환경 구성
이제 본격적으로 Docker를 설치하고, 실습을 위한 API 서버를 실행해보겠습니다. 우리 목표는 Docker를 이용해 백엔드 서버를 로컬에서 띄우고, 이를 프론트엔드 앱과 연결하는 것입니다.
1. Docker 설치
먼저 Docker 공식 사이트에 접속하여 운영체제에 맞는 설치 파일을 다운로드합니다. 설치 후 실행하면 Docker Desktop이 시스템 트레이에 아이콘으로 뜨게 됩니다. 이 아이콘이 활성화되어 있으면 Docker가 잘 실행되고 있는 것입니다.
2. 실습용 서버 실행하기
설치가 끝났다면, 이제 Docker를 통해 실습용 API 서버를 실행해보겠습니다. 우리는 111coding/market-server 라는 이미지를 활용할 거예요. 이 이미지는 마켓 앱을 위한 API가 내장된 상태로, 별도의 설정 없이도 바로 사용할 수 있습니다.
- 1단계: docker pull 명령어로 해당 이미지를 다운로드합니다.
- 2단계: docker run 명령어로 컨테이너를 실행시켜 API 서버를 구동합니다.
- 3단계: 크롬 브라우저에서 http://localhost:8080/docs 로 접속해 Swagger API 문서를 확인해봅니다. 정상적으로 보이면 서버가 잘 작동 중인 것입니다.
이 과정을 통해 우리는 단 몇 줄의 명령어만으로 백엔드 서버 환경을 구축할 수 있었고, 이는 바로 Docker가 주는 가장 큰 이점입니다.
실습용 명령어 모음
# WSL2 설치 (Windows 사용자 전용)
wsl --install
wsl --set-default-version 2
# 도커 이미지 다운로드
docker pull 111coding/market-server
# 컨테이너 실행 (맥 사용자 기준)
docker run -p 8080:8080 -e HOST_IP=$(ifconfig en0 | grep 'inet ' | awk '{print $2}') -d 111coding/market-server
# 브라우저에서 접속
http://localhost:8080/docs
그럼 이제 이 서버에 실제로 요청을 보내 데이터를 주고받는 방식에 대해 알아보겠습니다.
Docker 기반 REST API 서버와 통신하기
이제 Docker로 실행한 API 서버에 실제로 데이터를 주고받는 단계로 넘어가 봅시다. 클라이언트 앱(예: Flutter, React 등)에서는 서버에 HTTP 요청을 보내고 응답을 받게 됩니다. 이 과정은 전형적인 REST API 통신 흐름을 따릅니다.
우리가 실행한 서버는 Swagger 문서를 통해 어떤 엔드포인트가 있고, 어떤 요청 데이터를 요구하는지를 쉽게 파악할 수 있도록 되어 있습니다. 예를 들어 GET /products는 모든 상품 정보를 조회하고, POST /products는 새 상품을 등록하는 API입니다.
클라이언트에서 이 API를 활용할 때는 Dart라면 Dio, JavaScript라면 Axios와 같은 HTTP 라이브러리를 사용하게 됩니다. 요청 시에는 다음과 같은 요소들을 신경 써야 합니다:
- URI: 서버에서 제공하는 주소 (ex: /products, /users/:id)
- Method: GET, POST, PUT, DELETE 등
- Header: 인증 토큰, Content-Type 등
- Body: 서버로 보낼 데이터 (POST, PUT 등에서 주로 사용)
이제 우리는 백엔드 서버가 어떻게 작동하고, Docker가 이 서버를 얼마나 쉽게 띄워주는지를 이해하게 되었습니다. 이 경험은 개발자뿐 아니라 기획자, 디자이너, QA에게도 매우 유용합니다. 자신이 만든 제품이 실제로 어떤 방식으로 사용자와 데이터 주고받는지를 몸소 확인할 수 있기 때문이죠.
마치며...
Docker는 현대 개발 환경에서 없어서는 안 될 도구입니다. 특히 스타트업이나 소규모 팀에서는 백엔드를 직접 구현하지 않고도 실습 환경을 만들 수 있게 해주는 강력한 무기가 됩니다. 우리는 이번 실습을 통해 Docker의 개념부터 설치, 서버 실행, 그리고 API 테스트까지 한 흐름으로 경험해보았습니다.
직접 서버를 띄우고 데이터를 주고받는 경험은 단순히 강의를 듣거나 문서를 보는 것보다 훨씬 실용적입니다. 직접 Docker를 자주 활용해보는 것이 꼭 필요할 것 같습니다!
세 줄 요약
- Docker는 복잡한 서버 환경을 단 몇 줄의 명령어로 실행할 수 있게 해주는 컨테이너 플랫폼이다.
- 우리는 실습용 REST API 서버를 Docker로 실행하고, Swagger 문서로 API 테스트를 해보았다.
- 개발자뿐 아니라 기획자, 디자이너도 Docker를 통해 빠르게 프로덕트 흐름을 체험할 수 있다.
'IT' 카테고리의 다른 글
[항해플러스 | 항해99] 1인 개발자를 위한 백엔드 부트캠프, 할인코드 있어요! (2) | 2025.04.17 |
---|---|
채팅 기능이 필요할 땐 Socket (2) | 2025.04.17 |
코딩 몰라도 개발하는 시대, 바이브 코딩 (2) | 2025.04.15 |
Firebase를 연동해보자! (0) | 2025.04.15 |
DIO를 활용한 HTTP 통신 (0) | 2025.04.14 |