실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
안녕하세요! 문서 분할 후 ETL 작업 마무리까지 시간이 오래 걸리길래, 프로파일링 해보니 keywordMetadataEnricher 작업 부분에서 가장 많이 시간이 소요되더라구요. 청크 사이즈를 키워 청크 개수를 줄여서 다시 테스트해보니 소요 시간이 많이 줄어들었습니다! 물론 아무래도 cpu나 gpu자원이 좋을수록 더 최적화할 수 있는 것 같긴 한데요ㅠ.ㅠ 어쨌든 작업 중 궁금한 점이 좀 많이 생겨서 질문 드려봅니다! keywordMetadataEnricher 의 기능이 rag의 검색 성능 등 서비스 활용 시에 사용자가 체감할 수 있는 성능을 많이 좌우할까요? keywordMetadataEnricher 사용을 최적화 하는 방법이 궁금합니다..! 저는 청크 개수를 줄였지만 그만큼 트레이드오프도 존재할 거 같아서, 병렬 처리를 한다든가.. 또 다른 방식이 있을 거 같은데 궁금합니다! (이것도 임베딩 모델과 연관 있을까요?) 추가로, 청크 개수를 줄였을 때의 장단점과 실제 서비스나 실무에서 사용 시, 청크 개수와 오버랩 값을 어떻게 결정할 수 있을지 궁금합니다! 실제로 테스트해보면서+경험론적으로 내가 etl 작업하고자 하는 로우 데이터의 성향에 따라 적절한 값을 찾는 것 밖에 없을까요..? 그 외 강사님께서 생각하시는 spring api 사용 시 ETL 파이프라인의 성능(시간 성능과 검색 성능)을 향상시킬 수 있는 방법도 궁금합니다. 시간 성능의 경우, ETL이라는 것은 무조건 시간이 오래 걸릴 수밖에 없는 작업이라는 생각이 들지만요..! 검색하면 논문도 나올만큼 많은 곳에서 얻을 수 있는 지식이지만,,! 강사님의 노하우나 생각도 궁금해서 질문 남겨봅니당. 항상 감사드립니다 : )
안녕하세요 강사님 강의 잘 듣고 있습니다. 섹션 9에서 강의대로 docker에 rabbitmq를 올린 뒤 configservice를 실행했는데 오류가 발생합니다. org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:772) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.passiveDeclarations(BlockingQueueConsumer.java:649) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:636) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1482) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$ AsyncMessageProcessingConsumer.run (SimpleMessageListenerContainer.java:1322) ~[spring-rabbit-3.2.5.jar:3.2.5] at java.base/ java.lang.Thread.run (Thread.java:1447) ~[na:na] Caused by: java.io .IOException: null at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:140) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:136) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:158) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:1033) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:47) ~[amqp-client-5.25.0.jar:5.25.0] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[na:na] at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1201) ~[spring-rabbit-3.2.5.jar:3.2.5] at jdk.proxy2/jdk.proxy2.$Proxy140.queueDeclarePassive(Unknown Source) ~[na:na] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:750) ~[spring-rabbit-3.2.5.jar:3.2.5] ... 5 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:552) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:316) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:152) ~[amqp-client-5.25.0.jar:5.25.0] ... 12 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:528) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:349) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:193) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:125) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:761) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection.access$400(AMQConnection.java:48) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection$ MainLoop.run (AMQConnection.java:688) ~[amqp-client-5.25.0.jar:5.25.0] ... 1 common frames omitted 깃허브의 프로젝트를 그대로 가져오고 어떻게 해도 해결이 안되네요ㅠㅠ 도움 부탁드립니다..
실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
윈도우 환경에서 가상환경 만들기 및 파이썬 MCP 설치 명령어 1. 파이썬 최종 명령어만 정리 인텔리제이 Terminal에서 그대로: py --version py -m venv venv .\venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install mcp python -m pip install mcp_weather_server python -m mcp_weather_server 설치 잘 되었는지 확인 방법 확인은 아래 명령어로 해봐. python --version python -m pip show mcp python -m pip show mcp_weather_server Name , Version , Location 이런 정보가 나오면 설치 성공이야. 그리고 실행했을 때: python -m mcp_weather_server 이 명령어 입력 후 아무 에러 없이 터미널이 멈춘 것처럼 대기 상태 면 정상일 가능성이 높아. MCP 서버가 실행 중이라 입력창이 바로 안 돌아오는 게 맞을 수 있어. 중지하려면: Ctrl + C 정리하면: 1. (venv) 표시 있음 → 가상환경 활성화 성공 2. pip show mcp_weather_server 결과 나옴 → 설치 성공 3. python -m mcp_weather_server 실행 후 에러 없이 대기 → 서버 실행 성공
The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법
claude-squad 실행 후 로그인을 하라, 권한이 없다 등의 메세지가 나오는 경우 어떻게 해결해야 하는걸까요? 강의 초기에 말씀하셨던 클로드는 이미 결제했는데, 추가 결제가 필요한 건가요? claude login을 해도 로그인 창이 뜨지 않습니다ㅠ AI에게 물어본 결과 처음에 결제한 것과, 터미널에서 사용하려는 api 호출 비용은 별도라고 하는데 맞는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 개발자의 꿈을 접고 살아가던 사람입니다. 월드컵 시즌을 만나 영한님의 치킨 디도스 이벤트와 무상태 프로토콜 강의 내용이 떠올라 뜬금없이 취미로 주문 기능 구현 포트폴리오를 만들던 중 일상에서 경험한 것들을 통해 개인정보 유출에도 대응 가능하려면 어떻게 해야하는지.. 소비자가 트라우마를 경험하거나 여러 고충에 대응할 수 있는 방법을 쥐어짜다보니 영한님 강의를 쪽쪽 뽑아먹고 있는데요.. 부족하지만 직접 성의를 담아 만들어보겠습니다. 약속한게 있어서요.. 항상 좋은 강의 감사합니다.
AdminService.java에서 List<MemberDto> admins = memberEntities.stream() .map(MemberEntity::toDto) .collect(Collectors.toUnmodifiableList());Collectors.toList(); 이 코드에서 Collercotrs.toList(); 가 의미가 있는 코드일까요? 줄바꿈도 안되어 있고, 약간 이해가 안되는 문장 같아서 질문드립니다.
안녕하세요, Spring Security 필터 등록 방식에 대해 질문이 있습니다. 현재 이전까지 저는 Security 필터를 아래처럼 new 로 직접 생성해서 사용하고 있습니다. LoginFilter loginFilter = new LoginFilter(authenticationManager, loginSuccessHandler, loginFailureHandler); @Component 를 달아 Bean으로 등록하면 Spring이 Security 필터체인과 별개로 기본 서블릿 필터체인에도 자동 등록해버려서 필터가 두 번 실행되는 문제가 있기 때문입니다. 혹시 최신 Spring Boot 버전에서는 이 문제가 개선되었나요? 아니면 @Component + 생성자 주입 방식을 안전하게 사용할 수 있는 방법이 따로 있는지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 이클립스 사용 중인데 해당 프로젝트 import가 정상적으로 안 되는 것 같습니다. 패키지 생성이 안됩니다.