Spring
-
[오류 기록] Custom WebSecurityConfigurerAdapter가 적용되지 않음Spring 2022. 6. 26. 07:32
문제 WebSecurityConfigurerAdapter을 상속받은 SecurityConfig 클래스에서 configure 메서드를 오버라이딩하여 인증을 선택적으로 적용하였다. "/" 은 permitAll을 적용한 url중 하나인데 /페이지에 접속하면 인증을 요구하였다. 원인 SecurityConfig 클래스가 포함된 oauth2 패키지가 @SpringBootApplication을 포함하고 있는 DeveloperCommunityApplication.kt 파일을 포함하는 프로젝트 패키지에 포함되어 있지 않았다. 따라서 ComponentScan의 적용 대상이 되지 않았다. 시도한 해결방법 oauth2 패키지를 developercommunity 패키지(프로젝트 패키지) 하위로 옮겼다. (애초에 왜 밖에다 만들..
-
[Spring][Kotlin] 빈 스코프Spring 2022. 5. 21. 15:44
빈 스코프란? 빈 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 빈 스코프는 다음과 같이 지정 가능하다 [컴포넌트 스캔 자동 등록] @Scope("prototype") @Component class HelloBean{...} [수동..
-
[Spring][Kotlin] 빈 생명주기 콜백Spring 2022. 5. 21. 14:18
빈 생명주기 콜백 시작 빈 생명주기 콜백은 빈이 생성될 때와 소멸하기 직전에 안전하게 처리될 수 있도록 호출하는 콜백이다. DB 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화 + 종료 작업이 필요하다 서버 뜰 때 애플리케이션이랑 DB를 미리 10~100개정도 연결해놓는다. 고객 요청이 올 때 연결해놓을 걸 재활용할 수 있다. 스프링 빈은 간단하게 다음과 같은 lifeCycle을 가진다 객체 생성 -> 의존관계 주입 (예외 : 생성자 주입) 스프링 빈은 객체 생성 후 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다 -> 스프링은 의존관계 주입이 완료되면 스..
-
[Spring][Kotlin]의존관계 자동 주입Spring 2022. 5. 21. 13:26
다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 : 생성자를 통해서 의존관계를 주입받는 방법이다. [특징] 생성자 호출 시점에 딱 한번만 호출되는 것이 보장 -> 그때 값 세팅하고 그 후 세팅 못하게 막기 가능하다 불변, 필수 의존관계에 사용 생성자가 딱 하나 있다면 @Autowired 생략 가능하다. (스프링 빈인 경우) @Component class OrderServiceImpl: OrderService{ val memberRepository: MemberRepository val discountPolicy: DiscountPolicy @Autowired constructor(memberRepository: MemberRepository..
-
[Spring][Kotlin]컴포넌트 스캔Spring 2022. 5. 19. 00:44
컴포넌트 스캔과 의존관계 자동 주입 스프링은 설정 정보 없이도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. + 의존관계 자동으로 주입하는 @Autowired 기능도 제공한다. 컴포넌트 스캔 @ComponentScan을 설정정보에 붙여주면 된다. 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. Autowired 의존관계 자동 주입 이전에는 설정정보 클래스에서 @Bean으로 직접 설정 정보를 작성했고 의존관계도 명시했다. 하지만 컴포넌트 스캔을 사용하면 이런 설정 정보 자체가 없기 때문에 의존관계 주입도 @Autowired를 통해서 해주어야한다. @Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다. @Aut..
-
[Spring][Kotlin] 싱글톤 컨테이너Spring 2022. 5. 18. 19:19
스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 그리고 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 웹앱은 보통 여러 고객이 동시에 요청한다. Problem] Request 마다 객체 생성하면 메모리 낭비가 매우 심하다. Sol) 해당 객체를 1개만 생성하고 공유하도록 하면 된다. (사실 요즘 GC가 좋아서 초당 100최 정도는 괜찮지만 효율적이면 좋으니까) 싱글톤 패턴 : 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. -> 객체 인스턴스가 2개 이상 생성 못하도록 막야야 한다. 싱글톤 구현 방법은 많다. 그 중 하나의 방법은 private 생성자를 사용해서 생성자를 사용하지 못하도록 막는 것이다. Kotlin에서는 object 키워드를 붙이면 싱글톤 클래스 ..
-
[Spring][Kotlin] 스프링 컨테이너Spring 2022. 5. 12. 16:37
ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext 는 인터페이스인데 XML기반, 애노테이션 기반의 자바 설정 클래스로 하는 구현체를 선택할 수 있다. 애노테이션 기반의 자바 설정 클래스를 기반으로 하는 스프링 컨테이너는 아래와 같이 만들 수 있다. //스프링 컨테이너 생성 val applicationContext = AnnotationConfigApplicationContext(AppConfig::class.java) AnnotationConfigApplicationContext -> 이 클래스는 ApplicationContext 인터페이스의 구현체이다. 스프링컨테이너를 부를 때 Bean Factory, ApplicationContext로 구분하지만 일반적으..
-
[Spring][Kotlin] 제어의 역전(Ioc)과 의존관계 주입(DI)Spring 2022. 4. 13. 01:08
제어의 역전 IoC (Inversion of Control) : 구현 객체가 제어 흐름을 스스로 조종하지 않고 외부에서 관리하는 것을 말한다. 앞 포스팅에서의 코드에서 class MemberServiceImpl: MemberService(){ val memberRepository = MemoryMemberRepository() //생략 } 위의 코드는 MemberServiceImpl 객체가 스스로 필요한 서버 구현 객체를 생성하고 연결하고 실행한다. 즉 구현 객체가 프로그램의 제어 흐름을 조종한다. class AppConfig{ fun memberRepository() = MemoryMemberRepository() fun memberService() = MemberServiceImpl(memberRep..