Transactional Outbox 모듈 적용에서 빈이 실습과 다릅니다
안녕하세요
다름이 아니라 application.yaml에서 설정값 모두 맞추고, gralde 빌드도 되었습니다
그런데 ArticleApplication 실행하는 부분부터 강의와 다르게 정상실행이 되고, ArticleService에서 OutboxEventPublisher 빈을 못 찾고 있습니다

outbox-message-relay 패키지 내 설정값 혹은 어노테이션 살펴봐도 감이 잘 오지 않습니다
지식공유자님의 코드와 샅샅이 차이점을 찾으려 했으나, 차이는 메세지릴레이 부분 뿐이었습니다

위 빈 문제를 해결하기 위해서 어느 부분을 확인하면 될 지 여쭤보려 합니다
답변 2
0
same problem here, did you found the solution?
2
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!
0
woo님, 안녕하세요!
그런데 ArticleApplication 실행하는 부분부터 강의와 다르게 정상실행이 되고, ArticleService에서 OutboxEventPublisher 빈을 못 찾고 있습니다
해당 메시지만 노출되고, 정상 실행은 된다는 말씀이실까요?
정상 실행이 되는데 위처럼 뜨는건 인텔리제이에서 인식을 잘 못해서 그럴 수도 있을 것 같습니다..!
일단 정상 실행되면 코드 상 문제는 없다고 판단해도 괜찮을 것 같습니다!
0
실행이 된다면, 정상적으로 동작도 되는 상황 맞을까요?
그런거면 코드에 문제는 없는 것이고, 그냥 진행하셔도 괜찮을 것 같습니다!
멀티모듈 구조에서 타 모듈에 생성된 빈을 인텔리제이에서 인식하지 못하는 것 같습니다.
빌드와 런타임에 이상 없다면 문제 없습니다!
IDE 인식 문제는 별개인 것이고,
실행에 이상 없으면 문구는 딱히 신경 안쓰셔도 됩니다.
문구가 왜 뜨는지는 로컬 환경에 대한 문제라 제가 해결해드리긴 어렵네요..!
빈 등록이 정상적으로 되었는지, Config 클래스에 컴포넌트 스캔 범위가 올바른지, AutoConfig 파일에 오타 없이 잘 설정되었는지 점검해보시면 좋을 것 같네요!
0
아 아닙니다 메세지도 뜨고, OutboxEventPublisher를 ArticleService에 추가하는 부분부터 넘어가지 못하고 있습니다 ㅠ
그래서 message-relay 패키지나 다른 부분까지 들여다 보는데도 에러 이유를 찾지 못하고 있습니다
1
앗 동작도 안되는거였군요!?
일단 제가 위에 말씀드린 사항 점검해보시겠어요?
Config 클래스에 애노태이션이랑 스캔 범위도 잘 지정되었는지, auto config 파일이 오타 없는지 등..
그래도 안되신다면,
혹시 제 프로필 누르면 메일이 나오는데, 전체 코드 압축해서 보내주시겠어요?
내일 한번 확인해보겠습니다!
1
해결되었습니다! 감사합니다
약간 늦었습니다만 말씀대로 조사 후 답변을 달아 보려 합니다
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를 만드는 것 자체는 어렵지 않으나, 스프링의 방대한 기능을 이해해야 객체지향적으로 코드를 짤 수 있고 다시 방대한 기능들을 뜯어보면 결국 자바 언어에 대한 이해가 필요하다는 것을 점점 느끼고 있습니다
압축 코드까지 확인해가면서 상세히 답변하고 해결하려 노력해 주셔서 감사드립니다!
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
31
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
47
2
게시글 테스트 데이터 삽입
0
50
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
104
2
좋아요 기능 정합성 보장 방법
0
96
2
좋아요 동시성처리 최적의 선택?
1
135
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
92
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
59
1
조회수 조회 로직 질문
1
67
2
비로그인 유저도 어뷰징 방지 정책
1
72
2
CommentServiceTest의 테스트 로직 질문
0
54
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
74
2
path 쿼리 관련 질문드립니다!
0
60
2
antigravity 에디터를 쓰신다면 종료해주세요
1
123
0
프로젝트 구조
0
88
2
article_like_count api test
0
78
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
104
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
91
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
92
3
jpa ddl-auto none을 하는 이유와 join 방법
0
97
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
90
2
커서 기반 페이지네이션 과 무한 스크롤링
0
110
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
97
2
멀티 모듈이 아닌 MSA 환경에서 common
0
156
2





