Spring
-
Spring은 멀티쓰레드 기반이다Spring 2025. 11. 11. 02:56
[Spring은 멀티쓰레드 기반 프로세스이다] Spring은 FastAPI와는 다르게 멀티쓰레드 기반으로 동작한다. FastAPI = 싱글쓰레드 기반으로 Event Loop를 통해 동시성 프로그래밍 처리→ 즉, 한 개의 쓰레드가 Event Loop를 통해 여러 요청을 처리한다. 예를 들어 특정 API 호출이 두 번 일어났으면,하나의 쓰레드에서 두 개의 API 호출에 대한 비동기 코루틴 객체가 생성되고코루틴 객체들은 쓰레드의 Event Loop에서 번갈아 가면서 실행되어 동시에 실행되고 있는 것 같은 효과를 보여준다. Spring = 멀티쓰레드 기반으로 동시성 프로그래밍 처리→ 한 개의 쓰레드가 하나의 요청을 처리 예를 들어 특정 API 호출이 두 번 일어났으면,각 호출마다 하나의 쓰레드가 생성되어 요청을..
-
-
AuthenticationManagerSpring 2025. 4. 24. 14:42
public class LoginFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; ... // 로그인 시도 @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { // JSON 형식으로 받기 LoginDTO loginDTO; try { ObjectMapper objectM..
-
@AuthenticationPrincipalSpring 2025. 3. 20. 00:17
JwtFilter의 doFilter 직전에 다음과 같은 코드를 수행한다.SecurityContextHolder.getContext().setAuthentication(authToken); @AuthenticationPrincipal을 사용하면 이렇게 SecurityContextHolder에 설정한 Authentication 객체를 통해 현재 로그인한 사용자 정보를 바로 알아낼 수 있다. 바로 컨트롤러 메서드의 인자로 받을 수 있다. @RestController@RequestMapping("/api")public class UserController { @GetMapping("/me") public String getCurrentUser(@AuthenticationPrincipal JwtUser..
-
UsernamePasswordAuthenticationFilterSpring 2025. 3. 18. 14:05
JwtFilter 이후에 오는 LoginFilter 는 대체로 UsernamePasswordAuthenticationFilter를 상속받아 만든 필터이다.public class LoginFilter extends UsernamePasswordAuthenticationFilter UsernamePasswordAuthenticationFilter는 내부적으로 추상클래스인 AbstractAuthenticationProcessingFilter얘를 상속하는데 이 추상클래스는 아래와 같은 doFilter 함수를 가지고 있다. 따라서 attemptAuthentication이 가장 먼저 실행되고이에 따라 unsuccessfulAuthentication 또는 successfulAuthentication이 실행되는 것이다..
-
예외처리 (@RestControllerAdvice + @ExceptionHandler)Spring 2024. 2. 5. 08:47
[Spring의 예외처리 흐름] 스프링 내 예외처리기들은 Spring의 Bean으로 등록되어있고,예외가 발생하면 순차적으로 다음의 Resolver들이 처리가능한지 판별한 후에 예외가 처리된다. 1. ExceptionHandlerExceptionResolver에러 응답을 위한 Controller 나 ControllerAdvice에 있는 ExceptionHandler를 처리 2. ResponseStatusExceptionResolverHttp상태 코드를 지정하는 @ResponseStatus 또는 ResponseStatusException을 처리 3. DefaultHandlerExceptionResolver스프링 내부의 기본 예외들을 처리 1. ExceptionHandlerExceptionResolver가 동..
-
@PathVariable vs @RequestParamSpring 2024. 1. 28. 12:41
[@PathVariable] 말그대로 경로 상 변수 URI 경로 상 변수 이므로@GetMapping("/users/{email}")@GetMapping("/{pinId}/comments") 이런식으로 변수 형태로 들어가는 것이다 [@RequestParam] 요청하는 파라미터, 인자의 뜻으로어떠한 필터링으로 가져올지, 어떤 조건으로 가져올지를 명시하는 것이다 @GetMapping("/search") public String search( @RequestParam(name = "query") String query, @RequestParam(name = "page", defaultValue = "1") int page ) 이런식으로 하면GET /search?query=sp..
-
Spring Boot에서 @ComponentScan을 안해도 되는 이유Spring 2024. 1. 5. 10:28
[Spring에서 @ComponentScan 사용하지 않는 경우] 원래 Spring에서는 어떤 클래스들을 @Bean으로 만들지 @Configuration 클래스에 직접 명시를 해줘야한다@Configurationpublic class AppConfig { @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public DiscountPolicy d..