우테코 - [10분 테코톡] 🌻타미의 Servlet vs Spring

Kkd·2024년 12월 5일

코딩 영상 후기

목록 보기
21/34

movie

서블릿(Servlet)과 스프링(Spring)은 자바 기반 웹 애플리케이션 개발에 사용되는 두 가지 주요 기술입니다. 둘은 서로 보완적인 관계에 있으며, 목적과 사용 방식에서 차이가 있습니다.


1. 서블릿(Servlet)

개념

  • 서블릿은 Java EE 표준의 일부로, HTTP 요청과 응답을 처리하기 위한 자바 클래스입니다.
  • 웹 애플리케이션의 가장 기본적인 구성 요소로, 클라이언트의 요청을 받고 동적으로 응답을 생성하는 데 사용됩니다.

특징

  1. HTTP 요청/응답 처리
    • 클라이언트로부터 HTTP 요청을 받고, 적절한 응답(HTML, JSON 등)을 생성.
  2. 저수준 API
    • 요청 및 응답 처리를 위한 HttpServletRequest, HttpServletResponse와 같은 저수준 API 제공.
  3. 직접 구현 필요
    • 개발자가 요청 처리, 파라미터 추출, 응답 생성 등 모든 단계를 직접 작성해야 함.

장점

  • HTTP 요청/응답 처리의 기본 구조 제공.
  • 자바 언어와의 강한 통합.

단점

  • 반복적인 코드 작성 요구.
  • 확장성과 유지보수성이 낮음.
  • 코드 복잡도가 높아지기 쉬움.

예제 코드

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().write("Hello, Servlet!");
    }
}

2. 스프링(Spring)

개념

  • 스프링은 서블릿을 기반으로 하면서 더 높은 수준의 애플리케이션 프레임워크를 제공합니다.
  • 웹 애플리케이션뿐만 아니라 다양한 애플리케이션 개발을 지원하며, 서블릿의 반복적이고 복잡한 작업을 자동화하고 추상화합니다.

특징

  1. IoC (Inversion of Control)
    • 객체 생성과 관리를 스프링 컨테이너가 담당.
  2. AOP (Aspect-Oriented Programming)
    • 로깅, 트랜잭션 관리 같은 공통 기능을 모듈화.
  3. MVC 아키텍처 지원
    • Spring Web MVC를 통해 Model-View-Controller 패턴 지원.
  4. 다양한 모듈
    • 데이터 접근(Spring Data), 보안(Spring Security), 배치 작업(Spring Batch) 등 다양한 기능 제공.

장점

  • 개발 생산성 증가 (반복 작업 감소).
  • 유지보수성과 확장성이 뛰어남.
  • 다양한 부가 기능 제공.

단점

  • 비교적 높은 학습 곡선.
  • 서블릿보다 많은 리소스 필요.

예제 코드

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String sayHello() {
        return "Hello, Spring!";
    }
}

3. 주요 차이점 비교

항목서블릿(Servlet)스프링(Spring)
개발 수준저수준 HTTP 요청/응답 처리고수준 애플리케이션 개발 지원
API 제공HttpServlet, HttpServletRequest, HttpServletResponseSpring MVC, Spring Boot, Spring Data 등
코드 작성 방식요청과 응답 처리 로직을 직접 작성선언적 방식 (애너테이션 및 설정으로 처리)
MVC 지원직접 구현해야 함Spring Web MVC 모듈 제공
확장성제한적다양한 모듈과 외부 라이브러리 통합 지원
학습 난이도비교적 쉬움상대적으로 높음

4. 관계

  • 서블릿은 스프링의 기반 기술입니다.
    스프링은 내부적으로 서블릿을 사용하여 동작하지만, 개발자는 이를 직접 다룰 필요가 없습니다.
    스프링은 서블릿의 복잡함을 추상화하고, 더 생산적인 개발 환경을 제공합니다.

서블릿(Servlet)의 탄생 배경과 CGI의 문제, 그리고 CGI를 보완한 서블릿의 특성 및 Spring Web MVC에서의 서블릿 사용 방식을 단계별로 설명하겠습니다.


5. CGI(Common Gateway Interface)

CGI는 초기 웹 서버와 애플리케이션 간의 동적 콘텐츠 처리를 위한 인터페이스로, 서버가 클라이언트 요청을 처리하기 위해 CGI 프로그램(일반적으로 스크립트 언어로 작성)을 실행합니다.

CGI의 주요 문제점

  1. 프로세스 생성 비용

    • 요청마다 별도의 프로세스를 생성하므로, 많은 요청이 동시에 들어오면 서버의 자원이 부족해지고 성능이 저하됩니다.
  2. 스레드 미사용

    • CGI는 프로세스 기반이라 멀티스레드를 활용하지 못하며, 이는 비효율적인 메모리 및 CPU 사용으로 이어집니다.
  3. 상태 유지 어려움

    • HTTP가 무상태(stateless) 프로토콜이므로, CGI 기반으로 애플리케이션에서 상태를 유지하려면 개발자가 직접 추가 구현해야 했습니다.
  4. 복잡한 유지보수

    • 프로그래밍 언어의 제약과 낮은 재사용성으로 인해 복잡한 애플리케이션에서는 유지보수가 어렵습니다.

6. 서블릿(Servlet)의 등장과 CGI의 보완

CGI의 문제를 해결하기 위해 Java EE(당시 J2EE) 표준 기술로 서블릿이 등장했습니다. 서블릿은 자바 기반으로 웹 서버 내에서 실행되는 Java 클래스로 구현되며, CGI의 단점을 크게 보완했습니다.

서블릿의 장점

  1. 스레드 기반 처리

    • 하나의 서블릿 객체가 다수의 요청을 처리하며, 요청마다 새로운 프로세스를 생성하는 대신 스레드를 재사용합니다.
    • 성능과 자원 효율성이 CGI보다 훨씬 뛰어납니다.
  2. 상태 관리 가능

    • HttpSession을 통해 클라이언트별 상태를 쉽게 관리할 수 있습니다.
  3. 자바 기반의 안전성과 플랫폼 독립성

    • 자바 언어로 작성되므로 타입 안전성이 보장되고, JVM이 설치된 모든 환경에서 동작 가능합니다.
  4. 풍부한 API 제공

    • HttpServletRequest, HttpServletResponse 등을 통해 HTTP 요청과 응답을 쉽게 처리할 수 있습니다.
  5. 재사용성과 유지보수성

    • 객체지향 프로그래밍(OOP)의 장점을 활용해 코드를 재사용하고, 유지보수가 용이합니다.

7. Spring Web MVC에서 서블릿 사용 방식

Spring MVC의 기본 구조

Spring MVC는 서블릿을 기반으로 동작하며, DispatcherServlet이라는 프론트 컨트롤러(Front Controller) 서블릿을 활용합니다.

DispatcherServlet의 역할

  • 모든 HTTP 요청은 DispatcherServlet이 가장 먼저 받습니다.
  • 요청을 처리하기 위해 컨트롤러, 뷰 리졸버(View Resolver), 모델(Model)과 협력합니다.

Spring MVC에서 서블릿을 사용하는 단계

  1. 서블릿 등록
    Spring Boot를 사용하는 경우, @SpringBootApplication이 자동으로 DispatcherServlet을 등록합니다.

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
  2. DispatcherServlet이 요청을 수신
    웹 서버(Tomcat 등)는 모든 요청을 DispatcherServlet에 전달합니다.

  3. HandlerMapping에 따라 컨트롤러 매핑
    DispatcherServlet은 HandlerMapping을 통해 적절한 컨트롤러를 찾습니다.

  4. 컨트롤러 실행
    컨트롤러는 요청을 처리하고, 결과 데이터를 반환합니다.

    @RestController
    @RequestMapping("/example")
    public class ExampleController {
        @GetMapping
        public String example() {
            return "Hello, Spring MVC!";
        }
    }
  5. 응답 생성

    • 데이터만 반환하는 경우: JSON으로 변환 후 클라이언트에게 응답.
    • 뷰를 반환하는 경우: View Resolver가 JSP 등 뷰를 생성.

7. 요약: 서블릿과 Spring MVC의 관계

  • CGI: 프로세스 기반으로 비효율적이고, 상태 유지가 어려운 초기 기술.

  • Servlet: CGI의 단점을 극복한 Java 기반의 요청 처리 기술. 스레드 기반으로 동작하며, 자원 사용이 효율적.

  • Spring Web MVC: 서블릿의 DispatcherServlet을 활용해 고수준의 MVC 패턴을 구현. 서블릿의 기능을 추상화하여 개발자가 비즈니스 로직에 집중할 수 있도록 지원.

  • Servlet은 웹 애플리케이션 개발의 기초적인 기술로, 간단한 요청/응답 처리가 필요한 경우 유용합니다.

  • 스프링은 서블릿의 한계를 극복하고, 확장성과 생산성을 높이는 고수준 프레임워크로, 복잡한 애플리케이션 개발에 적합합니다.

따라서, 서블릿은 Spring MVC의 기반 기술로 사용되지만, Spring MVC를 통해 서블릿의 복잡한 작업은 대부분 자동화됩니다.

추가 학습 자료

profile
🌱

0개의 댓글