[Spring] 필터, 어노테이션, 리플렉션

strongmhk·2023년 7월 9일
0

Spring

목록 보기
12/25
post-thumbnail

📌 포스팅에 앞서

이 포스팅은 필자가 배운 내용을 정리하기 위한 목적이므로, 비유적인 표현이 많고 정석적인 정의와는 다를 수 있다.
그 점을 인식해주었으면 한다.

피드백 절대 환영!!!


📌 스프링이란?

  • 스프링은 엄청나게 많은 필터를 가지고 있다.
  • 스프링은 엄청나게 많은 어노테이션을 가지고 있다. (리플렉션, 컴파일 체킹)

📌 스프링은 엄청나게 많은 필터를 가지고 있다

필터란 무언가를 걸러내는 기능이다.
그렇다면 스프링에서의 필터도 같은 역할을 할까? 맞다!

예를 들어, A나라와 B나라가 전쟁 중이라고 하자.
A나라에는 성이 있고(톰캣), 이 성에 B나라 사람들이 몰래 들어오지 못하도록 필터(web.xml) 로 걸러내야 한다.

또한, 성 안에는 왕의 거주지(스프링 컨테이너) 가 있을 텐데,
이곳을 방문하려면 A나라 사람이라도 아무나 들어갈 수 없도록 필터(인터셉터, AOP) 가 추가로 필요하다.

즉,

  • web.xml → 성(톰캣)에 들어오는 사람을 검사
  • 인터셉터(AOP) → 왕(스프링 컨테이너)에게 접근할 수 있는지 추가 검사

톰캣 안에 스프링 컨테이너가 내장된 구조는 아니지만, 쉽게 이해하기 위해 이렇게 표현했다!


📝 요약

  • 스프링 자체적으로 기본 필터 기능을 제공
    • web.xml
    • 인터셉터(AOP, 권한 체크 역할)
  • 사용되지 않는 필터를 활성화할 수도 있고, 직접 필터를 만들 수도 있음

📌 스프링은 엄청나게 많은 어노테이션을 가지고 있다 (리플렉션, 컴파일 체킹)


❓ 어노테이션(Annotation)

public class Animal {
    public void run() { }
}
public class Dog extends Animal {
    @Override
    run() { }  // 오타! (오류 발생)
}

어노테이션이란 스프링에게 주석처럼 힌트를 주는 기능이다.


주석과 어노테이션의 차이

  • 주석: 컴파일러에게 "이 부분은 해석하지 마"라고 알리는 것
  • 어노테이션: 컴파일러가 해석해서 활용하는 정보

예를 들어, @Override 어노테이션은 "이 메서드는 부모 클래스의 메서드를 재정의한 것이다" 라는 의미다.
스프링이 매번 이를 직접 해석하기보다, 어노테이션을 보고 쉽게 이해할 수 있도록 힌트를 주는 것이다.


스프링의 대표적인 어노테이션

@Component // 클래스를 스프링 컨테이너에 등록
@Autowired // 스프링이 등록한 객체를 자동으로 주입 (DI)

다음 코드에서 어노테이션이 어떻게 작동하는지 살펴보자.

@Component
public class A { }

public class B {
    @Autowired
    A a;
}

@Component가 붙은 클래스 A는 스프링이 관리하는 객체(Bean) 가 된다.
클래스 B에서는 @Autowired를 사용하여, 스프링 컨테이너에서 A 객체를 찾아 자동으로 주입한다.


❓ 리플렉션(Reflection)


리플렉션이란?

리플렉션은 런타임 시점에 클래스의 정보를 분석하는 기법이다.

프로젝트가 실행되면, 스프링 컨테이너는 @Component가 붙은 클래스를 스캔해 Heap 메모리에 올린다.
이 과정에서 각 클래스가 어떤 필드, 메서드, 어노테이션을 가지고 있는지 확인한다.


❓ 컴파일 체킹(Compile Checking)

컴파일 체킹이란, 리플렉션 과정에서 코드가 올바른지 확인하는 과정이다.

예를 들어, 다음 코드에서 @Override를 사용했지만 부모 클래스에 fly() 메서드는 존재하지 않는다.

public class Animal {
    public void run() { }
}

public class Dog extends Animal {
    @Override
    public void fly() { }  // 컴파일 오류 발생! (부모 클래스에 fly() 없음)
}

이 경우, 스프링이 리플렉션 과정에서 확인한 후 오류를 발생시킨다.
즉, "정말로 Override가 맞는지 확인하는 과정" 이다.


📝 요약

개념설명
어노테이션스프링에게 주석처럼 힌트를 주는 기능
리플렉션런타임에 클래스의 필드, 메서드, 어노테이션 정보를 분석하는 기법
컴파일 체킹리플렉션 과정에서 코드가 올바른지 확인
profile
저 커서 개발자가 될래요!

0개의 댓글

관련 채용 정보