2025/01 3

[Java/Spring] 리플렉션이 DI컨테이너에서 동작되는 과정

DI 컨테이너에서 리플렉션의 실제 동작(1) 클래스 정보를 로드DI 컨테이너는 애플리케이션 시작 시, 관리할 클래스(스프링에서는 @Component, @Service 같은 어노테이션이 붙은 클래스)를 탐색합니다.리플렉션을 사용해 클래스의 정보를 읽어들입니다.(2) 의존성 정보 추출리플렉션으로 클래스의 필드, 생성자, 메서드 등을 탐색하여 의존성을 추출합니다.예를 들어, 특정 필드에 @Inject 어노테이션이 붙어 있다면, DI 컨테이너는 해당 필드가 주입 대상임을 알게 됩니다.(3) 객체 생성클래스의 생성자를 리플렉션으로 호출하여 객체를 생성합니다.예를 들어, UserRepository가 필요하면 DI 컨테이너는 UserRepository의 Class 객체를 이용해 런타임에 인스턴스를 만듭니다.(4) 의..

[Java] 컴파일 시점과 런타임 시점의 차이

DI 컨테이너가 리플렉션을 사용하여 동작하는 원리에 대해 읽다가,문득 컴파일 시점과 런타임 시점이 나뉜 이유가 궁금해졌다. 근본적으로 컴파일/런타임을 이해하지 못해서 리플렉션도 잘 이해하지 못하고 있는 것 같아서두 개의 차이를 알아보고자 한다.1. Complie과 Runtime컴파일 시점 (Compile-Time)코드가 작성된 후, 컴파일러에 의해 바이트코드로 변환되는 시점이다.주요 작업:문법 오류 체크.타입 검증 (예: 변수 타입과 메서드 호출이 올바른지 확인).클래스 파일(.class) 생성.결과물: JVM이 실행할 수 있는 바이트코드(.class 파일)가 생성된다.런타임 시점 (Runtime)컴파일된 바이트코드를 JVM이 실행하는 시점이다.주요 작업:JVM이 클래스 로더(ClassLoader)를 통..

[Servlet/Spring] Filter, Interceptor, AOP의 차이

필터(Filter):서블릿 컨테이너 레벨에서 동작.스프링 프레임워크와 독립적으로 동작하며, DispatcherServlet 이전에 요청을 처리합니다.주로 인증, 로깅, CORS 설정 등에 사용.인터셉터(Interceptor):Spring MVC 레벨에서 동작.DispatcherServlet과 컨트롤러 사이에서 요청을 처리하거나 가로챕니다.주로 요청 전/후의 처리 로직에 사용.AOP:스프링 컨테이너 내부의 스프링 빈에만 적용됩니다.특정 메서드 호출 전/후 또는 예외 발생 시 로직을 삽입합니다.주로 트랜잭션 관리, 로깅, 권한 검사, 캐싱 등에 사용됩니다.

반응형