API도 만들고, DB도 붙이고, 서버도 잘 돌아간다.
그런데 문득,프론트엔드같은 경우는 어떻게 쓰는 걸까그러다 프론트와 백엔드를 실제로 연동하려면 어떤 환경이 필요한지 궁금해졌고,
자연스럽게Docker라는 도구를 접하게 되었다.
Docker는 애플리케이션을 컨테이너라는 가볍고 이식 가능한 실행 환경에 패키징하여, 어디서든 일관되게 실행할 수 있도록 해주는 플랫폼이다.

| 표준화 | Docker가 만든 업계 표준으로 어디서든 이식 가능
| 경량성 | OS를 공유하여 자원 효율이 높고 빠름
| 보안성 | 앱이 격리된 상태로 실행되어 더 안전함
도커는 "내 컴퓨터에선 되는데요?"라는 문제를 해결하기 위해 만들어졌다.
과거에는 개발 환경과 운영 환경이 다르면 코드가 제대로 실행되지 않는 경우가 많았다.
OS, 라이브러리 버전, 설정 값 차이 등이 원인이었다.
이런 환경 차이로 인한 오류를 줄이기 위해,
애플리케이션과 그 실행 환경 전체를 하나로 묶어
어디서든 동일하게 실행할 수 있도록 한 것이 바로 Docker다.
Docker Engine= 도커의 핵심 실행 플랫폼. 이미지를 컨테이너로 만들고 실행하는 역할
Docker Image= 애플리케이션 실행에 필요한 코드, 라이브러리, 설정 등을 포함한 실행 패키지
Docker Container= 이미지를 실행한 실제 인스턴스. 가볍고 독립적으로 실행
Dockerfile= 이미지를 만들기 위한 설정 파일. 어떤 환경에서 어떤 명령어를 실행할지 정의
Docker Hub= 이미지 저장소. 이미지를 푸시하거나 받아와서 공유
Docker Compose= 여러 컨테이너를 하나의 설정 파일로 정의하고 동시에 실행할 수 있게 해주는 도구
Docker는 이미지(Dockerfile로 정의)를 기반으로 컨테이너를 실행(Docker Engine)하고, 이를 공유(Docker Hub)하거나 여러 컨테이너를 함께 관리(Docker Compose)할 수 있는 플랫폼이다.
( 기본적으로 도커가 설치되어 있다는 전제하에 진행 )
도스창으로 진행이 가능하지만, 나는 Docker Desktop 을 사용하기로 했다.
기존에 등록된
이미지(패키지)사용하기 위해Hub로 들어가보자.
여기서
pull만 받으면 설정이 끝난다.
초록색 불이 들어오면 서버가 켜진 것이다.
이런식으로 데이터를 저장할 수 있다.

Hardware
우리가 사용하는 실제 컴퓨터이다.
Host OS (호스트 운영체제)
하드웨어 위에 설치된 운영체제입니다.
예: Windows, macOS, Ubuntu 등
여기까지는 일반적인 PC 사용과 동일하다.
Docker Engine
도커의 핵심. 컨테이너를 생성하고 실행하는 역할을 한다.
이 엔진이 이미지로부터 컨테이너를 만들고 관리한다.
App1, App2, App3 (컨테이너)
Docker 위에 올라가는 애플리케이션 컨테이너들이다.
각 앱은 자신만의 코드, 런타임, 설정을 포함하고 있지만,
운영체제 커널은 Host OS와 공유한다.
즉, 가상머신처럼 OS 전체를 복제하는 게 아니라,
Docker가 필요한 부분만 분리해서 훨씬 가볍게 실행한다는 장점이 있다.
나는 현재 로컬 Redis와 Docker Redis를 모두 사용 중이다.
그런데 인텔리제이에서 Redis를 연결해 보려 하니, 로컬 Redis가 먼저 잡히는 문제가 발생했다.
![]()
위 화면에서 보이듯, 로컬 Redis에 저장된 데이터만 조회되고,
실제로 Docker Redis에 set kun ho를 실행했음에도, 해당 값은 조회되지 않는다.
즉, IntelliJ가 기본적으로 로컬 Redis(기본 포트 6379)에 연결하고 있기 때문에,
Docker Redis 연결 포트를 따로 지정하지 않으면 데이터가 보이지 않는 것이다.
cmd 에서 포트를 설정해준다.
여기서6380(호스트 포트):6379(컨테이너 내부 포트)를 뜻한다.

실제로 연결이 잘 된다.

저장해놨던 데이터도 잘 보인다.
백엔드가 도커로 실행 중이면 > 프론트는 그 도커 컨테이너의 포트로 요청해야 한다.
docker-compose를 쓰면 > 두 컨테이너가 같은 네트워크에 있도록 연결해야 한다.