I can do it(Feat. DEV)

[Spring Boot] 디렉토리 변경 후 @Configuration 스캔 이슈 본문

개발자 모드/응용

[Spring Boot] 디렉토리 변경 후 @Configuration 스캔 이슈

까짓거 해보자 개발자 2023. 11. 1. 15:10
728x90
1. 이슈 발생 상황

 

spring security를 사용하여 로그인 기능을 구현하려고 security config 클래스 파일을 생성하여

 

기본 로그인 기능까지는 만들었음.

 

그런데 프로젝트 디렉토리 구조를 변경해야 할 듯하여 전체적으로 수정을 진행함.

 

기존 back단 구조

 

이해를 돕기위해 이런 식으로 구조가 되어 있었다고 가정하겠음.

 

그리고 

 

바뀐 back단 구조

 

이런식으로 구조를 변경했는데(실제 프로젝트는 아님)...

 

security로 만들었던 로그인 기능이 작동을 안 함(로그인이 안 되는 상황 발생)

 

뭔가 디렉토리 구조를 변경해서 문제가 생긴 지는 알겠는데 에러도 안 뜨고 상황도 애매하니

 

갓글에 검색하기에도 어려웠음.🤬

 

 

728x90

 


2. 이슈가 발생한 과정 및 이유

 

돌고 돌다 @Configuration이 작동을 안 하는 듯하여 찾아보니

 

@ComponentScan을 사용하여 package 범위를 지정할 수 있다는 것을 알게 됨.

 

기존 Spring 프로젝트에서는 security.xml 파일에 scan 패키지 범위를 지정했지만...

 

Spring boot 프로젝트에서는 따로 작성한 부분을 찾을 수 없었음.

 

즉, 내가 설정한 게 아니라 기본으로 설정되어 있는 것이었고,

 

처음 Spring boot 프로젝트를 만들면 자동으로 설정되어있는

 

@SpringBootApplication 이 어노테이션 안에

 

다양한 설정이 정의되어 있다는 것을 알게 됨.

 

실제로 application 클래스에 @SpringBootApplication 어노테이션을

 

컨트롤 누르고 클릭해 보면...

 

SpringBootApplication.class 화면

 

이런 식으로 설정이 되어있는 것을 볼 수 있음.

 

이중 아까 언급했던 @ComponentScan이 설정되어 있고,

 

내가 직접 ComponentScan 설정을 하지 않았다면 

 

@SpringBootApplication 어노테이션이 정의된 곳이 base package가 된다는 것임.

 

필자는 디렉토리 구조를 변경하면서 introduce라는 패키지를 만들었고 그 과정에서

 

@SpringBootApplication 어노테이션이 정의된 곳인

 

ExamAppilication 클래스 파일이 security 설정파일과 분리되어

 

@Configure 어노테이션이 작동을 안 하였던 것이었음!!!!!!!!!!!!!🤦‍♂️

 


3. 해결방법

 

해결 방법은 다들 아시겠지만,

 

@SpringBootApplication 어노테이션이 정의된 곳인 ExamAppilication 클래스 파일을

 

최상위 경로로 옮겨주면 잘 작동함.(위 사진에서는 com 경로 밑으로 옮겨주면 작동함👍)


마치며

 

이번 상황뿐만 아니라 Spring boot 프로젝트는

 

초기 세팅을 빠르고 간편하게 할 수 있지만,

 

그만큼 설정을 자동으로 해주는 것이기에

 

만드는 개발자조차 모르는 설정도 되어있는 경우가 많다는 것을 알게 되었음.

 

default로 설정이 되어있다고 해서 그냥 넘겨버리면

 

이렇게 다른 곳에서 이슈를 만날 수 있으니 기본기를 충실히 해야겠음.🤗

 

이상 끝~~~!!

728x90