관리 메뉴

CASSIE'S BLOG

97강 Spring Boot 기본 wrap-up 본문

PROGRAMMING/슈퍼코딩 강의 정리

97강 Spring Boot 기본 wrap-up

ITSCASSIE1107 2024. 3. 4. 15:52

잘 정리해주신 자료:

https://zzang9ha.tistory.com/441

 

Spring DispatcherServlet(디스패처서블릿) 개념부터 동작 과정까지

🔗 DispatcherServlet 안녕하세요, 이번 포스팅에서는 Spring에서 HTTP 요청 및 응답과 관련하여 가장 핵심 기술인 DispatcherServlet에 대해 살펴보고자 합니다. 평소에 개념에 대해서는 어느 정도 알고 있

zzang9ha.tistory.com

 

 

 

 

 

🔗 DispatcherServlet 내부 코드
DispatcherServlet의 내부 코드를 살펴보면 Spring 팀에서 개발한 여러 디자인 패턴이 존재합니다.

아래 패턴들은 전부 코드에서 나오는 개념들이니 간략히 살펴보시고 해당 포스팅을 보시면 이해하시기에 보다 수월할 듯 합니다. 😅

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Q. 서블릿컨테이너는 디스패치 서블릿 보다 좀 더 큰개념이라고 생각하면 되는거야?

네, 맞습니다. 서블릿 컨테이너는 디스패치 서블릿을 포함하는 더 큰 개념입니다. 서블릿 컨테이너는 서블릿의 실행 및 관리뿐만 아니라 웹 애플리케이션의 전체적인 실행 환경을 제공합니다. 따라서 디스패치 서블릿은 서블릿 컨테이너 안에서의 일부 기능 중 하나일 뿐입니다.


 

 서브릿 컨테이너(Servlet Container)와 디스패치 서블릿(Dispatch Servlet)은 웹 애플리케이션의 다른 측면을 담당하는 것으로 서로 다릅니다.
*  서브릿 컨테이너(Servlet Container):
    * 서블릿 컨테이너는 웹 애플리케이션 서버 또는 웹 컨테이너라고도 불립니다.
    * 서블릿 컨테이너는 서블릿의 생명주기를 관리하고, 클라이언트 요청에 따라 서블릿을 실행합니다.
    * 또한, HTTP 요청에 대한 처리 및 HTTP 응답을 생성하는 등의 웹 애플리케이션의 실행 환경을 제공합니다.
    * 대표적으로 Apache Tomcat, Jetty, 등이 있습니다.
*  디스패치 서블릿(Dispatch Servlet):
    * 디스패치 서블릿은 웹 애플리케이션의 MVC (Model-View-Controller) 아키텍처에서 컨트롤러 역할을 합니다.
    * 클라이언트의 요청을 받고, 이를 적절한 서비스 또는 기능으로 전달합니다.
    * 주로 요청을 받아서 해당 요청에 대해 적절한 서블릿, JSP, 또는 다른 컴포넌트로 리디렉션하거나 포워딩하는 역할을 합니다.
    * Spring Framework와 같은 프레임워크에서는 디스패치 서블릿을 이용하여 요청을 적절한 컨트롤러로 라우팅하는 데 사용됩니다.
요약하자면, 서블릿 컨테이너는 서블릿을 실행하고 관리하는 환경을 제공하며, 디스패치 서블릿은 웹 애플리케이션의 요청을 적절한 컨트롤러로 라우팅하는 역할을 합니다.

 

 

디스패치 서블릿에서 중요한 점이 Contoller 비즈니스 로직 위임을 한다. 이게 중요한 개념이다. 

 

 

 

 

  • AOP (Aspect-Oriented Programming):
  • PSA (Portable Service Abstraction):
  • IoC/DI (Inversion of Control / Dependency Injection):

AOP (Aspect-Oriented Programming):
    * AOP는 "관점 지향 프로그래밍"을 의미합니다. 이는 프로그램을 개발할 때, 핵심 로직과는 별도로 "관심사(Aspect)"를 분리하여 개발하는 방법론입니다.
    * 예를 들어, 로그 기록, 트랜잭션 관리, 보안 등과 같은 공통 관심사를 별도로 모듈화하여 코드 중복을 줄이고 유지보수성을 향상시킵니다.
    * AOP를 사용하면 이러한 관심사를 "Aspect"라는 모듈로 정의하고, 이를 필요한 곳에 적용시켜 핵심 로직과 분리할 수 있습니다.

 


PSA (Portable Service Abstraction):
    * PSA는 "포터블 서비스 추상화"를 의미합니다. 이는 서비스에 대한 추상화 레이어를 제공하여 애플리케이션 코드가 특정 기술에 종속되지 않도록 돕는 디자인 패턴입니다.
    * 예를 들어, 데이터베이스 액세스, 메시징, 웹 클라이언트와 같은 서비스에 대한 다양한 구현체가 있을 때, PSA는 이를 추상화하여 특정 기술에 종속되지 않고 유연하게 사용할 수 있게 합니다.
    * 스프링은 JDBC, JMS, REST 등 다양한 기술을 추상화하여 제공하므로, PSA를 통해 애플리케이션 코드는 스프링의 추상화 인터페이스를 사용하여 서비스에 접근할 수 있습니다.


 IoC/DI (Inversion of Control / Dependency Injection):
    * IoC는 "제어의 역전"을, DI는 "의존성 주입"을 의미합니다. 이는 객체 간의 의존성을 관리하는 디자인 패턴입니다.
    * IoC는 프로그램의 제어 흐름을 개발자가 아닌 프레임워크나 컨테이너에게 위임하는 것을 말합니다. 이를 통해 객체의 생명주기와 의존성 관리를 프레임워크가 담당합니다.
    * DI는 객체가 직접 필요한 의존성을 생성하는 것이 아니라 외부에서 주입받는 것을 말합니다. 이는 객체 간의 결합도를 낮추고 유연성을 높여줍니다.
    * 스프링의 IoC 컨테이너는 객체의 생성, 관리, 의존성 주입을 담당하여 IoC/DI 패턴을 구현합니다.

 

 

요약하자면, AOP 관심사를 모듈화하여 코드 중복을 줄이는 방법론, PSA 서비스에 대한 추상화를 제공하여 유연성을 확보하는 패턴, IoC/DI 객체 간의 의존성을 역전시키고 주입하는 방법론입니다. 이들은 스프링 프레임워크의 핵심 원리로 작동하여 유연하고 확장 가능한 애플리케이션을 구축하는 도움을 줍니다.

 

JMS는 Java Message Service의 약자로, 자바 언어를 사용하여 애플리케이션 간에 메시지를 교환하는데 사용되는 API입니다. 이는 분산 시스템에서 각각의 애플리케이션이 서로 통신하고 데이터를 교환할 수 있게 해줍니다. JMS는 메시지를 생성하고 전송하는 프로세스, 그리고 메시지를 수신하고 처리하는 프로세스 사이의 표준화된 통신 메커니즘을 제공합니다. 이를 통해 다양한 시스템 간에 효율적으로 데이터를 전송하고 통신할 수 있게 됩니다.

 

 

BTS 콘서트 티켓 예매한다고 하면 꼭 서버를 늘리는게 아니라 스레드 풀을 늘리는 방법도 있다. 보통 스레드풀은 300~500개 정도가 있다고함.

 

 

 

 

 

 

 

 

 

 

반응형