반응형
인터셉터(Interceptor): 요청과 응답을 가로채는 기술
인터셉터는 웹 애플리케이션에서 요청과 응답을 가로채어 처리하는 기술로, 주로 스프링 프레임워크와 같은 MVC 패턴을 사용하는 프레임워크에서 많이 사용됩니다.
인터셉터는 클라이언트의 요청이 컨트롤러에 도달하기 전에, 또는 컨트롤러에서 응답을 반환하기 전에 특정 로직을 수행할 수 있는 메서드를 제공합니다.
사용 이유
- 공통 로직 처리: 인증, 로깅, 트랜잭션 관리 등과 같은 공통 작업을 중앙에서 처리할 수 있습니다.
이를 통해 코드의 중복을 줄이고, 유지보수를 용이하게 합니다. - 요청 및 응답 수정: 요청을 처리하기 전에 데이터를 변형하거나, 응답을 가공하는 데 유용합니다.
예를 들어, 요청 헤더를 수정하거나 응답 본문에 추가 정보를 삽입할 수 있습니다. - 성능 향상: 인터셉터는 요청의 흐름을 조절할 수 있기 때문에, 특정 조건에 따라 요청을 거부하거나, 캐시된 응답을 반환하는 등의 최적화 작업을 수행할 수 있습니다.
- 보안 강화: 사용자 인증 및 권한 검사를 통해 보안을 강화할 수 있습니다.
요청이 컨트롤러에 도달하기 전에 사용자의 권한을 확인함으로써 불필요한 처리를 줄일 수 있습니다.
예제 코드
요청이 들어올 때마다 로그를 남기고, 인증 정보를 확인하는 인터셉터 구현
#1 인터셉터 클래스 작성
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 요청 URL 로그
System.out.println("Request URL: " + request.getRequestURL());
// 인증 정보 확인 (예를 들어, 세션에서 사용자 정보를 가져옴)
String user = (String) request.getSession().getAttribute("user");
if (user == null) {
response.sendRedirect("/login"); // 인증되지 않은 경우 로그인 페이지로 리다이렉트
return false; // 요청 처리 중단
}
return true; // 요청 처리 계속
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 응답 후 처리 (예: 로그 기록)
System.out.println("Response Status: " + response.getStatus());
}
}
#2 인터셉터 등록
: 스프링 설정 파일에서 인터셉터 등록
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customInterceptor)
.addPathPatterns("/**") // 모든 경로에 대해 인터셉터 적용
.excludePathPatterns("/login"); // 로그인 경로는 제외
}
}
#3 컨트롤러 사용 예제
: 인터셉터가 작동하는 컨트롤러 작성
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home"; // home.html 뷰를 반환
}
@GetMapping("/login")
public String login() {
return "login"; // login.html 뷰를 반환
}
}
마무리
인터셉터는 웹 애플리케이션에서 요청과 응답을 가로채어 처리할 수 있는 도구입니다.
인터셉터를 적절히 활용하면 애플리케이션의 성능과 보안을 향상시킬 수 있으며, 소스 작성에 있어 유연성을 제공합니다.
반응형
'IT · 인터넷' 카테고리의 다른 글
[Java] ArrayIndexOutOfBoundsException: 배열 인덱스 초과 오류 (1) | 2025.01.27 |
---|---|
[Java] ClassCastException: 잘못된 타입으로 객체 캐스팅 (1) | 2025.01.26 |
[Java] Socket 통신 (0) | 2025.01.24 |
엑셀에서 알아두면 유용한 함수 10가지 (0) | 2025.01.22 |
엑셀 맞춤법 검사 기능 사용방법 및 끄는 방법 (0) | 2025.01.21 |