Spring/공부 5

[Spring/공부] Custom Interceptor

토이 프로젝트를 진행하다 Spring Security 없이 토큰을 통한 인가를 해야 했다. 이때, 음악(Music)과 회원(User)이라는 엔티티가 다대일(양방향)이고, 회원에서 굳이 음악을 가져올 일이 없는 경우가 종종 있어 지연로딩으로 가져오려 하는 도중 LazyInitializationException 이 발생하여 이에 대해 기록하고자 한다. Interceptor란? Spring MVC에서 요청이 컨트롤러로 위임되기 전, 위임된 후, 뷰 처리 단계에서 특정 로직을 할 수 있는 스프링에서 제공하는 장치 쉽게 설명하자면, "요청에 대한 작업 전/후로 가로채어 특정 로직을 수행하는 역할" 정도로 설명할 수 있다. HandlerInterceptor 인터페이스를 직접 구현하여, 인터셉터를 직접 구현할 수 있..

Spring/공부 2023.03.08

[Spring Security] 스프링 시큐리티란?

🍃 Spring Security란? 스프링에서 제공하는 모듈 중 하나로, 스프링을 기반으로 하는 보안 프레임워크이다. Spring Security 를 통해 자체적으로 세션 체크, 리다이렉션 등을 추상화하여, 보다 편하게 구현하도록 돕는다. Spring Security는 스프링 의존성을 없애기 위해 Filter 인터페이스를 기반으로 동작한다. 즉, 기존의 Spring MVC, 비즈니스 로직과 완벽하게 분리하여 관리 및 동작할 수 있다. 또, 개발자가 직접 만들어야할 필터들을 기본으로 제공해준다. 이렇게 제공하는 필터들을 SecurityFilterChain 이라 한다. SecurityFilterChain 들의 종류와 특징들은 아래에서 다루겠다. 🔐 인증과 인가 인증(Authentication)은 누구인지 식..

Spring/공부 2023.01.16

[Spring Core] 스프링 빈 생명주기와 스코프

♻ 스프링 빈 생명주기(Life-Cycle) I/O 작업들처럼 연결을 해주고, 필요없거나 종료된 경우 해당 연결을 끊어주기 위해서는 반드시 해당 작업의 초기화와 종료 작업이 필요하다. 스프링 빈 역시 이러한 점을 가지고 있다. 객체를 생성하고, 의존관계를 주입해준다. 객체 생성 → 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계를 주입이 완료가 된 후에야 비로소 필요한 데이터를 사용할 수 있는 준비를 마치게 된다. 스프링 빈은 의존관계가 모두 주입된 이후, 호출해야한다. 그렇다면, 해당 빈의 초기화 작업이 모두 이루어졌는 지를 개발자가 알아야 한다. 당연하지만, 기화 작업이 끝난 후에 해당 데이터를 사용해야 예기치 못한 오류들을 피할 수 있기 때문이다. 이를 개발자가 알기 위해서는 우선, 스프링 빈..

Spring/공부 2023.01.14

[Spring Core] 컴포넌트 스캔과 의존성 주입

🔍 컴포넌트 스캔이 필요한 이유 스프링은 무수히 많은 컴포넌트와 빈들을 가지게 되며, 프로젝트의 규모가 커져갈수록 더 많은 컴포넌트들과 빈들을 정의해주어야 하는 번거로움과 함께 실수를 하게 될 수 있다. 그래서 스프링 빈은 설정 정보가 없더라도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공함으로써 이러한 문제를 해결하고자 마련되어 있다. 🎯 컴포넌트 스캔 작동 원리 @ComponentScan 은 @Component 어노테이션이 있는 클래스들을 스프링 빈으로 등록하는 과정을 거치게 된다. 이때, 스프링 빈은 기본적으로 맨 앞글자만 소문자를 사용한 이름으로 지정된다. @Component("nothing") public class Something { ... } 위처럼 하는 경우 스프링 빈 이..

Spring/공부 2023.01.14

[Spring Core] 스프링 컨테이너와 스프링 빈

🛒 스프링 컨테이너란? 스프링에서 사용할 객체들을 담아두고 있는 것 등록된 스프링 빈을 생성하고 의존 관계를 주입하고 생명주기를 관리해 주는 장치이다. @Configuration 어노테이션을 설정 클래스에 붙여 설정 파일을 구성할 수 있으며, 해당 설정 파일에 있는 메소드들에 @Bean 어노테이션을 붙여 스프링 컨테이너에 빈을 등록시킬 수 있다. @Configuration public class AppConfig { @Bean public void DiscountPolicy discountPolicy() { return new MemberShipDiscountPolicy(); } } 위와 같은 예시처럼 사용할 수 있다. 스프링은 애플리케이션 컨텍스트로 시작하며, 이를 편하게 "스프링 컨테이너"라고 칭한다..

Spring/공부 2023.01.11