| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- SEQUENCE
- OOP
- string
- 커뮤니티서버
- 전전긍긍
- 냄새라도
- 이벤트핸들러등록
- 디스크i/o
- 사면초가
- JDBC
- TDD
- 문제선택근거
- JPA
- Ajax
- index
- 설정세팅
- 로그백
- DDD
- MVC요청플로우
- MVC
- Transaction
- SpringLegacy
- 공통기술
- 이벤트핸들러this
- model
- 공통규약
- 단위테스트
- 클린아키텍처
- AOP
- springsecurity
- Today
- Total
개발이군고구마
[요청응답 A-Z] 3. 서버 Boot 본문
1.정보가 네트워크로 전달
2. 네트워크에서 서버의 네트워크로 (Netowrk -> AWS)
3. 서버 Bootstrapping (Tomcat Spring Container)
4. 서버 Runtime 환경 (handler)
1. Tomcat의 구동과 Servlet의 실행
✅ 개념 정리
- ✨ Tomcat : 제품명. Java J2EE 규격을 준수하는 application을 실행하기 위한 플랫폼을 제공 (=구현체)
- Java2EE : 웹 어플리케이션 개발을 위한 표준 기술 사양 (Servlet이라는 표준을 어떻게 따라야할 것인지 인터페이스(=호환규칙)로 정리해놓음)
- Servlet :웹 요청을 처리하고 동적인 웹 페이지를 생성하는 서버 측 컴포넌트 (=작은모듈)
Servlet 사용시 interface 호환규칙 : doService()
🎃 발전방향
- 요청마다 servlet 클래스를 매번 생성 -> 번거로움
- 요청을 하나로 모을 수는 없을까?
2. Servlet의 발전 - Dispatcher Servlet의 등장
✅ 클라이언트의 모든 요청은 DispatcherServlet에서 관리한다.

3. EC2 움직임 시작
✅ JVM의 동작과정
ㄴ EC2에 설치된 OS가 JVM 프로세스를 띄우고, jar 또는 war 파일을 읽으며 class가 로더에 적재된다
✅ 중요 사항
- ClassLoader는 내부에서 클래스 파일을 로드하고 초기화 하는 역할
- .class 바이트 코드로 컴파일링 된 클래스 파일은 클래스 로더의 meta space에 적재됨
- JVM 메모리의 Class 를 말하는 것 (Tomcat이 처음 구동될 때 업로드 됨)
- (참고) Heap - 필드와 인스턴스 변수(new Instance) / Stack - Thread 즉, 지역변수와 프로그램 카운트
- TCP/IP 네트워크 통신을 수행하기 위해 소켓 설정을 함 (연결)
- 멀티 스레드
- 자바코드에서 cpu=thread 즉, 프로그램을 실행하는 가장 작은 단위
- 1개의 스레드만 작동할 땐, os에 그 다음 요청이 대기하고, socket 연결이 완료가 된 후에 backlog 요청을 꺼내 그 다음 스레드로 할당하던 방식
- (framework) server thread / worker thread 를 분리하여 연결만 처리하고 그 다음 요청에 스레드 할당이 가능
4-1. Spring Boot
ㄴ Application.run
ㄴ JVM 프로세스 (내장 톰캣)


1) 서버 동작 방식
Spring Boot: 내가 바로 서버! 내장 서버를 품은 방식 🚗
스프링 부트는 이런 번거로움을 해결하기 위해 등장. 가장 큰 차이점은 톰캣 같은 WAS가 애플리케이션 안에 내장되어 있다는 것.
- EC2에 Java 설치: EC2 인스턴스에는 오직 Java만 설치되어 있으면 충분. 별도의 톰캣을 설치하거나 설정할 필요가 없음.
- JAR 파일 배포: 프로젝트를 .jar (Java Archive) 파일로 빌드해서 EC2 서버에 복사. 이 .jar 파일 안에는 내장 톰캣과 프로젝트 코드가 모두 들어있음.
- 애플리케이션이 주도하는 시작:
- EC2 터미널에서 java -jar my-app.jar 라는 간단한 명령어로 애플리케이션을 직접 실행.
- 애플리케이션의 main 메소드가 실행되면서, 내장된 톰캣을 스스로 깨워 실행시킴.
- 동시에 스프링 부트의 AutoConfiguration(자동 설정) 기능이 동작하여 클래스패스를 스캔하고 필요한 설정들을 알아서 처리. 예를 들어, spring-boot-starter-web 의존성이 있으면 "아, 이건 웹 애플리케이션이구나!" 하고 톰캣을 띄우고 디스패처 서블릿을 등록.
- 요청 대기: 내장 톰캣이 뜨고 스프링 컨테이너 설정이 완료되면, 애플리케이션은 곧바로 외부 요청을 받을 수 있는 상태
이 방식은 애플리케이션이 직접 자신의 생명주기를 관리하며, 외부에 거의 의존하지 않고 독립적으로 실행.
Spring Boot Application (자체 실행)
└─ Single ApplicationContext
├─ Embedded Tomcat (빈으로 관리)
├─ @Service 빈들
├─ @Repository 빈들
├─ @Controller 빈들
├─ @RestController 빈들
├─ DataSource (Auto-configured)
├─ TransactionManager (Auto-configured)
└─ 모든 빈들이 하나의 컨텍스트에
4-2. Spring Framework
ㄴ web.xml 파싱
ㄴ JVM Tomcat 프로세스 (서버에 이미 Tomcat 설치됨)


1) 서버 동작 방식
전통적인 Spring Framework: 집주인(Web Server)에게 세 들어가는 방식 🏠
전통적인 스프링 프레임워크(이하 '레거시 스프링')는 혼자서 웹 요청을 직접 받을 수 없음
그래서 톰캣(Tomcat)이나 제티(Jetty) 같은 웹 애플리케이션 서버(WAS)의 도움이 반드시 필요.
- EC2에 웹 서버(WAS) 설치 및 설정: 먼저 EC2 인스턴스에 톰캣 같은 WAS를 직접 설치하고, 포트 설정이나 성능 튜닝 같은 환경 설정을 마쳐야.
- WAR 파일 배포: 개발한 스프링 프로젝트를 .war (Web Application Archive) 파일로 빌드해서 이 톰캣의 특정 디렉토리(webapps)에 복사해 넣음.
- 웹 서버(WAS)가 주도하는 시작:
- 톰캣을 실행하면, 톰캣이 webapps 디렉토리에 있는 .war 파일을 발견하고 압축을 품
- 톰캣은 프로젝트 내의 web.xml 파일 또는 ServletContainerInitializer 설정을 읽어들여 스프링을 깨우기 시작
- 스프링은 ApplicationContext라는 핵심 컨테이너를 생성하기 위해 XML 파일(application-context.xml, dispatcher-servlet.xml 등)이나 자바 설정(@Configuration)을 읽어와 필요한 객체(Bean)들을 만들고 서로 의존성을 주입
- 요청 대기: 이 모든 과정이 끝나야 비로소 톰캣은 외부의 요청을 받아서 해당 스프링 애플리케이션으로 전달할 준비가 완료
이 방식의 핵심은 애플리케이션의 생명주기를 톰캣과 같은 외부 컨테이너가 관리.
집주인인 톰캣의 규칙에 맞춰야
Tomcat 서버 (독립 실행)
└─ Web Application
├─ Root ApplicationContext (부모)
│ ├─ @Service 빈들
│ ├─ @Repository 빈들
│ ├─ DataSource
│ ├─ TransactionManager
│ └─ 기타 인프라 빈들
│
└─ Web ApplicationContext (자식)
├─ @Controller 빈들
├─ DispatcherServlet
├─ ViewResolver
├─ HandlerMapping
└─ 기타 웹 관련 빈들
4. 비고
CSR과 같이 API - DATA 응답이 아닌, JSP로 데이터를 화면에 그려서 HTML을 응답 값으로 주는 프로세스에선
JSP를 응답으로 받을 때에도 Servlet이 실행됨 (즉, doService() 가 실행되는 방식으로 HTML 파일을 가져옴)
'SERVER > CS' 카테고리의 다른 글
| OS와 CPU의 작동 원리, 그리고 CPU 100% 문제 해결 (0) | 2026.03.27 |
|---|---|
| [요청응답 A-Z] 4. 서버 Runtime 환경 (5) | 2025.07.25 |
| [요청응답 A-Z] 2. 네트워크에서 서버의 네트워크로 (0) | 2025.07.24 |
| [요청응답 A-Z] 1.정보가 네트워크로 전달 (5) | 2025.07.24 |
| [CS] cache 구조와 사용 방법 (0) | 2024.11.24 |
