스프링과 서블릿

송범·2025년 1월 14일

🔎 스프링 프레임워크의 특징과 서블릿과의 공통점


📌 1. 스프링 프레임워크 요청 처리

  • DispatcherServlet:
    • 스프링 프레임워크에서는 모든 요청이 DispatcherServlet으로 전달됩니다.
    • DispatcherServletHttpServlet을 상속받아 동작하며, Front Controller 역할을 수행합니다.
    • 요청(Request)와 응답(Response)을 주입받아 처리합니다.

📌 2. 스프링의 객체 관리

  • 스프링의 역할:

    • 자원 관리객체 라이프사이클(생성, 소멸)을 스프링 컨테이너가 대신 수행합니다.
    • 개발자가 직접 객체를 생성하거나 소멸시킬 필요가 없습니다.
  • 객체 생성 금지:

    • 스프링에서는 개발자가 new 키워드를 사용하여 객체를 생성하지 않습니다.
    • 대신, 의존성 주입(Dependency Injection, DI)을 통해 필요한 객체를 스프링 컨테이너에서 받아옵니다.

📌 3. 싱글톤 패턴과 공통점

싱글톤 패턴이란?

  • 정의:
    • 객체를 애플리케이션에서 단 한 번만 생성하고, 그 객체를 공유하여 재사용하는 디자인 패턴.
  • 장점:
    • 메모리 절약.
    • 객체 관리 용이.
    • 동일한 상태를 유지하는 데 적합.

서블릿과 스프링의 공통점

  • 싱글톤 패턴 기반:
    • 서블릿과 스프링 모두 기본적으로 싱글톤 패턴으로 동작.
    • 요청마다 새로운 객체를 생성하지 않고, 생성된 객체를 재사용.

  • 스프링 프레임워크:

    • 모든 요청은 DispatcherServlet이 처리.
    • 객체 생성과 소멸은 스프링 컨테이너가 담당.
    • 개발자는 직접 new 키워드를 사용하지 않으며, 의존성 주입(DI)을 통해 객체를 주입받음.
  • 공통점:

    • 서블릿과 스프링 모두 싱글톤 패턴으로 작동하여 메모리를 효율적으로 사용.

🔎 스프링과 서블릿의 차이점


📌 1. 초기화 방식의 차이

서블릿 (Servlet)

  • 게으른 초기화 (Lazy Initialization)
    • 요청이 들어올 때 Servlet 객체를 생성합니다.
    • 필요할 때 객체를 생성하여 메모리에 로드하는 방식.

스프링 (Spring)

  • 이른 초기화 (Eager Initialization)
    • 애플리케이션 시작 시 ApplicationContext를 통해 빈(Bean)을 미리 생성하고 초기화합니다.
    • 빈을 메모리에 미리 로드하여 요청 시 빠르게 사용할 수 있습니다.

BeanFactory

ApplicationContext - 이른 초기화

항목서블릿스프링
초기화 시점요청 시 (Lazy Initialization)애플리케이션 시작 시 (Eager Initialization)
메모리 사용 방식필요할 때 객체 생성객체를 미리 생성 및 메모리에 로드

📌 2. 요청/응답 의존성의 차이

서블릿 (Servlet)

  • HttpServletRequestHttpServletResponse에 강하게 의존
    • 요청(Request)과 응답(Response)을 처리하기 위해 직접적으로 사용.
    • 서블릿은 요청-응답 주기에 밀접하게 연결.

스프링 (Spring)

  • 의존성 없음
    • 요청이나 응답 객체 없이도 동작 가능.
    • @RequestParam, @RequestBody, @PathVariable 등 어노테이션을 통해 요청 데이터를 간접적으로 전달받음.

차이점 요약

항목서블릿스프링
요청/응답 의존성HttpServletRequest, HttpServletResponse 필수요청/응답 객체 없이도 동작 가능
데이터 전달 방식요청/응답 객체를 통해 직접 전달어노테이션(@RequestParam 등)으로 추상화

📌 3. 개발 생산성과 유지보수성의 차이

서블릿 (Servlet)

  • 요청 및 응답 처리를 직접 작성해야 함.
  • 상태 관리, 데이터 파싱, 비즈니스 로직 분리가 어려워 코드가 복잡해질 수 있음.

스프링 (Spring)

  • DI(의존성 주입)와 AOP(관점 지향 프로그래밍)를 통해 비즈니스 로직과 요청 처리를 분리.
  • @Controller, @RestController 등의 어노테이션 기반 개발로 간결한 요청 처리 가능.

Dao -> Data transfer object에서 mybatis를 사용하여 데이터베이스에 접근하는 클래스이다.
@Autowired
private SqlSessionTemplate sqlSessionTemplate; -> mybatis 사용

profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글