Spring Boot

Servlet에서 Spring Boot까지의 발전 양상

iksadnorth 2023. 7. 12. 18:37

💬 웹 서버 구축 시, 어려움

문제점 1. Http의 복잡한 통신 규약

Http는 단순히 데이터만 주고 받을 뿐만 아니라
통신 규약을 지키기 위한 많은 헤더를 가지고 있고
자원을 요구하는 URI는 각종 정보를 포함하고 있기 때문에
직접 모든 규약에 맞게 설정하기 어렵다.

HTTP 통신을 위한 복잡한 규약을 지켜서 Request를 해석하고
Response를 클라이언트에게 
전달해야 한다는 제약이 있다.

HTTP 통신 중 주고 받는 Request, Response 예시. 다소 복잡함을 알 수 있다.

문제점 2. 동적 페이지의 필요성

동적 페이지란? 미리 만들어진 웹 페이지가 아닌
상황에 유연하게 대처하기 위해 입력된 데이터를 기반으로 새로운 웹 페이지를 만드는 HTML 페이지.


 

💬 Servlet의 탄생.

Java를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램.
웹프로그래밍에서 웹 프로그래밍에서 클라이언트의 요청을 처리하고
그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨
자바 프로그래밍 기술.

  1. 동적 페이지를 생성할 수 있다.
  2. 복잡하고 개발자에게 있어 단순 노동에 지나지 않는 통신 규약 설정을 도맡아 처리해준다.

서블릿은 다음과 같은 구조로 작동된다.

  • Client에게 요청이 들어오면 Servlet Container가 3가지를 새롭게 만든다.
    • HttpServletRequest:
      클라이언트가 보낸 요청을 파싱하여 자바 객체로 변환한다.
      [Request ⇒ Java Object]
    • HttpServletResponse:
      서블릿에서 생성한 클라이언트에게 보낼 응답을 자바 객체에서 Http 통신 규약에 맞는 텍스트로 변환한다.
      [Java Object⇒ Response]
    • Servlet :
      1회의 요청마다 새로운 쓰레드에 1개의 Servlet을 생성된다.
      [Request를 읽고 Response에 담을 내용을 생성.]
  • 이때, Servlet Container 중 하나가 Tomcat이다.


💬 Servlet의 문제점.

문제점 1. 새로운 응답마다 Servlet을 생성하기엔 마찬가지로 중복되는 코드가 많다.

  1. 모든 요청은 예를 들어 인증 과정, 로깅 과정, 보안 과정을 공통적으로 거쳐야 할 경우가 생긴다.
  2. Http 버전 업그레이드가 수행될 때마다 모든 서블릿을 유지 보수해야 새로운 변화에 대해 대처할 수 있다.

왼쪽은 각 요청마다 servlet을 생성한 경우,
오른쪽은 모든 요청을 공통된 처리를 Dispatcher Servlet에게 맡기고
나머지 처리를 각 controller에 위임한 경우.

문제점 2. 클래스 사이의 짙은 의존성.

서블릿에서는 직접 클래스의 의존성 관리를 해줘야 하기 때문에
개발자가 짊어져야 할 부분이 필요 이상으로 많아진다.
심지어 개발자의 실력 부족으로 인해 SOILD의 DIP를 지키지 않아
유지보수에 취약한 코드를 생성할 있으므로 의존성을 대신 관리해줄 필요가 생김.


 

💬 Spring의 탄생

Spring은 4가지의 강력한 특성을 가지고 있다.
  1. Spring MVC 구조:
    MVC 구조로 공통 기능을 일괄 처리할 수 있도록 
    Front Controller 패턴을 사용함.

  2. IOC(Inversion Of Control): 
    Bean Container를 이용해서 특정 객체의 주입을 자동으로 처리하게 함.

  3. AOP(Aspect-Oriented Programming):
    AOP는 횡단 관심(Cross-cutting Concern)을 분리하여
    개발자가 핵심 비즈니스 로직에 집중할 수 있도록 도와준다.
    예를 들어, [트랜잭션, 오류 처리, 보안 처리, ...] 등등이 있을 수 있다.

  4. PSA(Portable Service Abstraction):
    이식성과 유연성을 높이는 디자인 패턴으로 다양한 기술과 라이브러리들을 PSA로 추상화하여
    사용자가 필요에 따라 적합한 기술이나 라이브러리를 선택하여 사용할 수 있도록 지원한다.

Spring MVC 구조
AOP(Aspect-Oriented Programming)


💬 Spring의 문제점.

문제점 1. 애플리케이션을 실행하기 위한 복잡한 초기 설정

단순히 Spring Framework로 웹 어플리케이션을 구현하기는 어렵다.
Tomcat 설정도 해줘야 하고 기본적인 기술들의 초기 설정을 해줘야 웹 어플을 만들어 낼 수 있다.
이는 비지니스 코드에 할애해야 할 시간을 설정에 소비할 수 있기에 이를 해결해야 생산성이 떨어진다.

문제점 2. 각 기술 사이의 버전 호환 문제

각 기술들은 버전 업그레이드를 수행하면서 기존에 호환되었던 기술들과의 호환성이 깨질 수 있다.
때문에 각 버전들이 호환되는 버전을 일일이 찾아 다시 설정해야 함으로 역시나 생산성 저하를 야기한다.


 

💬 Spring Boot의 탄생

필요한 초기 설정을 미리 구비해 개발자는 원하는 기술을 선택하는 것 만으로도 설정을 완료할 수 있도록 도와줬다.

  1. Embeded Servlet Container 기능을 제공하여 별도의 웹서버 구축 필요성 감소
  2. Auto Configuration 기능을 통해 개발자가 필요한 의존성들을 자동으로 설정하여 개발 생산성 향상
  3. 다양한 스타터(dependency)를 제공하여 개발자가 필요한 라이브러리를 더 쉽게 추가하고 구성할 수 있도록 함.

'Spring Boot' 카테고리의 다른 글

Spring Boot HTTPS 적용  (0) 2023.07.28
Executable Jar  (0) 2023.07.28
application.yml 프로퍼티  (0) 2023.07.27
Spring Boot 버전 관리 원리  (0) 2023.07.27
Spring Boot 자동 설정 원리  (0) 2023.07.27