본문 바로가기

분류 전체보기33

PostgreSQL & pgvector 1. 프로젝트 내 구현 사례1.1 PGVector 확장 및 테이블 설정-- init.sql에서 구현된 Vector 설정CREATE EXTENSION IF NOT EXISTS vector;CREATE TABLE prompts ( id UUID PRIMARY KEY, prompt_id VARCHAR(255) UNIQUE NOT NULL, original_prompt TEXT NOT NULL, improved_prompt TEXT, embedding_vector vector(1536), status VARCHAR(50) NOT NULL, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL);-- Vector 유.. 2024. 11. 16.
REPEATABLE READ 1. REPEATABLE READ1.1 결제 서비스에서의 사용@Service@RequiredArgsConstructorpublic class KakaoPayService { @Transactional(isolation = Isolation.REPEATABLE_READ) public PaymentResponse initiatePayment(PaymentRequest request) { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ); TransactionS.. 2024. 11. 15.
CompletableFuture 1. 구현 사례1.1 OpenAI API 비동기 처리public class OpenAiApi { public CompletableFuture chatAsync(String systemPrompt, String userPrompt) { return CompletableFuture.supplyAsync(() -> { if (!rateLimiter.tryAcquire()) { throw new RateLimitException("API 호출 한도 초과"); } return chat(systemPrompt, userPrompt); }); } public CompletableFuture .. 2024. 11. 14.
Rate Limiting 1. 구현된 Rate Limiting 시스템1.1 SimpleRateLimiter 구현public class SimpleRateLimiter { private final int maxRequests; private final long timeWindowMillis; private final AtomicInteger currentRequests; private final AtomicLong windowStartTime; public SimpleRateLimiter(int maxRequests, Duration timeWindow) { this.maxRequests = maxRequests; this.timeWindowMillis = timeWindow.t.. 2024. 11. 13.
Row-Level Lock 1. Row-Level Lock 개념Row-Level Lock은 데이터베이스에서 동시성 제어를 위해 개별 행(row) 단위로 잠금을 수행하는 메커니즘1.1 Lock 종류-- 1. Exclusive Lock (X-Lock)SELECT * FROM paymentsWHERE payment_id = 'P123' FOR UPDATE;-- 2. Shared Lock (S-Lock)SELECT * FROM paymentsWHERE payment_id = 'P123' FOR SHARE;-- 3. 조건부 LockSELECT * FROM paymentsWHERE payment_id = 'P123' FOR UPDATE SKIP LOCKED;1.2 JPA에서의 사용@Lock(LockModeType.PESSIMISTIC_WRI.. 2024. 11. 12.
VACUUM ANALYZE VACUUM ANALYZE 구현 예제1.1 Vector 데이터베이스 관리@Component@RequiredArgsConstructorpublic class CustomVectorRepository { private final JdbcTemplate jdbcTemplate; @Scheduled(cron = "0 0 2 * * *") // 매일 새벽 2시 public void maintainVectorIndex() { try { // VACUUM ANALYZE 실행 jdbcTemplate.execute("VACUUM ANALYZE prompts"); log.info("Successfully completed VACUUM.. 2024. 11. 11.