1. 서블릿(Servlet): 자바 웹의 시작
서블릿은 자바로 만든 웹 프로그램이다.
기본적으로 HTTP 요청을 받아서 처리하고, 응답을 보내는 역할을 한다.
서블릿 HTTP 통신 흐름
- 클라이언트가 HTTP 요청을 보냄
- 톰캣(Tomcat) 같은 웹 서버가 이를 수신
- HttpServletRequest 객체로 요청을 감싸 서블릿으로 전달
- 서블릿 클래스의 doGet() 혹은 doPost() 메서드에서 직접 요청 파라미터 처리
- 처리 결과를 HttpServletResponse 객체를 통해 응답으로 반환
즉, 모든 요청/응답 흐름을 개발자가 직접 컨트롤해야 한다.
이 말은 곧, 자유롭지만 번거롭고 실수가 잦을 수 있다는 의미다.
2. 스프링(Spring): 엔터프라이즈 웹 프레임워크
서블릿 기반 개발이 확산되면서, 더 효율적이고 구조화된 웹 애플리케이션 개발을 위한 프레임워크가 필요해졌다. 그 결과 등장한 것이 바로 **스프링 프레임워크(Spring Framework)**다.
스프링은 무엇을 해결해줬나?
- **제어의 역전(IoC)**과 **의존성 주입(DI)**을 통한 유연한 객체 관리
- AOP 기반의 공통 기능 처리(트랜잭션, 로깅 등)
- 복잡한 비즈니스 로직을 모듈화하고 분리 가능
- MVC 패턴 도입으로 역할을 명확히 분리
하지만 단점도 있었다.
- 초창기에는 설정이 대부분 XML 기반
- 개발자가 일일이 설정파일을 구성해야 했고
- 여러 의존성을 수동으로 연결해야 했음 (톰캣, JPA, DB 등)
예: applicationContext.xml, web.xml, 그리고 복잡한 Bean 설정들...
결국 스프링도 어느 정도의 생산성 한계를 갖고 있었다.
3. 스프링부트(Spring Boot): 스프링의 실용주의 진화
스프링부트는 스프링의 진입 장벽을 낮추고, 생산성을 높이기 위한 프레임워크다.
내부적으로는 스프링을 기반으로 하고 있지만, **"자동 구성"과 "간단한 실행"**이라는 철학을 앞세운다.
스프링부트의 특징
- 복잡한 XML 설정 없이 자바 코드 기반 설정(Annotation)
- @SpringBootApplication 하나로 설정 자동화
- 스프링 스타터(Starter) 로 의존성 일괄 관리
- 내장 웹서버(WAS) 제공 → 톰캣 별도 설치 불필요
- main() 메서드에서 실행 가능한 독립형 애플리케이션
- JAR 파일 하나로 서버 배포까지 가능
스프링부트 HTTP 통신 흐름
- 클라이언트의 HTTP 요청을 스프링부트가 수신
- 내부적으로 DispatcherServlet이 동작하며 적절한 컨트롤러 메서드 호출
- @RequestParam, @GetMapping 등의 애너테이션을 통해 요청 파라미터를 간편하게 처리
- 반환값을 자동으로 HTTP 응답으로 만들어서 전송
예를 들어, 사용자의 이름을 받아서 인사를 돌려주는 API는 이렇게 만들 수 있다.
@GetMapping("/hello")
public String sayHello(@RequestParam String name) {
return "안녕, " + name + "!";
}
4. 한눈에 비교: 서블릿 vs 스프링 vs 스프링부트
- 서블릿
- 저수준의 웹 처리 기술
- 모든 요청/응답을 수작업으로 처리
- 코드가 길고 복잡
- 스프링
- 구조화된 웹 개발을 지원
- 유연하고 강력하지만 설정이 복잡
- XML 기반 설정이 많았음
- 스프링부트
- 스프링을 쉽게 쓰도록 만든 실용적 도구
- 애너테이션 기반 자동 설정
- 실행과 배포가 간단
'웹개발 > SpringBoot' 카테고리의 다른 글
| Jpa Repository (0) | 2025.05.22 |
|---|---|
| ORM (Object-Relational Mapping) (4) | 2025.05.21 |
| SpringBoot 활용 (0) | 2025.05.20 |
| IoC(제어의 역전),DI(의존성 주입) (1) | 2025.05.19 |
| HTTP 통신 (0) | 2025.05.17 |