주요 이력
국가 핵심 망 관리: 대법원 및 조달청 시스템 운영·최적화 전문가
차세대 공공 플랫폼 구축: 지능형 나이스(NEIS) 응용 SW 개발 및 아키텍처 설계
풀스택 전문 교육자: K사 부트캠프 등 다수의 강의를 통한 실전 기술 전수
엔터프라이즈 솔루션 전문가: 대규모 시스템 유지보수 및 고도화 설계 역량 보유
안녕하세요! 개발자로 시작해 지금은 교육자로 활동하고 있는 JSCODE 시니입니다.
국가 중요 시스템을 직접 만들고 운영도 해봤지만, 사실 제가 가장 잘하는 건 "그 어려운 걸 누구나 이해하게 설명하는 것" 입니다.
실무 현장은 원래 거칠고 복잡합니다. 🤯
하지만 배우는 과정까지 그럴 필요는 없잖아요?
여러분이 지금 당장 배우고 싶은 스택이 무엇이든 상관없어요.
실무 현장의 복잡한 기술들을 여러분의 눈높이에 맞춰 아주 쉽게 씹어서 떠먹여 드릴게요! 🍀
머릿속에만 있던 복잡한 생각들이 실제 돌아가는 서비스로 바뀌는 신기한 경험, 저랑 같이 쉽고 재밌게 시작해 봐요!
講義
受講レビュー
- 実務にすぐ適用するSpring AI:Springサービスにチャットボット・RAG・MCPを導入する
- 実務にすぐ適用するSpring AI:Springサービスにチャットボット・RAG・MCPを導入する
- 実務にすぐ適用するSpring AI:Springサービスにチャットボット・RAG・MCPを導入する
- 実務にすぐ適用するSpring AI:Springサービスにチャットボット・RAG・MCPを導入する
- 実務にすぐ適用するSpring AI:Springサービスにチャットボット・RAG・MCPを導入する
投稿
Q&A
콘솔 로그가 깨져나오는데 혹시 방법이 있을까요?
안녕하세요, naje님! JSCODE 시니입니다~!명령문(CLI)으로 배치 실행 시 한글 콘솔 로그가 깨지는 현상 때문에 많이 답답하셨겠어요..! 버전도 맞추시고 여러 방법을 시도해 보셨음에도 해결이 안 되셨군요..!!ㅠㅠ우선 어떤 명령어를 입력하셨는지, 어떤 툴을 사용하고 계신지, 문제화면을 캡쳐해주시면 더 정확하게 확인드릴 수 있을 것 같은데요~!일반적으로 이 문제는 운영체제(특히 Windows)의 기본 인코딩과 자바(JVM)가 사용하는 인코딩 설정이 일치하지 않을 때 자주 발생하곤 합니다!ㅎㅎ 다음 두 가지 방법을 순차적으로 적용해 보시기를 권장해 드릴게요!1. JVM 실행 옵션에 UTF-8 인코딩 추가하기java -jar 명령어로 실행 중이시라면, 명령어 중간에 -Dfile.encoding=UTF-8 옵션을 추가해서 실행해 보세요!예시:java -Dfile.encoding=UTF-8 -jar 파일명.jar주의: 옵션은 반드시 -jar 앞에 위치해야 합니다.2. 터미널(명령 프롬프트/파워쉘) 인코딩을 UTF-8로 변경하기 (Windows 환경)Windows 터미널의 기본 코드페이지가 확장 완성형(CP949)으로 되어 있어 깨질 수 있습니다..!실행 전 터미널에 아래 명령어를 입력해 코드페이지를 UTF-8로 변경해 보세요.명령어:chcp 65001입력 후 "Active code page: 65001"이라는 메시지가 나오면 다시 배치를 실행해 보세요.3. (Gradle로 실행하시는 경우) build.gradle 인코딩 설정 확인만약 gradlew 명령어로 실행 중이시라면, build.gradle 파일 하단에 아래 설정이 있는지 확인하고 추가해 보세요.추가 코드:tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } 만약 위 방법들을 적용한 후에도 계속해서 로그가 깨진다면, 사용 중이신 운영체제(Windows/Mac)와 터미널에 입력하신 정확한 실행 명령어, 캡쳐본을 새로운 질문이나 답글로 남겨주세요! 빠르게 추가 확인을 도와드리겠습니다..!혹시라도 더 빠른답변 원하시면 저한테 1대1 오픈채팅방으로 질문남겨주셔도 됩니다!ㅎㅎ해결이 잘 되실 때까지 함께 찾아볼 테니 너무 걱정 마세요. 화이팅입니다! 💪
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 22
Q&A
자료를 다운로드후 압축을 풀때 오류납니다.
안녕하세요 신이현님~ JSCODE 시니입니다~!혹시 압축 해제하실때 정확하게 어떤 오류가 나는지 알 수 있을까요~?혹시라도 OS를 윈도우로 사용중이시고, 압축해제시에 빈폴더처럼 보이신다면강의노트에 기재해드린 것 처럼 윈도우 기본 프로그램이 아닌 반디집과 같은 프로그램으로 압축해제 진행해보시면 정상적인 파일로 확인하실 수 있을겁니다!ㅎㅎ반디집으로 진행해보시고, 동일한 오류 발생하신다면 다시 질문 게시판에 질문남겨주세요~!ㅎㅎ
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 21
Q&A
노션링크가 접근되지 않습니다.
안녕하세요 naje님! JSCODE 시니 입니다~방금 확인해본 결과 크롬과 사파리에서 정상 접근 되는것으로 확인됐는데,, 혹시 접근이 잘 안되실까요~?다시 한번 접속 해보시고, 잘 안되신다면 1:1 오픈 채팅방으로 캡쳐본 주시면 확인해드리도록 하겠습니다!저는 기술을 습득할 때 '가장 정확한 정보는 언제나 공식 문서에 있다'는 원칙을 가지고 공부하는 편이에요..! 저 역시 Spring Batch를 처음 접했을 때는 어디서부터 어떻게 공부해야할지 막막해서 공식 레퍼런스 문서를 정독하고 시중에 나와있는 책도 많이 참고했던 것 같습니다..!공식 문서 정독처음에 조금 막막하더라도 공식 문서의 'Introduction'과 핵심 개념(Job, Step, ItemReader/Processor/Writer 등)을 꼼꼼히 읽으며 아키텍처를 파악하는 데 시간을 많이 투자했어요..! 구글링과 레퍼런스 활용공식 문서만으로 이해하기 어려운 세부 설정이나 복잡한 예제는 구글링을 통해 해결했습니다. 특히 Stack Overflow나 티스토리 등의 기술 블로그들의 사례를 보면서, 공식 문서의 개념이 실제 코드에서 어떻게 구현되는지 비교해보는 과정을 거치기도 했습니다~!직접 구현과 디버깅문서를 보고 이론을 익힌 뒤에는 작은 기능이라도 직접 코드를 짜봤습니다! 특히 예상대로 배치가 돌지 않을 때, 로그를 찍어보거나 직접 디버깅하면서 직접 체득하는 과정이 실력을 가장 많이 키워준 것 같습니다~!처음부터 너무 완벽하게 다 이해하려고 하기보다는, 강의와 병행하며 공식 문서를 베이스로 해서 곁가지 질문들을 하나씩 찾아가는 방식으로 학습해 보시는걸 추천드릴게요! ㅎㅎ그렇게 하나씩 정복하다 보면 어느새 배치의 흐름이 눈에 들어오실 거예요!기타 문의사항 있으시면 질문게시판이나, 1:1 오픈 카톡방으로 연락주시면 감사하겠습니다!
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 47
Q&A
spring ai에서 RAG ETL 파이프라인 성능 최적화에 대해 질문이 있습니다!
안녕하세요! jyee님~ JSCODE 시니 입니다~직접 프로파일링까지 진행하시고 청크 사이즈 조절을 통해 성능 테스트까지 해보신 점, 정말 훌륭한 접근입니다!ㅎㅎETL 파이프라인을 구축하다 보면 누구나 마주하게 되는 깊이 있는 고민들을 잘 짚어주신것 같아요~!질문해주신 내용들에 대해 하나씩 자세히 답변드리겠습니다!1. keywordMetadataEnricher가 RAG 성능에 미치는 영향결론부터 말씀드리면, 어떤 검색 방식을 사용하느냐에 따라 체감 성능이 크게 달라집니다!• 영향이 적은 경우: 단순히 '벡터 유사도 검색'만 사용할 경우, 키워드 메타데이터는 검색 결과에 큰 영향을 주지 않습니다.• 영향이 매우 큰 경우: 하이브리드 검색이나 메타데이터 필터링을 사용할 때 영향이 크다고 할 수 있습니다.벡터 검색은 의미론적 유사성은 잘 찾지만, 고유명사, 특정 제품명, 약어 등의 '정확한 키워드 매칭'에는 취약할 때가 있습니다..! 이때 추출된 키워드 메타데이터를 기반으로 필터링을 걸거나 BM25 같은 키워드 검색을 병행하면 RAG의 검색 정확도가 비약적으로 상승합니다..!2. keywordMetadataEnricher 최적화 방법 (시간 단축)이 작업이 오래 걸리는 이유는 주로 각 청크마다 키워드 추출을 위해 LLM API를 호출(네트워크 I/O 및 추론 시간이 오래 걸림!)하기 때문입니다. 이를 최적화하는 방법은 다음과 같습니다.• 병렬 처리 (비동기 처리): Spring의 @Async나 CompletableFuture, 혹은 Project Reactor(WebFlux)를 사용하여 청크 단위의 Enrich 작업을 병렬로 처리하면 시간을 획기적으로 줄일 수 있습니다!• 특히 Java 21 버전 또는 그 윗버전의 가상 스레드를 적극 활용하시면 I/O 바운드 작업인 LLM API 호출 성능을 크게 높일 수 있습니다!• 가볍고 빠른 모델 사용: 키워드 추출은 고도의 추론 능력이 필요하지 않은 단순 요약 작업입니다. 따라서 GPT-4o 보다는 GPT-3.5-turbo, GPT-4o-mini, 혹은 Claude Haiku 같은 빠르고 저렴한 모델을 메타데이터 추출용으로 따로 지정해 사용하시는 것을 권장합니다..! 검색해보시면 이런 키워드 추출용으로 자주 언급되는 모델이 있을거에요!ㅎㅎ• 임베딩 모델과의 연관성: 키워드 추출 자체는 텍스트 생성(LLM) 영역이라 텍스트를 벡터로 바꾸는 임베딩 모델의 성능과는 직접적인 연관은 없다고 할 수 있습니다..!ㅎㅎ3. 청크 개수(크기)에 따른 장단점 및 설정 노하우!청크 크기를 키워서 개수를 줄이면 ETL 속도는 빨라지지만, 명확한 트레이드오프가 존재합니다.• 큰 청크의 장점: 문맥이 넓게 유지됨, 파이프라인 처리 속도 향상.• 큰 청크의 단점: 검색의 정밀도 하락. 여러 주제가 섞여 있어 사용자의 질문과 정확히 일치하는 부분을 벡터로 찾기 어려워짐(Lost in the middle 현상 발생 가능성이 높아져요!)• 실무에서의 결정 방법: 수강생분 말씀대로 '데이터의 특성에 따른 경험적/반복적 테스트'가 정답에 가깝습니다🫠 다만 무작정 테스트하기보단 다음 기준을 참고해 보시면 좋을 것 같아요!◦ Semantic Chunking (의미 기반 분할): 만약 마크다운이나 html을 사용하신다면, 단순히 글자 수(Token)로 자르지 않고, 마크다운의 헤더(#), 문단, 혹은 HTML 태그 단위로 논리적인 완결성을 가지도록 자르는 것이 중요할 것 같습니다!◦ 오버랩(Overlap): 보통 청크 사이즈의 10~20% 정도를 줍니다. 문맥이 중간에 뚝 끊기는 것을 방지하기 위함입니다.4. 실무 관점에서의 ETL 파이프라인 성능 향상 노하우ETL은 본질적으로 무거운 작업이 맞습니다. 하지만 구조적으로 최적화할 방법은 많습니다..!!• 시간 성능 (ETL 속도) 향상:◦ 배치 처리(Batching): 임베딩 API를 호출할 때 1건씩 보내지 않고, API가 허용하는 최대 배치 사이즈(예: OpenAI의 경우 한 번에 여러 텍스트 배열 전송)로 묶어서 보내면 네트워크 오버헤드를 크게 줄일 수 있습니다~!◦ Delta Update (증분 업데이트): 전체 문서를 매번 다시 벡터 DB에 넣는 것이 아니라, 해시(Hash)값을 비교하여 변경되거나 추가된 문서만 처리하도록 파이프라인을 설계할수도 있습니다!• 검색 성능 (RAG 품질) 향상:◦ Re-ranking (재정렬): 벡터 검색으로 1차 후보군(Top K)을 넓게 뽑은 뒤, Cross-Encoder 모델 등을 사용해 질문과 문서 간의 관련성을 다시 정밀하게 채점하여 순위를 매기는 방식입니다.◦ Query Transformation: 강의에서 말씀드린 Query Transformation을 사용하는 방법인데요~사용자의 질문을 그대로 검색에 쓰지 않고, LLM을 한 번 거쳐 질문을 더 명확하게 재작성(Query Rewriting)하거나, 가상의 답변을 만들어 그 벡터로 검색(HyDE 기법)하는 방법이 있습니다..!ETL 과정에서 시간이 오래 걸려 답답하셨을 텐데, 이런 성능적 병목을 직접 찾아내고 개선해 보려는 과정 자체가 실무 역량을 키우는 가장 좋은 방법입니다!ㅎㅎ제 답변이 충분한 답변이 되었기를 바라며, 추가로 궁금한 점이 있다면 언제든 질문 남겨주세요! 응원합니다 :)🤍
- いいね数
- 2
- コメント数
- 1
- 閲覧数
- 78
Q&A
[지식 공유] bge-m3 모델 pull 시도할 때 EOF 뜨는 현상 해결
안녕하세요, jyee님~ JSCODE 시니입니다!ㅎㅎ우선 좋은 지식 공유 정말 감사드립니다.ollama pull 과정에서 Error: EOF (End of File)가 발생하며 다운로드가 실패하는 현상은 의외로 많은 분들이 겪는 네트워크/동시성 관련 이슈 중 하나인데 이렇게 공유해주셔서 감사합니다!🥹우선 EOF 에러의 원인은 Ollama 서버가 모델 매니페스트나 레이어를 다운로드할 때, 대용량 파일이거나 일시적인 네트워크 병목으로 인해 서버와의 연결이 예기치 않게 끊어지면서(End of File) 발생하는것이 대부분 입니다..!또는 OLLAMA_MAX_QUEUE=1 환경 변수의 역할때문에도 발생하는데요..!Ollama는 내부적으로 처리하는 동시 요청 큐(Queue)의 크기를 제한하여, 네트워크 요청이 분산되거나 과부하가 걸리는 것을 방지합니다. 즉, 이를통해 다운로드 파이프라인을 단일화하여 안정성을 높여주는 역할을 하기도 합니다.네트워크 환경이나 PC 스펙에 따라 특정 대용량 모델이나 임베딩 모델(bge-m3 등)에서 유독 이 증상이 잦은데, 메뉴바에서 완전히 종료 후 환경 변수를 주어 안정성을 높이는 아주 정확한 해결 방법을 찾아내고 공유해 주셨네요!ollama list 꿀팁까지 적어주셔서 이 에러로 막히는 다른 수강생분들께 정말 큰 도움이 될 것 같습니다.완강까지 파이팅입니다! 혹시 또 강의 들으시면서 흥미로운 점이나 공유하고 싶은 내용이 있다면 언제든 남겨주세요. 감사합니다. 😊
- いいね数
- 1
- コメント数
- 2
- 閲覧数
- 55
Q&A
무한루프 발생 조건에서 설정 오류 라는 게 어떤 케이스일까요?
안녕하세요! jyee님~ JSCODE 시니 입니다~우선 강의를 흥미롭게 들으시면서 코드의 디테일한 부분까지 깊게 고민하고 질문해 주셔서 감사합니다!ㅎㅎ말씀하신 LengthTextSplitter의 무한 루프 방지 로직은 텍스트 파싱 및 청크 분할 알고리즘을 설계할 때 매우 중요한 예외 처리 구간입니다.질문하신 대로 chunkSize보다 chunkOverlap이 더 크게 설정되거나 음수가 들어오는 경우가 '설정 오류'의 대표적인 케이스입니다!조금 더 구체적으로 어떤 원리로 인해 인덱스가 제자리에 머물거나 뒤로 밀려 무한 루프가 발생하는지 몇 가지 케이스로 나누어 설명해 드리자면,1. chunkOverlap이 chunkSize보다 크거나 같은 경우 (가장 흔한 설정 오류 입니다!)우리가 슬라이딩 윈도우 방식으로 텍스트를 잘라낼 때, 다음 청크의 시작점(nextStart)은 보통 현재 시작점(chunkStart)에서 chunkSize를 더한 뒤 chunkOverlap만큼 빼서 결정됩니다.수식 표현: nextStart = chunkStart + chunkSize - chunkOverlap우리는 현재 chunkSize와 chunkOverlap을 직접 주입해주고 있는데요~ 만약 설정을 잘못하여 chunkSize = 100, chunkOverlap = 120으로 지정했다고 가정을 해보겠습니다..!• nextStart = chunkStart + 100 - 120이 되므로, nextStart = chunkStart - 20이 됩니다.• 즉, 다음 시작점이 앞으로 전진하지 못하고 오히려 뒤로 밀리는 현상이 발생합니다.• 조건문(if (nextStart 2. 말씀하신 chunkOverlap 또는 chunkSize가 음수인 경우생성자나 빌더에서 음수 진입을 막는 검증(Validation) 로직이 누락되었다면, 계산식 내에서 음수 연산으로 인해 인덱스가 꼬이게 됩니다..!• 예를 들어 chunkOverlap에 -50 같은 음수가 들어가면 마이너스 마이너스가 되어 오버랩이 아니라 오히려 공백이 생기거나, 반대로 인덱스 역전 현상을 유발하는 엣지 케이스가 생길 수 있습니다.말씀하신 "생성자 설정 시 크기 역전(overlap > size)이나 음수 지정" 케이스가 맞습니다!ㅎㅎ이런 방어적 코드(if (nextStart 정확한 개념을 짚고 계시니 앞으로의 구현 실습도 아주 수월하게 진행하실 수 있을 것 같습니다~!!완강까지 계속 응원하겠습니다. 추가로 궁금한 점이 생기면 언제든 질문 남겨주세요!
- いいね数
- 1
- コメント数
- 1
- 閲覧数
- 54
Q&A
지식공유 (윈도우 설치) [실습] 외부 MCP Server와 연동한 실시간 날씨 조회 - MCP Client 개발
안녕하세요 이준엽님~ JSCODE 시니 입니다.해당 내역 공유해주셔서 감사합니다! ㅎㅎ 명령어도 잘 보이게 글 써주셔서 너무 좋네요~! ㅎㅎ수강하시다가 궁금한점 있으시면 언제든 질문 게시판 이용 부탁드립니다 ~~
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 49
Q&A
자료 다운로드가 안됩니다.
안녕하세요 흑후추님~JSCODE 시니입니다~!강의자료 섹션 맨 상단에 기재해드린 것 처럼 윈도우 OS를 사용하시는 분들의 경우, 윈도우 기본 압축프로그램을 사용하시면 압축파일이 비어보입니다! 반디집과 같은 압축 프로그램을 사용하셔서 압축 해제해보시길 바라고, 시도 후에도 동일증상 있으시면 1대1 오픈채팅방으로 재문의 부탁드립니다~!ㅎㅎ
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 70
Q&A
안녕하세요 졸업프로젝트를 준비하는 학생입니다.!
안녕하세요! 허언증님~ JSCODE 시니 입니다! ㅎㅎ먼저 완강 전에 이렇게 멋진 프로젝트를 기획하시고 질문 남겨주셔서 감사합니다.결론부터 말씀드리면, 수강생님이 기획하신 'RAG 기반 의사소통 피드백 챗봇'은 강의 완강하시면 충분히 구현 가능하며, 아주 훌륭한 프로젝트 주제입니다!RAG(검색 증강 생성)를 활용하면 일반적인 챗봇을 넘어, 특정 도메인 지식이나 대화 가이드라인을 기반으로 LLM이 보다 정확하고 의미 있는 피드백을 주도록 만들 수 있습니다. 강의 후반부로 가실수록 RAG의 핵심인 외부 데이터 검색과 Tool Calling 등을 결합한 프롬프트 엔지니어링을 스프링 환경에서 어떻게 매끄럽게 연결하는지 감을 잡으실 수 있을 거예요.우선은 강의를 끝까지 완강하시면서 Spring AI의 전체적인 흐름과 Vector DB 활용법을 익히시는 것을 추천해 드립니다. 이후에 작은 기능(예: 단순 텍스트 입력에 대한 1차 피드백)부터 차근차근 살을 붙여나가시면 원하시는 애플리케이션을 멋지게 완성하실 수 있을 겁니다! ㅎㅎ학습하시다가 구현과 관련해 막히는 부분이 생기면 언제든 다시 질문 남겨주세요. 완강과 프로젝트 완성까지 응원하겠습니다! 화이팅하세요~!!
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 79
Q&A
소스코드 빈 파일 문의드려요
안녕하세요! 다연님~ JSOCDE 시니 입니다!해당 파일이 Mac OS에서 작성된 파일이라윈도우 기본 압축 해제 프로그램으로 압축 해제시 빈 파일로 보일 수 있습니다!이런 경우 기본 프로그램이 아닌 반디집으로 압축해제 시도 하시면 정상적으로 파일 확인하실 수 있습니다~!조치 진행해보시고, 추가적으로 문의사항 생기시면 연락주시길 바랍니다!완강까지 화이팅입니다~ +1:1 질문방에서 해결 완료 확인하였습니다~!
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 76




