스프링부트 동작 원리 – 내장 톰캣과 HTTP 통신 개념 잡기
이번 글에서는 스프링부트가 어떻게 동작하는지, 그리고 내장 톰캣(Tomcat)과 HTTP 통신의 원리에 대해 쉽게 정리해보겠습니다.
✅ 스프링부트는 내장 톰캣을 가진다
"별도로 톰캣을 설치할 필요 없이, 스프링부트 실행만 하면 자동으로 톰캣이 동작한다!"
📌 톰캣(Tomcat)이란?
- 자바 웹 애플리케이션을 실행할 수 있는 웹 서버
- 서블릿(Servlet) 기반의 요청(Request)과 응답(Response)을 처리
- 스프링부트는 톰캣을 내장하고 있어, 별도 설치 없이 실행 가능
📌 "스프링부트는 톰캣을 내장하고 있어, 단순히 실행만 하면 웹 애플리케이션이 바로 동작한다!"
✅ 톰캣과 소켓(Socket) 개념
"서로 다른 시스템이 네트워크를 통해 데이터를 주고받으려면, 운영체제가 제공하는 소켓(Socket)을 사용해야 한다!"
🔹 소켓이란?
- 네트워크에서 데이터를 주고받는 창구 역할
- 통신을 위해 IP 주소 + 포트번호가 필요
- 소켓을 이용하면 두 개 이상의 시스템이 데이터를 주고받을 수 있음
📌 "소켓을 통해 서로 다른 장치 간의 통신이 가능하다!"
🔹 소켓 통신의 동작 원리
1️⃣ A → B로 메시지를 보내려면?
- 운영체제가 제공하는 소켓(Socket)을 오픈해야 함
- 포트 번호를 지정하여 연결을 수립
- 예: 5000번 포트를 사용해 연결
2️⃣ C가 추가로 B와 통신하려면?
- 새로운 포트(5001번)를 사용하여 연결
- A(5001번)과 C(5002번) 두 개의 연결이 동시에 유지됨
3️⃣ 새로운 요청이 올 때마다 새로운 소켓 & 쓰레드 생성
- A와 B는 5001번 포트에서 통신
- C와 B는 5002번 포트에서 통신
📌 "소켓은 포트번호를 기반으로 네트워크 통신을 가능하게 한다!"
✅ 쓰레드(Thread)와 성능 문제
"새로운 연결이 발생할 때마다 새로운 쓰레드를 생성하여 동작한다!"
🔹 쓰레드란?
- 하나의 프로그램(프로세스) 안에서 동시에 여러 작업을 수행할 수 있도록 함
- CPU가 시간을 쪼개서 여러 작업을 동시에 실행하는 것처럼 보이게 함
📌 "쓰레드를 사용하면 동시에 여러 사용자를 처리할 수 있지만, 너무 많아지면 부하가 생길 수 있다!"
✅ HTTP 통신 – 웹이 동작하는 방식
"HTTP는 연결을 유지하지 않는(stateless) 방식으로, 요청이 끝나면 연결을 끊는다!"
📌 HTTP의 특징
✅ Stateless(무상태성) – 요청(Request)과 응답(Response)이 끝나면 연결 종료
✅ 문서 전송 중심 – 원래 목적은 HTML 문서 전송
✅ 속도가 빠름 – 불필요한 연결을 유지하지 않음
📌 "HTTP는 요청이 끝나면 연결을 끊어버리는 방식이라 서버 부하가 적다!"
✅ HTTP의 탄생 배경 – CERN 연구소와 팀 버너스리
"HTTP는 원래 문서를 효율적으로 공유하기 위해 만들어졌다!"
🔹 문제 상황
- CERN 연구소에는 전 세계의 과학자들이 모여 연구
- 논문을 작성하려면 관련 논문을 모두 검토해야 함
- 각자의 컴퓨터에 저장된 논문을 직접 찾아가야 했음 (비효율적)
🔹 해결 방법
- 팀 버너스리(Tim Berners-Lee) 가 각 컴퓨터를 하나의 서버에 연결
- 모든 논문을 중앙 서버에 저장 & 검색 가능하도록 만듦
- 필요한 논문만 요청(HTTP 요청)해서 가져오도록 설계
📌 "HTTP는 문서를 빠르게 공유하기 위한 목적으로 개발되었다!"
✅ HTTP와 블록체인 – 탈중앙화 흐름
"HTTP 창시자 팀 버너스리는 현재 중앙집중화를 막고, 데이터를 분산화하는 연구를 진행 중!"
📌 블록체인과 HTTP의 공통점 ✅ 분산화 (Decentralization) – 특정 기관이 모든 데이터를 통제하지 않음
✅ 데이터의 투명성 – 누구나 데이터에 접근 가능
✅ 네트워크를 통한 연결 – 중앙 서버 없이 데이터 공유
📌 "HTTP의 창시자는 데이터를 중앙에서 통제하지 않고, 탈중앙화된 웹을 만들려고 한다!"
🔥 핵심 정리
| 개념 | 설명 |
| 스프링부트 | 내장 톰캣을 포함하고 있어 바로 실행 가능 |
| 톰캣(Tomcat) | 자바 웹 애플리케이션을 실행하는 웹 서버 |
| 소켓(Socket) | 네트워크에서 데이터를 주고받는 창구 |
| 쓰레드(Thread) | 새로운 연결마다 생성되어 독립적인 작업 수행 |
| HTTP | 연결을 유지하지 않는 (stateless) 방식의 통신 |
| 팀 버너스리 | HTTP를 창시하여 문서를 공유하는 시스템을 개발 |
| 탈중앙화 | HTTP 창시자가 현재 블록체인과 유사한 방식으로 연구 진행 중 |
📢 마무리
스프링부트는 내장 톰캣을 활용하여 웹 애플리케이션을 쉽게 실행할 수 있도록 지원합니다.
톰캣은 소켓과 쓰레드를 활용해 여러 사용자의 요청을 처리하며,
HTTP는 연결을 유지하지 않고 요청/응답 후 끊어버리는(stateless) 방식을 사용합니다.
이제 HTTP의 원리 HTTP 요청 & 응답을 처리하는 방식!
https://getinthere.tistory.com/9
스프링부트 with JPA 1강 - 스프링이란!
1. 스프링이란? 스프링은 프레임워크이다. 스프링은 오픈소스이다. 스프링은 IoC 컨테이너를 가진다. 스프링은 DI 를 지원한다. 스프링은 엄청나게 많은 필터를 가지고 있다. 스프링은 엄청나게
getinthere.tistory.com
'스프링(Spring) 및 자바(JAVA)' 카테고리의 다른 글
| 스프링 부트 개념 정리 - 이론10 (0) | 2025.03.11 |
|---|---|
| 스프링 부트 개념 정리 - 이론09 (0) | 2025.03.09 |
| 스프링 부트 개념 정리 - 이론07 (0) | 2025.03.08 |
| 스프링 부트 개념 정리 - 이론06 (0) | 2025.03.08 |
| 스프링 부트 개념 정리 - 이론05 (0) | 2025.03.08 |