전체 글 17

LangChain + FAISS + Redis 기반 RAG 챗봇 구현

1. 들어가며이 글은 CrossAlpha를 개발하면서 RAG 기반 챗봇을 구현한 경험을 정리한 글이다.CrossAlpha는 투자자가 "왜 이 거래를 했는가"를 기록하고, 행동 패턴을 분석하여 투자 습관을 개선할 수 있도록 돕는 트레이딩 저널 및 AI 기반 투자 행동 분석 서비스이다. CrossAlpha의 종목 상세 페이지에는 차트 분석 AI 어시스턴트 기능이 있는데, 사용자가 현재 보유 종목의 기술적 지표(RSI, SMA, 볼린저 밴드 등)에 대해 자연어로 질문하면 AI가 답변해주는 기능이다.단순히 LLM을 호출하는 것이 아니라, 기술적 지표 문서를 기반으로 검색하고 현재 종목의 실시간 데이터를 결합하여 답변하는 RAG(Retrieval-Augmented Generation) 구조로 구현했다. 여기에 R..

졸업 프로젝트 2026.05.25

FinanceDataReader + GPT API로 주식 보조 지표 자동 해석하기

*작성일자: 2025-11-26 / 작성자: 컴퓨터공학과 2376302 최지희0. 들어가며어느덧 졸업을 1년 앞둔 컴공과 3학년 학부생이 된 나는, 이번 학기부터 학부 졸업 과제인 캡스톤 팀 프로젝트를 시작하게 되었다. 우리 팀이 진행하는 프로젝트의 주제는 시간과 전문성이 부족한 개인 주식 투자자를 위한, 포트폴리오 기반 투자 행동 인사이트 & 학습 서비스>이다. 이 서비스는 투자에 관심은 있지만 스스로 시장을 해석하기 어렵거나, 자신의 투자 패턴을 객관적으로 파악하기 힘든 초보 투자자를 위한 도구를 만드는 것을 목표로 한다.이를 위해 우리 팀은 크게 세 가지 기능을 설계했다.정성적 분석 – 섹터별 뉴스 맥락 해석 및 톤 분류정량적 분석 – 가격 기반 기술 지표 계산 및 해석 제공투자 행동 학습 로그 –..

졸업 프로젝트 2025.11.26

[스프링 부트] 9장~11장

9. CURD와 SQL 쿼리 종합1. JPA 로깅 설정하기-서버에서 데이터 생성, 조회, 수정, 삭제 등을 요청하면 JPA의 리파지터리가 DB에 해당 요청을 전달함. → 요청을 받은 DB는 SQL로 쿼리를 작성해 테이블 속 데이터를 관리.-쿼리란, DB에 정보를 요청하는 구문으로 INSERT문, SELECT문, UPDATE문, DELETE문이 있음.*JPA 로깅 레벨 설정하기(application.properties 수정)#JPA 로깅 설정#디버그 레벨로 쿼리 출력logging.level.org.hibernate.SQL=DEBUG → 로깅 레벨에는 7단계가 있고, 레벨을 설정하면 해당 레벨 이상의 로그가 출력됨. DEBUG로 설정하면 JPA가 동작할 때 수행되는 SQL 쿼리를 볼 수 있음.*그외 수정사..

[스프링 입문] 6. 회원 관리 예제 ~ 8. AOP

6. 회원 관리 예제 - 웹 MVC 개발1. 회원 웹 기능 - 홈 화면 추가1) 홈 컨트롤러 추가(HomeCotroller 클래스) 2) 회원 관리용 홈(home.html) 2. 회원 웹 기능 - 등록1) 회원 등록 폼 컨트롤러(MemberController 클래스 수정) 2) 회원 등록 폼 html(createMemberForm.html) 3) 웹 등록 화면에서 데이터를 전달 받을 폼 객체(MemberForm 클래스) 4) 회원 컨트롤러에서 회원을 실제 등록하는 기능(MemberController 클래스 수정)@PostMapping public String create(MemberForm form) { Member member = new Member(); member.se..

ECC/Spring 입문 2025.06.21

[스프링부트] 2. MVC 패턴 이해와 실습

1. 뷰 템플릿과 MVC 패턴1) 뷰 템플릿이란-뷰 템플릿은 화면을 담당하는 기술로, 웹 페이지를 하나의 틀로 만들고 여기에 변수를 삽입해 서로 다른 페이지로 보여줌. -1장에서 스프링 부트 프로젝트를 만들 때 추가한 머스테치가 바로 뷰 템플릿을 만드는 도구에 해당. 2) MVC 패턴-MVC 패턴: 웹페이지를 화면에 보여주고(view), 클라이언트의 요청을 받아 처리하고(controller), 데이터를 관리하는(model) 역할을 나누는 기법-컨트롤러: 클라이언트의 요청에 따라 서버에서 이를 처리하는 역할을 함.-모델: 데이터를 관리하는 역할을 함. 2. MVC 패턴을 활용해 뷰 템플릿 페이지 만들기(1) 뷰 템플릿 페이지 만들기: src > main > resources > templates 에 gre..

[스프링부트] 1. 스프링 부트 개요

1. 스프링 부트란- 스프링 부트란 더 쉽고 빠르게 자바 웹 프로그램을 만들 수 있도록 스프링 프레임워크를 개선한 것.개발 환경 설정을 간소화: 스프링은 버전에 따라 동작하는 외부 라이브러리를 일일이 찾아 연동해야 했지만, 스프링 부트는 미리 설정된 스타터 프로젝트로 외부 라이브러리를 최적화해 제공하므로 사용자가 직접 연동할 필요가 x웹 애플리케이션 서버를 내장: 스프링 부트는 내부에 톰캣이라는 웹 애플리케이션 서버를 내장하고 있어 웹 서비스를 jar 파일로 간편하게 배포 가능2. 스프링 부트 개발 환경 설정하기JDK 설치하기IDE 설치하기스프링 부트 프로젝트 만들기(1) Spring Initializr 페이지에 접속하여 스프링 부트 프로젝트를 만든다. (2)다운로드 받은 프로젝트의 압축을 풀고 인텔리제..

[Spring 입문] 4. 회원 관리 예제 - 백엔드 개발

1. 비즈니스 요구사항 정리데이터: 회원 ID, 이름기능: 회원 등록, 조회아직 DB는 선정되지 않았다는 시나리오클래스 의존관계는 다음과 같다. 2. 회원 도메인과 리포지토리 만들기-회원 객체(Member 클래스)package hello.hello_spring.domain;public class Member { private Long id; //시스템이 데이터를 구분하기 위해 저장하는 임의의 아이디 private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { ..

ECC/Spring 입문 2025.05.10

[Spring 입문] 5. 스프링 빈과 의존관계

1. 스프링 빈이란?-스프링 빈이란 스프링 컨테이너에서 관리하는 객체를 말함.-스프링 빈을 등록하는 방식에는 두가지가 있음.컴포넌트 스캔과 자동 의존관계 설정자바 코드로 직접 스프링 빈 등록2. 컴포넌트 스캔과 자동 의존관계 설정-컴포넌트 스캔 원리@Component 애노테이션이 있으면 스프링 빈으로 자동 등록됨. @Controller, @Service, @Repositroy 도 @Component 애노테이션을 포함하므로 스프링 빈으로 자동 등록됨- 4장 예제 스프링 빈 등록해보기 -> 회원 서비스 스프링 빈 등록@Servicepublic class MemberService { private final MemberRepository memberRepository; @Autowired ..

ECC/Spring 입문 2025.05.10

[SQL] 7. 복수의 테이블 다루기

1. 집합 연산1) 집합과 SQL-SELECT 명령을 실행하면 결과로 몇 개의 행이 반환되는데, 이때 반환된 결과 전체를 하나의 집합이라고 생각하면 됨.  →즉, 데이터베이스에서는 테이블의 행이 집합의 요소에 해당함. 2) UNION으로 합집합 구하기-SQL에서 합집합을 계산할 경우에는 UNION 키워드를 사용함.SELECT a FROM sample71_aUNIONSELECT b FROM sample71_b;   →UNION으로 두 개의 SELECT 명령을 하나로 연계해 질의 결과를 얻을 수 있음.-이때 각각의 SELECT 명령의 열 내용은 서로 일치해야 함.    →열 이름이 다르더라도 열 개수와 자료형이 일치하면 됨. -SELECT 명령들을 UNION 으로 묶을 때 나열 순서는 합집합의 결과에 영향을..

ECC/SQL 첫걸음 2025.04.11

[SQL] 6. 데이터베이스 객체 작성과 객체

1. 데이터베이스 객체1) 데이터베이스 객체-데이터베이스 객체란, 테이블이나 뷰, 인덱스 등 데이터베이스 내에 정의하는 실체를 가지는 모든 것을 의미함.-객체에 따라 데이터베이스에 저장되는 내용이 달라짐.-SELECT나 INSERT 등은 클라이언트에서 객체를 조작하는 SQL 명령어이지, 객체가 아님. -객체에는 이름을 붙일 수 있고, 이름을 붙일 때 다음의 제약사항을 따름.기존 이름이나 예약어와 중복하지 않음숫자로 시작할 수 없음언더스코어(_) 이외의 기호는 사용할 수 없음한글을 사용할 때는 더블쿼트(MySQL에서는 백쿼트)로 둘러쌈시스템이 허용하는 길이를 초과하지 않음2) 스키마-데이터베이스 객체는 스키마라는 그릇 안에 만들어짐.-스키마가 서로 다르면 객체의 이름이 같아도 상관 없음.-데이터베이스에 테..

ECC/SQL 첫걸음 2025.04.05