Spring
-
예외처리 (@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..
-
스프링 컨테이너와 @Configuration and @BeanSpring 2024. 1. 5. 09:21
[spring container가 나온 이유 (IOC)] 일단 Ioc(Inversion of control)를 만족하기 위해특정 클래스 내에서는 자신이 의존하는 타 클래스 객체를 생성하는 코드가 없어야한다말이 좀 애매할 수 있는데 아래 한 문장이 제일 중요한 말이다 자신이 의존하는 클래스 객체를 생성하면 안된다 만약 이런 상황이면 서비스 상황이 바뀌면 모든 클래스 내 생성하는 객체 코드도 바꿔야하므로 복잡해진다 그래서 따로 모든 객체들을 생성하고 해당 객체들을 이를 사용하는 클래스에 주입하는 클래스가 존재해야한다즉 특정 어플리케이션이 필요한 모든 객체들을 생성하기만 하는 역할을 가진 클래스가 필요하다는 것임 ㅇㅇ그래서 나온게 spring container와 Bean 이라는 개념임 위에 필요한 모든 객체를..
-
스프링 인터셉터Spring 2023. 12. 29. 20:53
스프링 인터셉터도 서블릿 필터, AOP와 동일하게 공통 관심 사항을 해결할 수 있는 기능임. 인터셉터는 그림에서 볼 수 있듯이 스프링 영역(Spring Context) 안에서 실행됨. 특정 Controller가 실행되기 전이나 실행된 후 추가적인 작업을 할 수 있도록 함. 서블릿 필터가 서블릿이 제공하는 기술이라면,스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘 다 공통관심사항을 처리하지만, 적용되는 순서와 범위, 사용방법이 다름. preHandle1. 세션 체크: 세션에서 로그인 여부를 확인하고 로그인되지 않았으면 리다이렉트.2. API Rate Limit (속도 제한): 사용자의 API 호출 횟수를 제한3. 특정 URL 접근 제한: 관리자 페이지 접근 권한 체크postHandle4. 공통 응..
-
서블릿 필터Spring 2023. 12. 28. 17:07
HTTP Request가 컨트롤러까지 도달하기 전에 여러 관문을 거치는데이 중에서 스프링 컨텍스트 밖의 서블릿 단에서 한번 HTTP Request들을 필터링해주는 기능을서블릿 필터라고 한다! 1. CORS 처리 : 다른 도메인에서 오는 요청을 허용할지 제한할지 결정2. XSS 및 SQL Injection 방지 : 입력값을 필터링하여 악성 코드 삽입 방지3. 로깅 (@Slf4j) : 모든 HTTP 요청과 응답을 기록4. JWT 인증 처리: 요청 헤더에서 JWT 토큰을 확인하고 인증 여부 결정5. 인코딩 변환 간단하게 말하면 Filter는 Spring 영역에 들어오기 전에 Filter 작업을 하는 역할을 합니다. 즉, 적합한 Controller 매핑을 해주는 DispatcherServlet이 실행되기 전에앞..
-
@RestController를 사용하는 이유Spring 2023. 10. 9. 01:38
@RestController = @ResponseBody + @Controller 로써,ViewResolver를 거치지 않고 HttpMessageConverter를 통해 HttpResponseBody에 데이터를 담아 보내라는 어노테이션이다. 원래 Spring은 아래와 같이 viewResolver를 통해서 Thymeleaf 같은 뷰 템플릿을 활용해서 완성된 View 를 보내준다.하지만 최근 Client Side Rendering이 유행을 타며 아래와 같은 서버 사이드 렌더링 방식을 사용하지 않게 되었다. 그럼 우리는 이제 SSR 방식이 아니므로 viewResolver가 동작할 필요가 없고,그냥 Client 단에서 (React 단에서) 필요한 데이터만 JSON 같은 형식으로 넘겨주기만 하면 되는 것이다. 이..
-
Spring MVC 동작방식Spring 2023. 10. 6. 23:28
[ DispatcherServlet ]기존의 frontcontroller가 DispatcherServlet임.이 DispatcherServlet은 부모클래스에서 HttpServlet을 상속받고 있기 때문에 Servlet으로 작동함. Spring Boot 구동 시 DispatcherServlet은 자동등록하며 모든 경로(urlPatterns="/")에 대해 매핑함. 이 DispatcherServlet은 명시적으로 코드로 작성하여 호출하지 않아도 됨.그냥 자동으로 생성되고 등록됨. 얘가 HTTPRequest를 받고 그에 맞는 응답을 보내는데 모든 작업에 관여하는 관리자임.즉 얘가 다른 놈들(Controller/viewResolver)을 호출하고 사용하는거임. 즉 얘가 @Controller 붙은 클래스에서 ..