본문 바로가기
2025 Dev Log/Tech Notes

[#5][CD/CI] 배포의 기본 개념 [공통+JAVA 기준]

by Dev.후크리 2026. 1. 13.

1. 배포의 본질

개념 정리

배포란, 
내가 만든 프로그램을 서버에서 실제로 실행 가능하게 만드는 행위

 

핵심 3가지

1. 실행 파일이 있다.

2. 실행 파일을 서버에 올린다.

3. 서버에서 실행 파일을 실행한다.

 

@ 글쓴이가 이해한 포인트

자동 배포, CI/CD 없어도 배포는 가능하다.

본질은 파일을 서버에 올려 실해하는 것이다.

자동 배포는 필수적인 것이 아닌 배포 이후 편의와 안전성의 문제 해결 방식일 뿐이다.


2. JAR 파일이란,

개념정리

jar은 단순한 코드 파일이 아니다.

내부에는 아래와 같이 구성되어 있기에  java -jar app.jar  한 줄로 실행이 가능하다

컴파일된 .class 파일들
내 코드 전체
의존 라이브러리
설정 파일
Spring Boot 실행 로더

 

@글쓴이가 이해한 포인트

 

인텔리제이에서 작성한 프로젝트가 그대로 들어가는 게 아니다

컴파일된 결과물 + 실행에 필요한 것들이 묶여 있다.

서버는 소스가 아니라 결과물만 필요하다.

빌드와 실행에 대한 구분을 명확히 해야한다.

 


3. JAR 과 WAR 

 

@글쓴이가 이해한 포인트

WAR을 처음 들어 생소했지만, 그건 최신 구조에서 사용하지 않기 때문이다.

내장 톰켓이 가능한 스프링부트와 같은 프레임워크가 존재하기에 WAR은 사용하지 않는다.

 


4. JVM과 Docker 의 관계

 

@글쓴이가 이해한 포인트

이식성을 해결한 게 JVM인데 그럼 도커랑 같은 역할 아닌가?라고 궁금했다.

하지만 둘은 완전히 같은 게 아닌 도커가 JVM을 보완하는 개념이었다.

도커는 컴파일을 하는 게 아니라 실행 환경 고정이 목적이었기 때문이다.


결국 서버는 하나에서만 돈다.

 

이런 궁금증이 생겼었다.

어차피 결국에 내 서버에서만 돌아가면 되는 거 아닌가?

여러 클라이언트는 결국 웹 라우팅 혹은 호스팅을 통해서 내 서버와 통신을 하는 건데, 데이터 통신을 하고 내 서버에서 그 데이터로 로직을 돌린다. 결과적으로 다시 응답하는 것도 데이터다. 왜 도커나 JVM이나 이식성을 이야기하고, 왜 도커의 실행 환경 고정이 필요하지? 

로직이 돌아가는 건 내 서버 하나인데?

 

이런 관점에서 생각했는데, 서버는 더 많은 관계성이 있었다.

 

  • OS
  • JVM
  • 네이티브 라이브러리
  • 포트, 권한
  • 시간대, 로케일
  • 파일 시스템
  • 메모리 제한
  • 네트워크 규칙

이와 같은 실행 환경들은 서버가 요청을 처리할 때 필요한데, 이건 로직과 별개다.

그래서 결론은 내 서버는 하나의 인스턴스에서만 돌고 있고, 그렇기에 이런 배포 설정에 큰 영향을 받지 않은 것이다.

실제 도커와 같은 실행 환경과 배포 인프라를 구축하는 이유는 확장성에 대한 예비이다.

서버 한 대로 버티기 어려운 트래픽이 몰린다면? 그럼 서버를 하나 더 만들어야 한다.

그럼 거기부터 효율성에 대한 문제가 생긴다. 단순히 같은 서버를 여러 인스턴스에서 돌리면 되는가?

그럼 URL 캐치는 어떻게 할까? 단순 병렬이면 문제가 없을까? 컴퓨터 구조 부분에서 공부한 CPU의 병렬처리만 해도 인터럽트 관련 문제를 처리하기 위해 다양한 방식이 존재한다.

이런 문제들을 해결하기 위해 여러 과정을 거쳐 현대에 온 방식이 도커를 활용한 실행 환경 고정, 도커에 실행 환경을 설정해 두는 것이다.

 

마지막으로 배포와 인프라 관련 내용을 정리한다.