Home

0

RAG (Retrieval-Augmented Generation) 개요

RAG란?RAG(Retrieval-Augmented Generation)는 대규모 언어 모델(LLM)의 응답을 개선하기 위해 외부 지식 베이스에서 관련 정보를 검색하여 활용하는 기술입니다. RAG의 필요성 지식 최신성 문제 해결 LLM은 학습 시점까지의 데이터만 알고 있음 최신 정보나 실시간 데이터 제공 불가 RAG를 통해 최신 문서/데이터 참조 가능 환각(Hallucination) 감소 LLM이 사실이 아닌 내용을 생성하는 문제 외부 신뢰할 수 있는 소스 참조로 정확성 향상 도메인 특화 지식 제공 기업 내부 문서, 특정 도메인 지식 활용 재학습 없이 특정 분야 전문성 확보 비용 효율성 모델 재학습(Fine-tuning) 대비 저렴 데이터 업데이트가 용이 RAG 작동 원리기본 워크플로우사용자 질문 ↓1. 질문 임베딩 생성 ↓2. 벡터 DB에서 유사 문서 검색 ↓3. 검색된 문서 + 질문을 LLM에 입력 ↓4. LLM이 컨텍스트 기반 답변 생성 ↓최종 답변 제공 핵심 구성 요소 문서 처리 (Document Processing) 문서 수집 및 전처리 청크 분할 (Chunking) 임베딩 생성 검색 시스템 (Retrieval System) 벡터 데이터베이스 유사도 검색 알고리즘 하이브리드 검색 (키워드 + 벡터) 생성 모델 (Generation Model) LLM (GPT, Claude, Llama 등) 프롬프트 엔지니어링 컨텍스트 윈도우 관리

0

PostgreSQL - Top N 쿼리 확인 방법

pg_stat_statements를 이용한 Top N 쿼리 확인PostgreSQL에서 가장 많이 실행되거나 느린 쿼리를 확인하는 방법을 정리합니다. 1. pg_stat_statements 확장 설치-- 확장 설치CREATE EXTENSION IF NOT EXISTS pg_stat_statements;-- 설치 확인SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'; 2. postgresql.conf 설정# postgresql.conf 파일에 추가shared_preload_libraries = 'pg_stat_statements'# 추적할 쿼리 수 (기본값: 5000)pg_stat_statements.max = 10000# 쿼리 추적 모드 (top: 최상위 쿼리만, all: 중첩 쿼리 포함)pg_stat_statements.track = all 설정 변경 후 PostgreSQL 재시작 필요: # 재시작sudo systemctl restart postgresql# 또는pg_ctl restart 3. 실행 횟수가 많은 Top N 쿼리

0

MySQL - Top N 쿼리 확인 방법

MySQL에서 가장 많이 실행되거나 느린 쿼리를 확인하는 방법을 정리합니다. Log 파일 기반 Top N 쿼리 확인5. Slow Query Log 설정-- Slow Query Log 활성화SET GLOBAL slow_query_log = 'ON';-- Slow Query 기준 시간 설정 (초 단위)SET GLOBAL long_query_time = 2;-- Slow Query Log 파일 위치 확인SHOW VARIABLES LIKE 'slow_query_log_file';-- 인덱스를 사용하지 않는 쿼리도 로깅SET GLOBAL log_queries_not_using_indexes = 'ON'; SHOW VARIABLES LIKE 'slow_query%';SHOW VARIABLES LIKE 'long_query_time'; SHOW VARIABLES LIKE 'slow_query_log_file'; 6. Slow Query Log 분석 (mysqldumpslow)# 가장 느린 쿼리 10개mysqldumpslow -s t -t 10 /path/to/slow-query.log# 가장 많이 실행된 쿼리 10개mysqldumpslow -s c -t 10 /path/to/slow-query.log# 평균 실행 시간이 긴 쿼리 10개mysqldumpslow -s at -t 10 /path/to/slow-query.log Performance Schema를 이용한 Top N 쿼리 확인

0

Ubuntu Linux에 OpenVPN 설치 및 설정 가이드

OpenVPN 개요OpenVPN은 오픈소스 VPN 솔루션으로, 안전한 원격 접속과 네트워크 간 통신을 제공합니다. SSL/TLS를 사용하여 강력한 암호화를 지원하며, 방화벽을 통과하기 쉬운 구조로 설계되어 있습니다. 1. OpenVPN 서버 설치# 패키지 목록 업데이트sudo apt updatesudo apt upgrade -y# OpenVPN 설치sudo apt install openvpn -y# Easy-RSA 설치 (인증서 관리 도구)sudo apt install easy-rsa -y# OpenVPN 버전 확인openvpn --version# 설치된 파일 확인dpkg -L openvpn | grep bin 2. PKI (Public Key Infrastructure) 설정Easy-RSA 디렉토리 설정# Easy-RSA 디렉토리 생성make-cadir ~/openvpn-ca# 디렉토리 이동cd ~/openvpn-ca CA (Certificate Authority) 설정# vars 파일 편집nano vars# 다음 내용 수정 (예시)set_var EASYRSA_REQ_COUNTRY "KR"set_var EASYRSA_REQ_PROVINCE "Seoul"set_var EASYRSA_REQ_CITY "Seoul"set_var EASYRSA_REQ_ORG "MyCompany"set_var EASYRSA_REQ_EMAIL "admin@example.com"set_var EASYRSA_REQ_OU "IT Department"

0

Fail2ban 설치 및 사용 가이드

Fail2ban 개요Fail2ban은 로그 파일을 모니터링하여 악의적인 활동(무차별 대입 공격, 포트 스캔 등)을 탐지하고 자동으로 차단하는 침입 방지 소프트웨어입니다. 주요 기능 로그 파일 실시간 모니터링 정규표현식 기반 패턴 매칭 자동 IP 차단 (iptables, firewalld, ufw 등) 시간 기반 자동 차단 해제 이메일 알림 기능 다양한 서비스 지원 (SSH, Apache, Nginx, MySQL 등) 작동 원리 로그 모니터링: Fail2ban은 지정된 로그 파일을 실시간으로 감시합니다. 패턴 매칭: 설정된 정규표현식 패턴(filter)과 로그를 비교합니다. 실패 횟수 카운트: 특정 IP에서 실패가 발생할 때마다 카운트를 증가시킵니다. 차단 실행: 설정된 임계값(maxretry)을 초과하면 해당 IP를 차단합니다. 자동 해제: 설정된 시간(bantime) 후 자동으로 차단을 해제합니다. 1. 설치Ubuntu/Debian# 패키지 업데이트sudo apt update# Fail2ban 설치sudo apt install fail2ban -y# 서비스 시작 및 자동 시작 설정sudo systemctl start fail2bansudo systemctl enable fail2ban# 상태 확인sudo systemctl status fail2ban

0

[Network] NAT Gateway 란?

NAT Gateway 란?NAT Gateway는 Network Address Translation의 약자로, 프라이빗 네트워크의 리소스가 인터넷과 통신할 수 있도록 IP 주소를 변환해주는 관리형 네트워크 서비스입니다. 주로 프라이빗 서브넷의 인스턴스들이 외부 인터넷에 접근할 수 있게 하면서도, 외부에서 직접적인 인바운드 연결은 차단하는 역할을 합니다. NAT의 기본 개념NAT (Network Address Translation)NAT는 IP 패킷의 송신지 또는 목적지 IP 주소를 변환하는 기술입니다. 프라이빗 IP → NAT → 퍼블릭 IP10.0.1.5 → NAT → 203.0.113.510.0.1.10 → NAT → 203.0.113.510.0.1.15 → NAT → 203.0.113.5 NAT가 필요한 이유 IPv4 주소 고갈 문제 해결 제한된 퍼블릭 IP 주소를 효율적으로 사용 하나의 퍼블릭 IP로 여러 프라이빗 IP 리소스 관리 보안 강화 내부 네트워크 구조 은닉 외부에서 직접 접근 차단 유연한 네트워크 구성 내부 IP 체계를 자유롭게 설계 외부 네트워크 변경 시 내부 영향 최소화 NAT Gateway vs NAT InstanceNAT Gateway

0

[쿠버네티스] - Health Probes (Startup, Liveness, Readiness)

개요쿠버네티스는 컨테이너의 상태를 모니터링하고 관리하기 위해 세 가지 유형의 Health Probe를 제공합니다: Startup Probe: 컨테이너가 시작되었는지 확인 Liveness Probe: 컨테이너가 정상적으로 실행 중인지 확인 Readiness Probe: 컨테이너가 트래픽을 받을 준비가 되었는지 확인 Probe 메커니즘모든 Probe는 다음 세 가지 방식 중 하나로 동작합니다: 1. HTTP GET 요청httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome scheme: HTTP # or HTTPS 지정된 경로로 HTTP GET 요청을 보냅니다 200-399 범위의 상태 코드를 반환하면 성공 그 외의 코드는 실패로 간주 2. TCP Socket 연결

0

[QueryDSL] Transform 사용 시 HikariCP Connection Leak 문제 해결

QueryDSL Transform 사용 시 HikariCP Connection Leak 문제QueryDSL의 transform() 메서드는 쿼리 결과를 그룹화하고 Map으로 변환할 때 매우 유용한 기능입니다. 하지만 부적절하게 사용할 경우 심각한 데이터베이스 커넥션 누수(Connection Leak)를 발생시킬 수 있습니다. 문제 상황운영 중인 서비스에서 다음과 같은 에러가 발생했습니다: HikariPool-1 - Connection is not available, request timed out after 30000ms. DB 커넥션 수는 POD 당 20개(max-connection-pool) 로 충분한 상태였고, 트랜잭션이 길게 잡히는 슬로우 쿼리도 없는 상황이라 아무래도 Connection Leak 이 발생하는 상황이라 생각 했습니다. 원인 분석QueryDSL의 transform() 메서드 특징문제의 원인은 QueryDSL의 transform() 메서드의 내부 동작 방식에 있었습니다.

0

[Spring Boot] 애플리케이션 Warm Up 가이드

참고 - IF(kakao) 2022 https://www.youtube.com/watch?v=CQi3SS2YspY 🤔 Warm Up이 필요한 주요 이유Spring Boot 와 같은 JAVA 애플리케이션을 최초 실행하거나 재배포할 때, 첫 번째 요청이 다른 요청들에 비해 현저히 느린 현상을 경험한 적이 있을 것입니다. 이러한 현상을 Cold Start 문제라고 하며, 이를 해결하기 위해 Warm Up이 필요합니다. 1. JVM 의 JIT (Just-In-Time) 컴파일Java 애플리케이션은 바이트코드 로 컴파일되어 실행되며, JVM은 런타임에 자주 사용되는 코드를 네이티브 코드 로 최적화합니다. 초기에는 인터프리터 모드 로 실행되어 바이트 코드를 한줄 한줄 해석하기 때문에 성능이 상대적으로 낮습니다. JIT 컴파일러가 자주 실행되는 코드 핫스팟(Hot Spot) 을 식별하고 최적화된 네이티브 코드로 전환됩니다. 때문에 애플리케이션 구동 후 JIT 컴파일러가 핫스팟(Hot Spot) 을 식별하고 최적화하는 전까지는 상대적으로 느릴 수 있습니다.

0

Git - Git Hook으로 워크플로우 자동화하기

Git Hook이란?Git Hook은 Git에서 특정 이벤트가 발생했을 때 자동으로 실행되는 스크립트입니다. 커밋, 푸시, 머지 등의 작업 전후에 사용자 정의 스크립트를 실행하여 코드 품질 검사, 테스트 자동화, 메시지 검증 등 다양한 워크플로우를 자동화할 수 있습니다. Git Hook의 종류Git Hook은 크게 클라이언트 훅(Client-side Hooks) 과 서버 훅(Server-side Hooks) 으로 나뉩니다. 클라이언트 훅 (Client-side Hooks)개발자의 로컬 저장소에서 실행되는 훅입니다. Commit 관련 훅 pre-commit: 커밋 메시지 작성 전 실행 (코드 린트, 테스트 실행) prepare-commit-msg: 커밋 메시지 에디터가 열리기 전 실행 (메시지 템플릿 설정) commit-msg: 커밋 메시지 검증 (메시지 형식 확인) post-commit: 커밋이 완료된 후 실행 (알림 전송) Merge/Rebase 관련 훅