일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 암홀트롭
- 비슬론지퍼
- 와끼
- AATCC
- 영어시간읽기
- 비리짐
- 헤이큐
- 미국영어연음
- 고급영어단어
- 웹API
- 핸드캐리쿠리어차이점
- 요척합의
- 클린코드
- 엑셀필터복사붙여넣기
- MERN스택
- 자켓실측
- 40HQ컨테이너
- 지연환가료
- 미니마카
- 40HQ컨테이너40GP컨테이너차이
- 엑셀드래그단축키
- 필터링후복사붙여넣기
- WHATTIMEOFTHEDAY
- TACKING
- 나일론지퍼
- Armhole Drop
- 우레탄지퍼
- 봉제용어
- 슈퍼코딩
- 엑셀자동서식
- Today
- Total
CASSIE'S BLOG
97강 Spring Boot 기본 wrap-up 본문
잘 정리해주신 자료:
https://zzang9ha.tistory.com/441
🔗 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개 정도가 있다고함.
'PROGRAMMING > 슈퍼코딩 강의 정리' 카테고리의 다른 글
99-1강 스프링 부트 롬복과 MapStruct 사용하기 (0) | 2024.03.04 |
---|---|
98강 Big picture (부제: 스프링 부트 좀 더 사용하기) (0) | 2024.03.04 |
96-3강 스프링 부트 실전 적용하기 v1 (CRUD만들기) (0) | 2024.03.02 |
96-2강 스프링 부트 실전 적용하기 v1 (CRUD만들기) - 디버깅파트 (0) | 2024.03.02 |
96-2강 스프링 부트 실전 적용하기 v1 (CRUD만들기) (0) | 2024.02.29 |