Spring Framework(182)
-
Mixin 디자인 패턴
보호되어 있는 글입니다.
2023.12.10 -
Thread Pool
🚀 Apache Tomcat 스레드 풀(Thread Pool) 정리Apache Tomcat의 스레드 풀(Thread Pool) 은 동시에 여러 클라이언트 Http Request를 처리할 수 있도록 도와주는 중요한 메커니즘입니다.이를 통해 시스템 자원을 절약하고 성능을 최적화할 수 있습니다.1️⃣ 스레드 풀의 개념🖥️ 스레드 풀(Thread Pool) 이란?일정 수의 스레드를 미리 생성하여 요청이 발생하면 즉시 할당요청 처리 후 스레드를 반환하여 재사용새로운 스레드를 매번 생성하는 오버헤드를 줄이고 성능 최적화🛠️ 동작 방식1️⃣ Http Request 수신 → 클라이언트 Request를 커넥터가 수신2️⃣ 스레드 할당 → 스레드 풀에서 사용 가능한 스레드를 할당3️⃣ 요청 처리 → 할당된 스레드가 ..
2023.09.21 -
Fine-tuning Annotation-based Autowiring with @Primary or @Fallback
이 섹션에서는 “다중 후보 빈 중에서 특정 빈을 우선적으로 선택”해야 하는 상황에서 Spring이 제공하는 미세 조정(fine-tuning) 기능을 소개하고 있습니다.과거에는 주로 @Primary(스프링 3.0+)만 알려졌지만, Spring 6.2 버전부터는 새로운 @Fallback 애노테이션도 도입되어, 주입 우선순위를 더욱 세밀하게 제어할 수 있게 되었습니다. 1) 왜 필요한가?스프링에서 “타입에 따른 자동 주입”(@Autowired, @Inject 등)을 쓸 때, 같은 타입을 구현하는 여러 개의 Bean이 등록되어 있으면 스프링은 “어느 한 Bean”을 선택해야 합니다.만약 명시적인 지정(@Qualifier)이나 대표 Bean(@Primary) 지정이 없으면, NoUniqueBeanDefinitio..
2023.07.08 -
PathPattern
✅ 1.1 PathPattern이란?PathPattern은 Spring 5.3부터 도입되고, Spring 6에서 정식 디폴트 경로 매핑 메커니즘으로 강화된 클래스입니다.기존의 Ant-style 경로 패턴(/**, /*, ?, {variable} 등)을 보다 빠르고 정확하게 처리하기 위한 새로운 방식입니다. ✅ PathPattern과 URL Path 매칭✔ 핵심 개념:PathPattern: 경로 매핑 패턴을 미리 파싱한 객체PathContainer: 클라이언트 요청 URL 경로(/posts/123/comments)를 **분절된 경로(path segment)**로 표현한 객체이 둘을 비교하여 핸들러 매핑을 수행합니다. ✅ 기존 방식 vs PathPattern 항목 AntPathMatcher (기존) ..
2023.06.23 -
HandlerAdapter의 추상화 작업
✅ HandlerAdapter가 추상화를 제공한다는 의미DispatcherServlet은 HandlerMapping으로부터 적절한 핸들러 객체(예: @Controller의 메서드) 를 찾은 후, 이를 실행해야 합니다.하지만 핸들러는 다양할 수 있고, 처리 방식도 달라질 수 있습니다.예를 들어, 다음과 같은 다양한 타입이 존재할 수 있습니다:@RequestMapping이 붙은 HandlerMethodHttpRequestHandlerController 인터페이스 구현체 등DispatcherServlet이 이 모든 타입을 직접 처리하면 매우 복잡해지므로,이를 추상화하는 계층이 바로 HandlerAdapter 입니다. ✅ 그럼 "추상화"는 무엇을 포함하나요?HandlerAdapter는 단순히 handler.ha..
2023.06.23 -
contextPath와 servletPath
Spring Boot와 같이 내장 톰캣(embedded Tomcat) 을 사용하는 경우 대부분 contextPath와 servletPath를 사용하지 않습니다. ✅ 언제 contextPath와 servletPath가 사용되지 않을까?1. contextPath가 없는 경우 (contextPath = "")Spring Boot 기본 설정디폴트로 contextPath는 빈 문자열 ""입니다.즉, http://localhost:8080/이 루트 URL이 됩니다.설정하지 않으면 contextPath는 존재하지 않는 것으로 간주됨.application.properties 또는 application.yml 에서 따로 설정하지 않으면 사용하지 않습니다.# 예: contextPath 지정하지 않음server: port..
2023.06.23