📌 Spring Boot – 필터(Filter)와 어노테이션(Annotation) 개념 잡기
스프링에는 개발자가 몰라도 자동으로 동작하는 다양한 기능이 있습니다.
이번 글에서는 필터(Filter), 인터셉터(Interceptor), 그리고 어노테이션(Annotation) 을 중심으로 쉽게 정리해보겠습니다.
✅ 스프링의 필터(Filter)란?
"필터는 요청과 응답을 가로채서 필요한 작업을 수행하는 문지기 역할을 한다!"
스프링은 엄청나게 많은 필터를 가지고 있으며, 기본적으로 제공되는 필터 외에도 필요한 필터를 추가하거나 직접 만들 수도 있습니다.
🔹 필터와 톰캣, 스프링 컨테이너
| 개념 | 역할 |
| 톰캣(Tomcat) | 요청을 받는 웹 서버 (성을 지키는 문지기) |
| 필터(Filter) | 톰캣에서 요청을 걸러주는 역할 |
| 스프링 컨테이너 | 왕(애플리케이션)이 사는 공간 |
| 인터셉터(Interceptor) | 스프링 컨테이너 내부에서 동작하는 필터 (AOP 개념 포함) |
📌 "필터는 웹 서버(Tomcat)에서 요청을 거르고, 인터셉터는 스프링 내부에서 요청을 조정한다!"
✅ 인터셉터(Interceptor)란?
"인터셉터도 필터와 비슷한 역할을 하며, 주로 요청의 권한을 체크한다!"
📌 필터와 인터셉터의 차이점
| 구분 | 필터(Filter) | 인터셉터(Interceptor) |
| 실행 위치 | 웹 서버(톰캣) 단계 | 스프링 컨테이너 내부 |
| 적용 대상 | 모든 요청(HttpServletRequest) | 컨트롤러(@Controller) 요청 |
| 주요 기능 | 요청을 가로채어 변경 가능 | 요청을 사전에 체크 후 실행 여부 결정 |
| 대표 예시 | XSS 필터링, CORS 처리 | 로그인 체크, 권한 확인 |
📌 "필터는 톰캣 레벨에서 동작하고, 인터셉터는 스프링 내부에서 동작한다!"
✅ 어노테이션(Annotation)이란?
"어노테이션은 코드에 대한 추가 정보를 제공하는 주석이며, 컴파일러나 프레임워크가 이를 인식하여 특정 동작을 수행할 수 있도록 한다!"
🔹 어노테이션의 주요 개념
| 개념 | 설명 |
| 주석 역할 | 개발자가 명시적으로 추가 정보를 제공 |
| 컴파일 체킹 | 컴파일 시점에 어노테이션을 분석하여 유효성을 검사 |
| 런타임 분석 (Reflection) | 실행 중에 어노테이션을 읽고 동작 수행 |
📌 예제: @Override
class Parent {
void show() {
System.out.println("부모 클래스");
}
}
class Child extends Parent {
@Override // 컴파일러가 부모 메소드와 일치하는지 체크
void show() {
System.out.println("자식 클래스");
}
}
@Override 덕분에 부모 클래스의 메소드를 정확히 재정의했는지 체크할 수 있음.
✅ 스프링의 주요 어노테이션
"스프링은 대부분의 객체를 어노테이션을 통해 관리한다!"
| 어노테이션 | 역할 |
| @Component | 클래스를 스프링이 관리하는 빈(Bean)으로 등록 |
| @Controller | 웹 요청을 처리하는 컨트롤러로 등록 |
| @Service | 비즈니스 로직을 처리하는 서비스 계층으로 등록 |
| @Repository | 데이터 액세스 계층 (DAO)으로 등록 |
| @Autowired | 의존성 주입(DI)을 자동으로 수행 |
| @Bean | 직접 빈을 등록할 때 사용 |
📌 "스프링이 IoC 컨테이너를 통해 어노테이션을 분석하고 객체를 생성 및 관리한다!"
✅ 리플렉션(Reflection)이란?
"클래스 내부 정보를 분석하는 기법으로, 런타임(Runtime)에서 동작한다!"
🔹 리플렉션이란?
- 실행 중(Run-time)에 클래스, 메소드, 필드 등의 정보를 분석하는 기법
- @Autowired 같은 어노테이션을 읽어, 객체를 자동으로 주입하는 데 활용됨
📌 예제: 리플렉션으로 클래스 정보 가져오기
import java.lang.reflect.Method;
class Sample {
public void test() {
System.out.println("테스트 메소드 실행");
}
}
public class ReflectionExample {
public static void main(String[] args) throws Exception {
Class<?> clazz = Sample.class;
Method method = clazz.getDeclaredMethod("test");
method.invoke(clazz.newInstance()); // "테스트 메소드 실행"
}
}
실행 중에 test() 메소드를 찾아 호출하는 방식!
✅ IoC, DI, 그리고 리플렉션
"스프링은 IoC 컨테이너를 통해 객체를 생성하고, DI를 통해 자동으로 주입하며, 리플렉션을 이용해 이를 분석한다!"
📌 개념 정리
| 개념 | 설명 |
| IoC(제어의 역전) | 객체 생성과 관리를 스프링이 담당 |
| DI(의존성 주입) | 필요한 객체를 자동으로 주입 |
| 리플렉션 | 클래스 내부 정보를 런타임에 분석 |
📌 "IoC + DI + Reflection이 결합되어, 스프링이 객체를 자동으로 생성하고 주입한다!"
🔥 핵심 정리
| 개념 | 설명 |
| 필터(Filter) | 웹 서버(Tomcat) 단계에서 요청을 가로채 처리 |
| 인터셉터(Interceptor) | 스프링 내부에서 컨트롤러 요청을 가로채는 역할 |
| 어노테이션(Annotation) | 코드에 대한 추가 정보를 제공하여 특정 동작 수행 |
| 리플렉션(Reflection) | 클래스 정보를 런타임에 분석하는 기법 |
✅ 컴파일 체킹(Compile Checking)이란?
"컴파일 시점에서 코드의 오류를 미리 찾아주는 기능!"
컴파일 체킹은 코드가 실행되기 전에(컴파일 단계에서) 오류를 감지하는 기능입니다.
자바에서는 컴파일러가 코드의 문법 및 타입 오류를 체크하여, 실행 전에 오류를 방지할 수 있습니다.
🔹 컴파일 체킹의 역할
| 기능 | 설명 |
| 문법 오류 감지 | 잘못된 문법이 있을 경우 컴파일 단계에서 오류 발생 |
| 타입 체크 | 변수나 메소드의 타입이 올바른지 검사 |
| 어노테이션 검사 | 어노테이션이 올바르게 사용되었는지 확인 |
📌 "컴파일 체킹 덕분에 실행하기 전에 오류를 미리 발견할 수 있다!"
📢 마무리
스프링은 필터와 인터셉터를 활용해 요청을 가로채고, 어노테이션과 리플렉션을 활용해 객체를 자동으로 생성 및 관리합니다.
이 개념을 이해하면 스프링의 내부 동작 방식을 보다 쉽게 이해할 수 있습니다!
https://getinthere.tistory.com/9
스프링부트 with JPA 1강 - 스프링이란!
1. 스프링이란? 스프링은 프레임워크이다. 스프링은 오픈소스이다. 스프링은 IoC 컨테이너를 가진다. 스프링은 DI 를 지원한다. 스프링은 엄청나게 많은 필터를 가지고 있다. 스프링은 엄청나게
getinthere.tistory.com
'스프링(Spring) 및 자바(JAVA)' 카테고리의 다른 글
| 스프링 부트 개념 정리 - 이론06 (0) | 2025.03.08 |
|---|---|
| 스프링 부트 개념 정리 - 이론05 (0) | 2025.03.08 |
| 스프링 부트 개념 정리 - 이론04 (1) | 2025.03.07 |
| 스프링 부트 개념 정리 - 이론03 (0) | 2025.03.07 |
| 스프링 부트 개념 정리 - 이론 01 (0) | 2025.03.06 |