본문 바로가기

전체 글97

AI 인덱싱 과정 통신중, 502 BAD Request 발생 문제 * 문제의 상황- 위 과정으로 User가 인덱싱 요청을 보내면 ( 지금은 권한 상관없이 가능하지만, 추후에 Admin만 인덱싱 하도록 수정 예정 )Spring -> Python -> Spring 으로 요청을 전달받아서 인덱싱을 진행함. 자세히 풀어보면 0. Client -> 스프링 부트 서버 호출 * POST /api/ai/index-revies 요청이 스프링 부트(8080) 으로 들어옴1. 스프링 부트 서버 -> Python AI 서버 호출 * AIController는 WebClient를 사용해 Python AI 서버 (8080)의2. Python AI 서버 -> 스프링 부트 서버 재호출 ( 역호출 ) * Python 서버는 인덱싱할 데이터를 얻기 위해, 다시 스프링 부터 서버의 /api/sticker.. 2025. 12. 16.
DB 복잡한 함수 모음집 * COALESCE() 함수. 스펠링에 유의할 것where COALESCE(컬럼, 1) = 1 as fixed - 예시는 where 절로 들었지만 select 절에서도 가능한 명령어- 일시적으로 가상 fixed 라는 컬럼을 만든 것이다. - null이 아닌 값을 반환하는데 , 전부 null 이면 제일 오른쪽 값을 반환하는 것이다.- 그래서 실제로 where 절에 쓰인 COALESCE() 함수가 서브쿼리 느낌이 난다는 것인데.. 서브 쿼리는 아니다. SELECT *FROM ( SELECT if, COALESCE(score, 1) AS fixed_score FROM user) AS twhere t.fixed_score = 1 - 이게 진짜 FROM 절에 서브쿼리르 사용해서 뽑아오는 쿼리문. * DATE.. 2025. 12. 15.
부동산 어플리케이션에 적용할 AI 기능에 대한 정리 * Intro* 우선 들어가기 전에 요즘 AI가 관심도가 주목되는 세상에 부동산 어플리케이션의 백엔드 ( 서버 )프론트엔드 ( 화면 ) 2개로 끝내기에는 아쉽다는 생각이 들었다. * 따라서 추가적으로 팀원과 기획한 어플리케이션에 각 매물 ( dealNo ) 에 대한 긍정적, 부정적 스티커를달 수 있게 하였다. 추가적으로 스티커에 대한 개인적인 의견을 db에 저장하도록 하였다. * 그렇게 저장된 매물에 대한 스티커 정보 + 개인적인 의견을 토대로 챗봇을 만들보자가 필자의 의견이다.* 따라서 LLM을 학습할 방법에는 여러가지가 있지만 ( Prompt Engineering ,find-tuning, RAG, AI-Agent )간단하게 DB에 정보만 업데이트 해주면 최신화가 되는 유지보수성이 RAG를 선택했다. .. 2025. 12. 14.
인덱스(index) 란? 1. 인덱스(Index) 란?[ 인덱스(index)란? ] - 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조.만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 거린다. 그렇기 때문에 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. - 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상됨.그러한 이유는 해당 연산을 수행하려면 대상을 조회해야만 작업을 할 수 있기 때문임. // Mang이라는 이름을 업데이트 .. 2025. 12. 12.
[SpringSecurity] @AuthenticationPrincipal 어노테이션에 대해서 * AuthenticationPrincipal 어노테이션이란 ?- 현재 로그인한 사용자 객체 ( Principal ) 을 컨트롤러의 파라미터로 쉽게 주입받을 수 있게 해주는 기능- 복잡한 SecurityContextHolder 코드를 작성하지 않아도 되어 코드가 매우 깔끔해진다. 1. 사용 전후 비교 (Why?)- 위 어노테이션이 왜 좋은지 알기 위해, 옛날 방식과 현재 방식을 비교 과거 (Old Way)- 로그인한 사용자 정보를 얻으려면 SecurityContextHolder에 접근해서 복잡한 과정을 거쳐야 함.- 게다가 형 변환(Casting)까지 필요함 @GetMapping("/me")public ResponseEntity getMyInfo() { // 1. SecurityContextHol.. 2025. 12. 10.
MySQL 쿼리 속도 저하 및 최적화 이번에 부동산 어플리케이션을 만들일이 생겨서 DB에 부동산 값들을 넣어두고 적절한 Select 문을 호출해 가져오는 식으로구현을 했다.그 결과 전국 모든 매물을 DB에 넣고 가져오는 과정에서 쿼리문 성능이 많이 저하되서 속도가 상당히 느려짐을 보였다. SELECT hd.no, hi.apt_seq, hd.apt_dong, hd.floor, hd.deal_year, hd.deal_month, hd.deal_day, hd.exclu_use_ar, hd.deal_amount, hi.apt_nm, hi.jibun, hi.road_nm, hi.build_year, hi.latitude, .. 2025. 12. 9.