스프링(Spring) 및 자바(JAVA)

스프링 부트 개념 정리 - 이론02

Dev.99_tale 2025. 3. 6. 15:30

📌 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