백엔드

[Spring Boot] tave 스터디 2주차 개념 정리

밍들레밍 2026. 3. 29. 23:28

도커를 쓰는 이유는 프로그램마다 필요한 실행 환경을 직접 깔고 맞추는 번거로움을 줄이고, 어느 컴퓨터에서든 비슷한 환경에서 쉽게 실행하기 위해서이다.

 

Docker란 무엇인가

컨테이너를 활용하여 소프트웨어를 배포 및 구동하기 위한 오픈 소스 플랫폼( 소스코드가 공개되어 있어서 누구나 확인·수정·배포할 수 있고, 다른 프로그램이나 서비스가 그 위에서 동작하거나 연동될 수 있도록 기반 역할을 하는 시스템 )

  • 컨테이너 : 애플리케이션과 그 실행에 필요한 모든 파일과 설정을 포함하는 독립적인 실행 환경
  • 이미지 : 컨테이너를 생성하기 위한 읽기 전용 템플릿, 애플리케이션 코드, 런타임, 라이브러리, 도구 등
  • Dockerfile : 이미지를 빌드하기 위한 지침이 포함된 텍스트 파일
  • Docker Hub : Docker 이미지를 공유하고 다운로드할 수 있는 공개 레지스트리

 

하나의 PC에서 독립된 실행 환경을 만드는 방법  - 가상머신 vs Docker 컨테이너

내 컴퓨터에서 별도의 실행 환경을 만들려면, 가상머신처럼 운영체제 단위로 분리하는 방법과 컨테이너처럼 애플리케이션 실행 환경 단위로 분리하는 방법이 있다.

가상머신

  • 실제 OS와 게스트 OS를 이어주기 위해 하이퍼바이저 사용
  • 호스트 OS 위에 하이퍼바이저를 설치하고, 그 위에 게스트 OS를 실행
  • 각 가상머신은 자체 OS를 가지고 있어 리소스를 많이 사용함

Docker 컨테이너

  • 게스트 OS를 올리지 않고, 호스트 OS의 커널을 공유
  • 애플리케이션을 Docker engine 위에 올림
  • 무거운 OS를 포함하지 않기 때문에 가볍고 빠름

 

Docker의 구조

  • Client : 사용자가 명령어를 입력해서 Docker를 제어하는 쪽, Docker Daemon과 REST API를 통해 통신
  • Docker Daemon : 컨테이너와 이미지 관리, client 가 보낸 CLI 명령 처리
  • Images : 컨테이너의 실행에 필요한 모든 요소를 포함한 템플릿, Dockerfile을 이용해 생성
  • Containers : 이미지에서 실행되는 독립된 실행 환경
  • Docker Registries : 이미지 저장소

 

Docker Compose

Docker Compose는 여러 개의 컨테이너를 하나의 설정 파일로 정의하고, 한 번에 생성·실행·중지할 수 있게 해주는 도구이다.

예를 들어 웹 애플리케이션, 데이터베이스, 캐시 서버를 함께 관리할 때 유용하다.

 

Q. Compose가 있으면 Dockerfile은 필요 없을까?

아니다. Dockerfile은 이미지를 만들 때 필요하고, Compose는 그 이미지를 포함한 여러 서비스를 실행·관리할 때 필요하다. 둘은 대체 관계가 아니라 역할이 다르다.

 

Q. 컨테이너와 가상머신의 차이점?

가상머신과 컨테이너는 모두 하나의 물리적 컴퓨터에서 독립된 실행 환경을 만드는 기술이다.  가상머신은 호스트 OS와 게스트 OS사이에 하이퍼바이저를 써서 연결함. 따라서 게스트 OS까지 사용하기 때문에 리소스 차지를 많이 한다. 컨테이너는 게스트 OS없이, 컨테이너 안의 프로그램들이 호스트 OS의 커널에 직접 의존해서 실행됨. 따라서 무거운 OS를 추가로 올리지 않아서 가벼움

 

Q. 컨테이너를 삭제하면 내부 데이터도 삭제될까?

yes. 설계도인 이미지가 남는 것과 실행된 컨테이너 내부의 데이터가 남는 것은 별개의 얘기이다. 예를 들어 mysql의 이미지를 컨테이너에서 실행한 뒤 사용자가 테이블을 만들고 데이터를 넣었다. 그 뒤 컨테이너를 삭제하면 기본적으로 해당 데이터는 삭제된다. 그렇기에 볼륨 이라는 것을 사용하는데, DB 같은 건 컨테이너 삭제해도 데이터가 남아야 하기 때문에 볼륨(volume)에 데이터를 따로 빼놓음. 볼륨은 컨테이너 바깥에 두는 데이터 저장 공간

 

Q. 함께 실행해야 하는 컨테이너 수가 많아질수록 Docker Compose의 장점이 커진다고 볼 수 있나?

그렇다. Docker Compose는 여러 개의 관련 컨테이너를 하나의 설정 파일에 정의하고, 이를 한 번에 실행·중지·재시작·관리할 수 있게 해주는 도구이다.
따라서 웹 애플리케이션, 데이터베이스, 캐시 서버처럼 함께 동작해야 하는 컨테이너가 많아질수록 각각을 개별 명령어로 관리하는 것보다 훨씬 효율적이다.
또한 포트, 환경변수, 볼륨, 네트워크 설정도 한 파일에서 함께 관리할 수 있어 환경 재현성과 협업 편의성도 높아진다.
다만 실제로 실행 가능한 컨테이너 수는 Docker Compose 자체가 아니라 시스템의 CPU, 메모리, 디스크 등 자원 한도에 의해 제한된다.

 

 

 

 

 

  • 내 컴퓨터에서 앱 개발
  • 도커로 실행 환경 정리
  • AWS의 EC2 같은 서버에 올려서 배포
  • 필요하면 RDS로 DB 분리

=> 이제 AWS로 넘어가보자!!

 

 

AWS EC2 인스턴스

  • EC2 인스턴스는 아주 쉽게 말하면 "AWS에 있는 가상의 컴퓨터 한 대"
  • 노트북에 직접 프로그램을 설치해서 돌리는 대신,
    AWS 데이터센터 안에 있는 컴퓨터를 빌려서 쓰는 느낌

 

AWS 리전 설정이 중요한 이유

1. 속도 (가장 중요)

물리적 거리가 가까울수록 데이터 전송이 빠르다

 

한국 사용자가 미국 서버에 접속 → 태평양을 왕복 → 느림
한국 사용자가 서울 서버에 접속 → 빠름 

 

 

2. 비용

리전마다 서버 사용 요금이 다르다. 미국 리전이 보통 조금 더 저렴하지만, 속도를 포기해야 함.

 

3. 법적 규정

일부 국가/산업은 데이터를 자국 내에 저장해야 하는 법적 의무가 있다. 예를 들어 한국 금융 데이터는 국내 서버에 있어야 할 수 있다.

 

4. 서비스 가용성

AWS의 새로운 기능이나 서비스가 모든 리전에 동시에 출시되지 않음. 특정 리전에만 먼저 나오는 경우가 많음.

 

 

SSH란?

SSH(Secure Shell) : 원격 컴퓨터에 안전하게 접속하는 방법

EC2 인스턴스는 AWS 데이터센터에 있는 컴퓨터인데, 그 컴퓨터를 내 노트북에서 터미널로 원격 조종할 때 SSH를 사용

 

 

SSH 트래픽 허용이 왜 필요한가?

EC2 인스턴스는 기본적으로 보안을 위해 모든 외부 접속을 차단함

그래서 "SSH로 접속하는 것만큼은 허용해줘" 라고 명시적으로 열어줘야 하는데 이게 바로 SSH 트래픽 허용!

 

 

SSH 없이 접속하는 다른 방법들

 

1. AWS Systems Manager (SSM)

AWS 콘솔(웹사이트)에서 바로 터미널을 열 수 있다.

  • SSH 불필요
  • 포트 22 안 열어도 됨
  • 오히려 더 안전해서 실무에서 많이 씀

2. EC2 Instance Connect

AWS 웹 콘솔에서 버튼 하나로 브라우저에서 바로 접속다.

  • SSH 키 없어도 됨
  • 간단한 작업에 편리

 

 

Amazon EBS = Elastic Block Store

가상 하드디스크 같은 것

쉽게 말하면:

  • EC2 = 컴퓨터
  • EBS = 그 컴퓨터의 디스크(저장공간)

예를 들어 EC2에서

  • 운영체제
  • 설치한 Docker
  • 만든 파일
  • 로그
  • 데이터

이런 걸 저장하는 공간이 바로 EBS