TIL - doFilter 메소드에 대해서 개발하면서 매우 궁금했던 게 바로 chain.doFilter(request, response); 메소드였다. JwtAuthorizationFilter에 존재하는 이 doFilter는 도대체 무엇을 하는 애일까? 내 첫 번째 TIL에서 공부했던 게 바로 doFilter 안의 인자로 들어가는 HttpServletRequest request와 HttpServletResponse response였는데, 얘들은 일종의 요청과 응답을 나타내는 객체라는 것을 알게되었다. 그러나 이제 궁금한 점은 그렇다면 요청과 응답을 동시에 가지고 있는 doFilter 메소드는 무엇을 하는 것 인지였다. oracle에 따르면, 필터는 리소스(서블릿 또는 정적 콘텐츠)에 대한 요청이나 리소스..
🗄️Backend/SpringBoot
Spring Bean Life Cycle에 대해서 Spring에서 빈이 만들어지고, DI로 사용된다는 것은 알고 있었다. 그런데 전체적으로 Spring Bean Life Cycle에 대해서는 잘 모르는 것 같아서 이번에 새롭게 정리해보려고 한다. 간단하게 정리하자면, bean은 다음과 같은 라이프 사이클을 거친다. 스프링 컨테이너 시작 -> 스프링 빈 초기화 -> 의존관계 주입(DI) -> init() -> 유틸리티 -> destory() -> 스프링 종료라는 라이프 사이클을 거치는데, 더 디테일한 전체 flow는 다음과 같다. 패키지 스캐닝이 있는 어노테이션(@Bean, @Controller, @RestController, @Service, @Repository, @Component)이나 XML 등으로..
스프링 서블릿(Servlet)에 대해 Spring Boot로 코드를 짜다가 어느 날 든 생각. 도대체 HttpServletRequest request와 HttpServletResponse response가 무엇일까? 그동안 막연하게 request와 response일 것이라고 생각하고 있었지, 정작 이 중간에 있는 단어, Servlet 이 무엇인지에 대해서는 별로 관심이 없었다. 조사해 보니, Spring MVC는 중앙 Servlet인 DispatcherServlet를 중심으로 디자인되었다고 한다. DispatcherServlet는 사용자의 요청을 처리하기 위한 shared algorithm를 제공한다. DispatcherServlet은 Spring 기반 웹 애플리케이션의 Front Controller 역..
커스텀 어노테이션이 필요한 상황 지금 구현하고 있는 프로젝트에서는 거의 대부분의 기능을 소셜 로그인 후 사용 가능하다. 따라서 거의 모든 API에서 JWT 토큰 인증 후 토큰에 있는 정보를 가지고 member의 정보(id, email 등등)을 추출하는 로직이 필요한데, 이를 컨트롤러에서 중복되는 코드를 계속 작성하기에는 너무 지저분하기도 하고, 깔끔하게 어노테이션 하나로 선언적으로 표현하고 싶어서 커스텀 어노테이션인 @AuthUser를 만들기로 했다. @AuthUser 어노테이션 @AuthUser는 여러 도메인에서 글로벌하게 사용할 어노테이션이므로, ./global/auth 아래에 만들어 주었다. 코드는 아래와 같다. (참고로 interface 앞의 @는 오타가 아니라, 어노테이션 타입이라는 뜻이다.) ..
build.gradle에 종속성 설정 먼저, 우리는 OpenFeign을 쓸 것이므로, 다음과 같이 build.gradle에 종속성을 설정해준다. ext { set('springCloudVersion', "2023.0.0") } dependencies { //FeignClient implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } 여기서 중요한 점은 이 버전의 Spring Cloud(OpenFeign)을 쓰려..