본문 바로가기

전체 글

(29)
벡터 데이터베이스(ChromaDB)로 똑똑한 법률 문서 검색 시스템 만들기 "교통사고가 났는데 상대방이 신호위반을 했어요. 과실비율이 어떻게 되나요?"이런 복잡한 법률 상황을 설명했을 때, 관련된 법령이나 판례를 정확하게 찾아주는 시스템이 있다면 어떨까요? 단순한 키워드 검색이 아닌, 상황의 의미를 이해하고 가장 적합한 법률 문서를 찾아주는 똑똑한 검색 시스템을 만들어보겠습니다.왜 벡터 데이터베이스인가?기존 검색의 한계전통적인 키워드 검색은 정확히 일치하는 단어만 찾아줍니다. "신호위반"이라는 키워드가 문서에 없으면 검색되지 않죠.벡터 검색의 장점벡터 검색은 의미적 유사성을 기반으로 검색합니다:"신호위반" → "적신호 무시", "교통신호 미준수" 같은 유사한 의미도 찾아냄"과실비율" → "책임 분담", "손해배상 비율" 등과 연결자연어로 상황을 설명해도 관련 법령을 찾아냄실제 ..
Neo4j Graph Database로 기술스택 추천 시스템 만들기 "Java 기술 스택을 가진 사람은 후속 학습으로 어떤 기술을 익힐 수 있고, 어떤 직무에 지원할 수 있는가?"와 같은 다단계 관계 질의를 처리하려면 관계형 데이터베이스로는 복잡한 JOIN이 필요합니다.이런 문제를 해결하기 위해 Graph Database인 Neo4j를 활용해서 기술스택-직무-학습방법 간의 관계를 직관적으로 모델링하고, 사용자의 현재 기술스택을 기반으로 맞춤형 추천을 제공하는 시스템을 구현해보기로 했습니다. By Neo4jInc - 자작, 퍼블릭 도메인, https://commons.wikimedia.org/w/index.php?curid=104622494기술 스택Graph Database: Neo4j (Docker로 로컬 호스팅)백엔드 API: FastAPI + Python그래프 쿼리 ..
Java List.of()로 인한 파일 삭제 실패 해결 Java 프로젝트에서 임시 파일을 관리하던 중, API 호출 후 일부 파일이 삭제되지 않는 문제가 발생했습니다. 서버 스토리지에 파일이 계속 누적되는 현상을 발견했습니다.문제 코드List filesToDelete = List.of( imageFile, videoFile);// UnsupportedOperationException 발생for (File additionalFile : additionalFiles) { filesToDelete.add(additionalFile); // 예외 발생!}원인 분석List.of()는 불변 리스트를 생성합니다. 생성 후 요소를 추가하려고 하면 UnsupportedOperationException이 발생합니다.List list = List.of("a",..
n8n-MCP로 워크플로우 자동 생성하기 + 개발자 포럼 발표 후기 떨리는 마음으로 시작한 첫 강의Microsoft 공인강사 및 Cloud Advocator 주최 개발자 포럼에서 "n8n-MCP로 n8n 워크플로우 자동으로 생성하기"라는 주제로 발표할 기회를 얻었다. 사실 이 발표를 하게 된 계기는 좀 특별했다. 얼마 전 스타트업 서버키트에서 개발자 교육 세션을 진행할 때, 시니어 개발자분들 앞에서 덜덜 떨면서 발표를 너무 못했던 경험이 있었다. 그 때의 아쉬움을 만회하고 싶어서 이번 기회에 도전하게 되었다.현재 대구의 스타트업에서 백엔드 및 DevOps 개발자로 일하고 있는 나에게는 첫 번째 정식 강의였다. 많이 서툴었지만, 준비한 내용을 열심히 전달해보았다.오늘은 내가 발표한 주제에 대해서 포스팅해보려고 한다.n8n 초보자가 마주하는 현실적인 어려움들n8n을 처음 접..
Claude Desktop과 VSCode에 n8n MCP 서버 연결하기 AI 개발 환경에서 워크플로우 자동화 도구인 n8n을 활용하기 위해 Model Context Protocol(MCP) 서버를 Claude Desktop과 VSCode에 연결하는 방법을 상세히 알아보겠습니다. 두 환경의 설정 방식이 다르므로 각각의 특징과 해결 과정을 설명하겠습니다.MCP와 n8n이란? Model Context Protocol(MCP)는 AI 모델이 외부 도구와 서비스에 접근할 수 있도록 하는 개방형 표준입니다.오늘 다룰 n8n은 시각적 워크플로우 자동화 플랫폼으로, 다양한 서비스를 연결하여 복잡한 자동화 작업을 수행할 수 있습니다.n8n MCP 서버를 통해 다음과 같은 기능을 AI 환경에서 직접 사용할 수 있습니다:525개의 n8n 노드 검색 및 탐색워크플로우 템플릿 검색 및 다운로드노드..
Spring Boot에서 @RequiredArgsConstructor로 깔끔한 의존성 주입하기 Spring Boot 개발을 하다 보면 의존성 주입(Dependency Injection)을 위해 생성자를 작성하는 일이 매우 빈번합니다.특히 여러 개의 의존성을 주입받는 클래스에서는 생성자 코드가 길어지고 반복적인 작업이 될 수 있습니다. 이런 문제를 해결해주는 것이 바로 Lombok의 @RequiredArgsConstructor 어노테이션입니다.@RequiredArgsConstructor란?@RequiredArgsConstructor는 Lombok에서 제공하는 어노테이션으로, final 필드나 @NonNull 어노테이션이 붙은 필드에 대해서만 생성자를 자동으로 생성해주는 기능입니다.Spring Boot에서는 주로 final 필드와 함께 사용하여 불변(immutable) 의존성 주입을 구현하는 데 활용..
[AWS에서 GCP로 AI 서버 마이그레이션하기] - 1단계: 인프라 구축 멀티 클라우드 환경 구축이나 비용 최적화, GPU 리소스 확보 등의 이유로 기존 AWS 환경에서 GCP로 일부 워크로드를 마이그레이션하는 경우가 있습니다. 특히 AI/ML 워크로드의 경우 GPU 가용성과 가격 경쟁력 때문에 GCP를 고려하는 팀들이 많습니다. 이번 포스팅에서는 제가 무료 계정에서 테스트용 인프라 구축하고 기존 AWS 백엔드 서버와 통신하기 위해 방화벽을 설정한 과정을 살펴보겠습니다.google 아이콘 출처: Icons8 (https://icons8.com)마이그레이션 목표참고로 추후 목표는 기존 AWS 환경의 백엔드 서버와 GCP의 새로운 AI 처리 서버 간 안전한 통신 구조를 만들고, GPU 인스턴스 배포를 위한 기반을 마련하는 것 입니다.GCP 인프라 구축VPC 네트워크 설계먼저 격리..
AWS EC2에서 Docker 컨테이너의 스토리지 동작 원리 완전 분석 지난 포스팅에서 AWS EC2 인스턴스에 Docker를 설정하고 인스턴스 스토어를 활용하는 방법을 다뤘습니다. 오늘은 한 단계 더 나아가 Docker 컨테이너가 실제로 어떤 스토리지를 사용하는지, 그리고 각 디스크별 역할과 데이터 저장 경로를 실험을 통해 상세히 분석해보겠습니다. EC2 인스턴스의 스토리지 구성 이해하기각 디스크와 파티션 정리EC2 인스턴스에서 사용되는 스토리지를 정확히 이해하는 것이 중요합니다. 흔히 헷갈리는 /dev/root와 실제 EBS 디스크의 관계부터 살펴보겠습니다.# 루트 파티션이 실제로 어떤 장치에 마운트되었는지 확인findmnt -T /# 모든 블록 디바이스 확인lsblk# 모든 마운트된 파일시스템 확인 (EFS 포함)df -hT핵심 포인트/dev/root는 부팅 시점에 커..