전체 글 357

RDB 설정 : SQL Mode

RDB에서 DB 서버가 SQL 구문을 어떻게 해석하고, 유효성 검사의 척도를 지정해줄수 있는 방법이다 1. 많이 사용하는 mode1) STRICT_TRANS_TABELS데이터 타입이 맞지 않거나 범위를 벗어난 값을 입력할 때 에러를 발생시킨다- 꺼진 경우 : 숫자가 데이터 타입의 최대치를 벗어난 경우, 최대치만큼만 저장하고 경고한다-> 해당 모드를 켜야 DB가 값 입력을 거부하고 rollback 한다 2) ONLY_FULL_GROUP_BYGroup by 절을 사용할 때 선택목록에 집계 함수나 Group by에 포함되지 않은 컬럼이 있는 경우 쿼리를 거부한다. SQL 표준 준수를 위한 모드 3) NO_ZERO_DATE / NO_ZERO_IN_DATE0000-00-00 같은 유효하지 않은 날짜의 입력 허용 ..

RDB🗂️ 2026.04.06

03. 26 TIL : 도커의 편리함 깨닫기

쉘 스크립트를 사용해 배포하는 과정에서 온갖 시행착오를 겪었다. 너무 불편하고 신경쓸게 한 두개가 아니더라. 1) 리눅스에서 매번 권한설정하기 : sudo 지옥 2) VPC마다 다른 환경과 경로에 맞춰 설정해야 한다(그나마 단일 VPC 환경에서 작업해서 이 정도지, 여러 개로 늘리는 순간 개 헬일듯) 3) 실행 명령어에 환경 변수 설정이 빠졌는지를 매번 확인해야함-> 도커는 도커파일 또는 compose.yaml에 적어두면 신경쓸 필요가 없다 4) 모든 실행 환경에 필요한 언어 등을 직접 설치해야함 : 말해 뭐해, 최악 도커의 단점은..이미지의 용량이 크다는 것?러닝 커브가 좀 있다는 것 정도인 것 같다. 정말 빡센 경험이다.그래도 이런 경험을 해야하는 이유가 있다. 왜 좋다고 하는지를 몸소 깨달을 수 ..

TIL, WIL/TIL📘 2026.03.27

LLM 서비스를 위한 컨텍스트 관리 w. redis

FastApi 프레임워크를 기반으로 한 LLM 서비스를 구현하는 도중, LLM에 쿼리를 보내는 과정에 있어,컨텍스트(대화 문맥, 흐름 ~ 여기서는 LLM이 기존에 사용자와 대화한 내용을 기억하기 위해 필요하다) 관리의 필요성을 느끼게 되었다 * 왜 Redis를 사용해야 할까?1. 빠른 조회 속도 : Redis는 메모리 기반 데이터베이스로서, ms 단위 응답을 보장하기 때문에, 가볍고 빠르게 조회가 가능하다2. TTL : Redis 자체적으로 제공하는 TTL 기능을 통해, 이력에 대해 일정 주기로 삭제를 진행해, 이력에 대한 용량 부담을 덜 수 있다3. (추후 구현 해볼 예정) 벡터 DB 역할에 보다 특화되어, RAG를 위한 시맨틱 캐싱에 활용된다 * 비교해볼만한 다른 DB1) PostgreSQL : 이력..

NoSQL🗂️ 2026.02.11

LLM에 보낼 파일 전처리를 위한 Python 라이브러리 : markitdown

라이브러리 깃허브https://github.com/microsoft/markitdown GitHub - microsoft/markitdown: Python tool for converting files and office documents to Markdown.Python tool for converting files and office documents to Markdown. - microsoft/markitdowngithub.comLLM에게 파일을 읽게 하고자 할때, 기존에는 파일 형식에 따른 제약 사항이 매우 많았다. pandas나 기타 많은 라이브러리를 사용하더라도, 이들은 지정된 파일 형식에만 대응이 가능해 개발자가 고민해야되는 부분이 많았다 이때 활용 가능한 라이브러리가 markitdown이다..

@blocknote 호환 컨텐츠 자동 번역 기능 구현

BlockNote(React를 위해 구축된 오픈소스 기반의 블록 스타일 텍스트 에디터)를 사용하고 있는 상황이었다링크 : https://www.blocknotejs.org/ 번역 기능을 구현해야 했는데, 기존 브라우저에서 제공하는 번역 기능이 blockNote의 텍스트 블록을 텍스트로 취급하지 않아 번역이 되지 않는 문제가 있었다 그래서 블로그 작성 시 다국어 번역본을 자동으로 제공하기 위해 해당 에디터의 구조를 분석하고 번역 수행 로직을 구현했다0. translation 진행 전 호출 위치 선정요구사항에 따라 블로그 게시물을 생성이 완료된 후 번역 대상 컨텐츠에 대한 업데이트(번역 컨텐츠는 별도의 컬럼으로 관리한다)를 수행하고, 본 컨텐츠를 업데이트하는 경우사용자의 필요에 따른 번역 API를 호출하는 ..

자바☕ 2026.01.14

CICD : Github Action + AWS IAM + AWS S3 + AWS EC2 + AWS Code Deploy

0. 사전기술 스택 : Github Action, AWS EC2, AWS Code Deploy, AWS S3, Docker1. appspec.ymlpermission을 작성할 때-object 부분에 경로를 정확하게 작성해야 한다-owner, group의 경우 EC2 내부의 사용자, 그룹을 의미하고 별도로 생성하지 않는 한 ubuntu EC2의 경우 ubuntu가 기본값이다+ 설정하는 방법sudo adduser 사용할사용자이름* (ubuntu) 사용자 이름에 대문자를 사용하고 싶은 경우:sudo adduser --force-badname 사용할사용자이름 *After Install 설정을 통해 deploy.sh를 지정하여 code deploy가 해당 쉘 스크립트를 시작하도록 지정한다2. workflow1. ..

인프라 2025.12.12

단일 인덱스 vs 복합 인덱스 vs 인덱스 머지(Index Merge)

1. 단순 인덱스장점 :- 관리 편함- 쓰기 성능 향상- 저장공간 절약 단점 :- 단일 인덱스만으로 이뤄진 여러 검색 조건의 조회 쿼리 수행 시 하나의 인덱스만 사용하거나 인덱스 머지를 수행- 정렬이 필요한 경우 별도의 정렬 수행해야 한다2. 복합 인덱스 : 생성 순서와 사용 컬럼이 정해진 여러 인덱스 키를 가진 하나의 인덱스장점 :- 해당 순서에 맞는 전체 또는 일부 검색을 수행할 경우, 단일 인덱스와 인덱스 머지보다 빠른 성능으로 조회 가능- 커버링 인덱스 : 검색조건이 모두 복합 인덱스인 경우 테이블을 읽지 않고 인덱스만 읽고 반환하기 때문에 성능 향상- 인덱스 생성 순서와 쿼리 정렬 순서가 일치할 경우 별도의 정렬 작업을 수행할 필요 없음 단점 :- 순서에 맞지않는 검색조건은 인덱스를 타지 못함e..

RDB🗂️ 2025.11.25

10.21 TIL : SQL 필터를 통한 데이터 정제

DB에서 varchar로 저장된 json String에 대해 한글인 경우의 데이터를 추출해야 했다. 다만, 한글이어도 상관없는 키와 한글 데이터가 같이 섞여있기 때문에, 이를 제외하는 것이 중요했다 완성된 쿼리 :WITH W1 AS ( -- 1. 본 테이블에서 한글이 포함된 모든 데이터 조회 SELECT sequence, content FROM board b WHERE b.content RLIKE '[가-힣]'),W2 AS ( SELECT sequence, REGEXP_SUBSTR( b.content -- 패턴: "key":" 뒤에 오며, 한글을 포함하고, 닫는 따옴표 직전까지의 내용을..

TIL, WIL/TIL📘 2025.10.22

09. 25 TIL : Gson 라이브러리의 JsonObject 객체 활용 시 주의할 점

0. 문제 상황-> JsonObject에서 String인 값을 toString() 메서드를 활용해 값을 참조했지만, 왜인지 \"A\" 의 형태로 문자열 안에 따옴표까지 추가된 형태로 데이터를 반환하고 있었다 1. 공부한 내용JsonObject.get(memberName).toString() 메서드를 활용할 때 주의할 사항 가장 기본인 Object의 toString() 메서드는public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}로직을 가지고 있다 이 로직을 통해 호출할 경우, 해당 객체의 "주소"를 문자열로 반환받을 수 있다 이와 다르게 JsonObject의 경우, 상위 객체인 Js..

TIL, WIL/TIL📘 2025.09.25