웹개발/SpringBoot

서블릿(Servlet)vs 스프링부트(SpringBoot)

bergerac 2025. 5. 18. 09:11

1. 서블릿(Servlet): 자바 웹의 시작

서블릿은 자바로 만든 웹 프로그램이다.
기본적으로 HTTP 요청을 받아서 처리하고, 응답을 보내는 역할을 한다.

서블릿 HTTP 통신 흐름

  1. 클라이언트가 HTTP 요청을 보냄
  2. 톰캣(Tomcat) 같은 웹 서버가 이를 수신
  3. HttpServletRequest 객체로 요청을 감싸 서블릿으로 전달
  4. 서블릿 클래스의 doGet() 혹은 doPost() 메서드에서 직접 요청 파라미터 처리
  5. 처리 결과를 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 통신 흐름

  1. 클라이언트의 HTTP 요청을 스프링부트가 수신
  2. 내부적으로 DispatcherServlet이 동작하며 적절한 컨트롤러 메서드 호출
  3. @RequestParam, @GetMapping 등의 애너테이션을 통해 요청 파라미터를 간편하게 처리
  4. 반환값을 자동으로 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