새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
컨테이너리스(Containerless) 정리
📌 컨테이너리스 (Containerless) 정리
📚 목차
- 개념 요약 (핵심 내용 정리)
- 실무 적용 포인트
- 코드 예제
- 주요 질문 & 인터뷰 대비
- 트러블슈팅 & 실전 노트
- 트레이드 오프 분석
- 소프트웨어 아키텍처 관점
- 이해도 체크 질문
- 추가 학습 키워드
- 비슷하거나 반대되는 개념 정리
1️⃣ 개념 요약 (핵심 내용 정리)
🔹 컨테이너리스(Containerless)란?
컨테이너리스는 “컨테이너가 없는” 것이 아니라, “개발자가 컨테이너 관리를 신경 쓰지 않아도 된다”는 개념이다.
🔹 배경 및 개념
- 스프링 부트는 컨테이너리스 웹 애플리케이션 개발을 쉽게 하기 위해 만들어졌다.
- 기존에는 서블릿 컨테이너(예: Tomcat, Jetty, Undertow 등)를 개발자가 직접 설정하고 배포해야 했다.
- 컨테이너리스는 서블릿 컨테이너를 자동 설정하고 실행할 수 있도록 지원해준다.
- 개발자는 비즈니스 로직 개발에만 집중할 수 있도록 한다.
🔹 컨테이너리스와 서버리스(Serverless)의 관계
- 서버리스(Serverless)와 유사한 개념이지만 완전히 동일하지 않다.
- 서버리스는 인프라 자체를 관리할 필요 없게 만드는 것 (예: AWS Lambda).
- 컨테이너리스는 서블릿 컨테이너 관리 부담을 없애는 것.
🔹 웹 컨테이너(Web Container)와의 관계
- 기존에는 웹 컴포넌트(서블릿)가 웹 컨테이너(예: Tomcat) 안에서 실행되었다.
- 웹 컨테이너는 서블릿의 생명주기 관리, 요청 매핑, 리소스 관리 등의 역할을 수행했다.
- 컨테이너리스는 웹 컨테이너의 관리 부담을 줄여주고 자동 설정한다.
2️⃣ 실무 적용 포인트
- 빠른 개발 환경 구성 →
spring-boot-starter-web
의존성만 추가하면 자동으로 내장 Tomcat이 실행된다. - 독립 실행형 애플리케이션(Standalone Application) → JAR 실행만으로 서버가 동작하는 구조 (
java -jar application.jar
). - WAR 배포 없이 실행 가능 → WAR 패키징 없이 JAR만으로 실행 가능하며, CI/CD가 간단해진다.
- 설정 간소화 →
application.properties
에서 최소한의 설정만으로 웹 컨테이너가 자동 실행됨. - Docker 컨테이너와 함께 사용 가능 → 컨테이너리스와 Docker는 별개 개념이지만, 필요하면 Docker 기반 배포도 가능.
3️⃣ 코드 예제
✅ 기존 Servlet Container 기반 Spring MVC
<!-- web.xml에서 서블릿 설정 필요 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
✅ 컨테이너리스 Spring Boot 방식
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4️⃣ 주요 질문 & 인터뷰 대비
📌 컨테이너리스란 무엇인가?
컨테이너리스는 서블릿 컨테이너(Tomcat, Jetty)를 개발자가 직접 관리하지 않아도 되도록 하는 방식이다.
📌 기존 Servlet Container 기반 개발과 컨테이너리스 개발 방식의 차이점?
| 구분 | 기존 방식 (Servlet Container) | 컨테이너리스 방식 |
| ————- | ——————————— | ——————— |
| 설정 | web.xml
, server.xml
등 필요 | 최소한의 설정 |
| 배포 방식 | WAR 파일 배포 | JAR 파일 배포 가능 |
| 실행 방식 | Tomcat/Jetty 설치 필요 | java -jar
실행 가능 |
| CI/CD | 컨테이너 설치 및 배포 필요 | 간단한 JAR 실행 |
5️⃣ 트러블슈팅 & 실전 노트
- Q: 기존 Tomcat 설정을 변경하려면? →
application.properties
에서server.port
,server.tomcat.max-threads
등을 조정하면 된다. - Q: 내장 Tomcat 대신 Jetty, Undertow를 사용하고 싶다면? →
spring-boot-starter-web
을 제거하고 원하는 웹 서버 의존성을 추가하면 된다. ```xml
```
6️⃣ 트레이드 오프 분석
선택지 | 장점 | 단점 |
---|---|---|
컨테이너리스 (Spring Boot 내장 Tomcat) | 설정이 간단, JAR 배포 가능, CI/CD 용이 | 세부적인 웹 컨테이너 설정이 제한적 |
기존 Servlet Container 사용 (Tomcat 등) | 다양한 설정 가능, 레거시 시스템과 호환 | 설정이 복잡하고 유지보수 부담 증가 |
7️⃣ 소프트웨어 아키텍처 관점
- 마이크로서비스 아키텍처 (MSA) → 컨테이너리스 방식은 MSA에서 개별 서비스 실행을 독립적으로 할 수 있어 유리하다.
- 배포 및 확장성 → JAR 기반 배포가 가능해 DevOps 환경에서 더 쉽게 확장할 수 있다.
- 레거시 시스템과의 통합 → 기존 WAS 환경과 통합하려면 WAR 방식도 지원해야 하는 경우가 있음.
8️⃣ 이해도 체크 질문
- 컨테이너리스와 서버리스의 차이점은?
- Spring Boot에서 내장 Tomcat을 Jetty로 변경하는 방법은?
- 컨테이너리스 방식이 CI/CD에서 가지는 장점은?
- Spring Boot가 서블릿 컨테이너를 자동 실행하는 과정은?
9️⃣ 추가 학습 키워드
- Embedded Tomcat vs External Tomcat
- Spring Boot Actuator
- Java EE vs Spring Boot (Servlet Container 차이)
🔄 비슷하거나 반대되는 개념 정리
개념 | 설명 |
---|---|
Serverless | 인프라를 직접 운영하지 않는 방식 (AWS Lambda 등) |
Containerless | 웹 컨테이너를 직접 관리하지 않는 방식 |
Embedded Servlet Container | Spring Boot 내장 Tomcat, Jetty, Undertow |
댓글남기기