해결된 질문
작성
·
58
0
안녕하세요
다름이 아니라 application.yaml에서 설정값 모두 맞추고, gralde 빌드도 되었습니다
그런데 ArticleApplication 실행하는 부분부터 강의와 다르게 정상실행이 되고, ArticleService에서 OutboxEventPublisher 빈을 못 찾고 있습니다
outbox-message-relay 패키지 내 설정값 혹은 어노테이션 살펴봐도 감이 잘 오지 않습니다
지식공유자님의 코드와 샅샅이 차이점을 찾으려 했으나, 차이는 메세지릴레이 부분 뿐이었습니다
위 빈 문제를 해결하기 위해서 어느 부분을 확인하면 될 지 여쭤보려 합니다
답변 2
0
0
woo님, 안녕하세요!
그런데 ArticleApplication 실행하는 부분부터 강의와 다르게 정상실행이 되고, ArticleService에서 OutboxEventPublisher 빈을 못 찾고 있습니다
해당 메시지만 노출되고, 정상 실행은 된다는 말씀이실까요?
정상 실행이 되는데 위처럼 뜨는건 인텔리제이에서 인식을 잘 못해서 그럴 수도 있을 것 같습니다..!
일단 정상 실행되면 코드 상 문제는 없다고 판단해도 괜찮을 것 같습니다!
실행이 된다면, 정상적으로 동작도 되는 상황 맞을까요?
그런거면 코드에 문제는 없는 것이고, 그냥 진행하셔도 괜찮을 것 같습니다!
멀티모듈 구조에서 타 모듈에 생성된 빈을 인텔리제이에서 인식하지 못하는 것 같습니다.
빌드와 런타임에 이상 없다면 문제 없습니다!
IDE 인식 문제는 별개인 것이고,
실행에 이상 없으면 문구는 딱히 신경 안쓰셔도 됩니다.
문구가 왜 뜨는지는 로컬 환경에 대한 문제라 제가 해결해드리긴 어렵네요..!
빈 등록이 정상적으로 되었는지, Config 클래스에 컴포넌트 스캔 범위가 올바른지, AutoConfig 파일에 오타 없이 잘 설정되었는지 점검해보시면 좋을 것 같네요!
아 아닙니다 메세지도 뜨고, OutboxEventPublisher를 ArticleService에 추가하는 부분부터 넘어가지 못하고 있습니다 ㅠ
그래서 message-relay 패키지나 다른 부분까지 들여다 보는데도 에러 이유를 찾지 못하고 있습니다
앗 동작도 안되는거였군요!?
일단 제가 위에 말씀드린 사항 점검해보시겠어요?
Config 클래스에 애노태이션이랑 스캔 범위도 잘 지정되었는지, auto config 파일이 오타 없는지 등..
그래도 안되신다면,
혹시 제 프로필 누르면 메일이 나오는데, 전체 코드 압축해서 보내주시겠어요?
내일 한번 확인해보겠습니다!
해결되었습니다! 감사합니다
약간 늦었습니다만 말씀대로 조사 후 답변을 달아 보려 합니다
Spring boot에서 동적으로 애플리케이션이 시작될 때 필요한 자동 구성 클래스를 선택할 때 AutoConfigurationImportSelector가 사용됩니다.
이전 스프링 부트 버전에서는 META-INF의 spring.factories 파일에 클래스 정보를 나열하는 식으로 구성했고, 스프링 부트는 이 구성 파일을 읽어서 자동 구성 클래스를 로드하고 각 클래스 조건이 만족된다면 이를 ApplicationContext에 추가한다고 합니다.
2.7 버전부터 이 강의에 사용된 META-INF/spring의 하위 디렉토리에
'org.springframework.boot.autoconfigure.AutoConfiguration.imports' 파일을 등록하여 모듈성과 가독성 및 간결성, 호환성 유지 장점을 제공한다고 합니다
그리고 두 파일이 등록되어 있으면 imports 파일의 우선순위가 높습니다
(출처 : https://inf.run/qumr1)
(그런데 이 부분은 이메일로 주신 답변에서는 3.0 부터 등장하신 방식이라 알려 주셨는데 )
따라서 kuke.board.common.outboxmessagerelay.MessageRelayConfig 가 파일의 내용인데, MessageRelayConfig가 스프링 부트 시작 시 자동 구성 대상으로 식별되어 실행 시간에 ApplicationContext에 등록된다고 이해했습니다.
제가 발생한 오류는 단순하게도 META-INF/spring이 IDE에서 META-INF.spring로 표시된 것을 그대로 사용했기 때문에 MessageRelayConfig 빈을 찾지 못했고 실행시간에 등록하지 못하여 발생한 것이구요.
그리고 Common 모듈의 MessageRelayConfig와 그 아래 OutboxEventPublisher는 ArticleApplication의 컴포넌트 스캔 범위를 따르는데(https://inf.run/FTiBs), 스프링 부트는 @SpringbootApplication이 선언된 패키지와 그 하위 패키지만 스캔하기 때문에 위의 빈들을 등록할 수 없었고, 따라서 수동으로 META-INF의 autoconfiguration 파일 기능 이용해서 수동으로 실행 시간에 등록하게 한 것이었네요
스프링으로 CRUD 기능이나 API를 만드는 것 자체는 어렵지 않으나, 스프링의 방대한 기능을 이해해야 객체지향적으로 코드를 짤 수 있고 다시 방대한 기능들을 뜯어보면 결국 자바 언어에 대한 이해가 필요하다는 것을 점점 느끼고 있습니다
압축 코드까지 확인해가면서 상세히 답변하고 해결하려 노력해 주셔서 감사드립니다!
woo is fixed. the problem was that the "spring" folder should be under "META-INF," but "META-INF.spring" was created instead. If you have trouble solving something, just send the code to my email in my profile!