Programming/For interview 8

[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:스프링 컨테이너 내부의 스프링 빈에만 적용됩니다.특정 메서드 호출 전/후 또는 예외 발생 시 로직을 삽입합니다.주로 트랜잭션 관리, 로깅, 권한 검사, 캐싱 등에 사용됩니다.

[Java] Java 버전에 따른 핵심 변경 사항 (Java8)

Java는 크게 Java8, Java11, Java17 에서 핵심 기능이 변경되었다.먼저 Java8의 핵심 변경 사항부터 알아보자.🤍 Lambda Expression (람다식)람다식은 익명함수를 정의하는 간결한 방법이다. 즉, 이름이 없는 함수를 표현하기 위한 문법이다.기본 문법 (매개변수) -> {실행코드}사용람다식은 함수형 인터페이스을 통해 사용됨함수형 인터페이스메소드가 하나만 존재하는 인터페이스@FuctionalInterface 애노테이션함수형 인터페이스임을 명시적으로 표현🤍Stream AP스트림(Stream)스트림은 데이터의 흐름이다.스트림은 한 번만 소비할 수 있다.스트림의 특징선언적 프로그래밍: '무엇을 할 것인가'에 집중하며, '어떻게 구현할 것인가'는 신경쓰지 않음.원본 데이터를 변경하..

[JavaScript] JS 기초 중에서 기초, DOM 구조에 대해서 알아보자

사이드 프로젝트를 진행하며 프론트에 백엔드 api를 연동하려고 하니document라는 객체를 상당히 자주 사용하게 되었다.document라는 객체는 무엇일까? 이 객체를 알기 위해선 DOM 구조 먼저 알아야한다. 🤍DOM(Document Object Model)이란?HTML 문서를 브라우저가 읽었을 때, JavaScript가 접근하기 쉬운 객체 구조로 변환한 것을 DOM이라고 한다.  안녕하세요 저는 LazyCat입니다.위에 HTML 문서를 브라우저가 읽으면 아래와 같은 DOM 구조로 변환된다. document       ㄴhtml               ㄴhead                      ㄴtitle               ㄴbody                      ㄴ..

[Git] Git의 3가지 영역

🤍Git의 3가지 영역 Working Directory (= Working tree)설명: 개발자의 작업 공간파일 상태: Untracked -> Modified Staging Area설명: 커밋이 되기 전에 변경된 파일들을 모아두는 임시 영역Working Directory에서 git add 명령어를 통해 파일을 이동시킬 수 있음파일 상태: Staged Repository설명: 최종적으로 파일이 커밋되어 버전 이력으로 저장되는 공간git commit 명령어를 통해 옮겨진 파일들파일 상태: Committed

[Spring] HandlerMethodArgumentResolver

🤍 HandlerMethodArgumentResolver 인터페이스Spring MVC에서 컨트롤러 메소드의 매개변수를 동적으로 바인딩하기 위해 사용되는 인터페이스입니다.  🤍 사용 목적Spring MVC는 HTTP 요청이 컨트롤러로 들어올 때, 요청 데이터를 기반으로 컨트롤러 메서드의 매개변수를 생성하고 주입하는데, 이 과정에서 기본 제공되는 바인딩 로직 외에 사용자 정의 로직을 추가하고 싶을 때 이 인터페이스를 사용합니다. 간단히 말해서, 지원하지 않는 매개변수 바인딩 로직을 구현하기 위해 사용됩니다. 🤍 주요 메소드1. supportsParameter(MethodParameter parameter)특정 매개변수가 이 리졸버에 의해 처리될지 결정한다true 반환 시, 해당 매개변수는 이 리졸버에서..

[Spring] Mock 테스트

🤍소프트웨어 테스트1. TDD (Test-driven development)개발 전 테스트 코드를 먼저 작성하는 방식을 의미한다. 2. 왜 TDD를 사용해야 할까?테스트를 잘 작성하기 위해선,  모든 요구 사항에 대한 철저한 점검이 필요하기 떄문이다!시스템 전반적인 설계 향상개발 집중력 향상3. 테스트 종류테스트 종류범위 대상속도도구/기법단위 테스트작은 단위(메소드, 클래스)개별 로직빠름JUnit, Mockito 통합 테스트모듈 간 상호작용여러 모듈(컨트롤러 - 서비스 등)보통Spring Boot Test시스템 테스트애플리케이션 전체애플리케이션 전체느림  1. 단위테스트(Unit Test)개별 메소드, 클래스 등 작은 단위가 예상대로 동작하는지 검증가장 작은 테스트 단위Mock 객체를 활용해 외부 의존..

반응형