분류 전체보기33 비관적 락(Pessimistic Lock) 구독 시스템을 관리하며 비관적 락을 사용하게 되었다. @Repositorypublic interface SubscriptionRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("SELECT s FROM Subscription s WHERE s.subscriptionId = :subscriptionId") Optional findBySubscriptionIdWithLock(@Param("subscriptionId") String subscriptionId);} 이 코드가 실행될 때 실제로 SQL은 이렇게 동작한다. SELECT * FROM subscriptions s WHERE s.subscription_id = ? FOR UPDA.. 2024. 11. 22. 구독 시스템 - 결제 주기와 구독 서비스 로직 구독 시스템 구현을 위해 구독 상태를 enum으로 관리하고 필요한 Entity들을 설계했다. https://dorightting.tistory.com/36 구독 시스템 - 구독 상태 및 Entity 설계카카오 페이 결제 시스템 구축으로 인해 결제가 가능한 서비스를 개발하게 되었다. 단순 결제를 통해 배운 트랜잭션과 격리 수준에 대해 새롭게 배우고, 결제 시스템 꼭 필요한 멱등성 관리에dorightting.tistory.com Entity 설계 이후에 다시 생각해보니, 단순히 월간 결제 주기만 생각할 게 아니라 연간 결제도 있으면 좋겠다고 생각했다. 그래서 연간에는 할인을 할 수 있는 코드를 구현하고 구독 결제 주기가 월간인지 연간인지도 구분할 수 있도록 해야 했다. 그래서 결제 주기에 대한 enum부.. 2024. 11. 22. 구독 시스템 - 구독 상태 및 Entity 설계 카카오 페이 결제 시스템 구축으로 인해 결제가 가능한 서비스를 개발하게 되었다. 단순 결제를 통해 배운 트랜잭션과 격리 수준에 대해 새롭게 배우고, 결제 시스템 꼭 필요한 멱등성 관리에 대해 학습할 수 있게 되었다. 결제 시스템을 학습하다보니 단순 결제가 아니라 정기 결제도 많이 사용되고 있는데 이건 어떻게 구현할 수 있을까 생각해보다가 구현해보게 되었다. 먼저 구독은 상태 설계가 중요해보였다. 왜냐하면 상태 관리에 따라 결제가 이루어지기 때문에 현재 어떤 상태인지를 체크하고, 상태를 변경하며 관리할 수 있을까에 대해서 고민해보았다. 1. 구독 상태를 관리할 수 있는 enum을 만들어 가능한 모든 구독 상태의 경우의 수를 고려해서 설계했다. public enum SubscriptionStatu.. 2024. 11. 20. 배치 처리 1. 프로젝트 내 배치 처리 구현1.1 구독 갱신 배치 처리@Component@RequiredArgsConstructorpublic class SubscriptionScheduler { @Scheduled(cron = "0 0 0 * * *") // 매일 자정 @Transactional public void processSubscriptionRenewals() { log.info("Starting daily subscription renewal processing"); LocalDateTime now = LocalDateTime.now(); List dueSubscriptions = subscriptionRepository .fi.. 2024. 11. 19. 코사인 유사도 검색 1. 프로젝트 내 구현 사례1.1 CustomVectorRepository에서의 코사인 유사도 검색@Repository@RequiredArgsConstructorpublic class CustomVectorRepository { private final JdbcTemplate jdbcTemplate; public List findSimilarPrompts(double[] vector, double threshold, int limit) { String sql = """ SELECT * FROM prompts WHERE embedding_vector IS NOT NULL AND 1 - (embedding_vector cas.. 2024. 11. 18. IVFFlat **IVFFlat(Inverted File Flat)**은 ANN(Approximate Nearest Neighbor) 검색을 위한 인덱스 방식1. 프로젝트 내 IVFFlat 구현1.1 인덱스 생성-- init.sql에서 구현된 IVFFlat 인덱스 설정CREATE INDEX prompt_vector_idx ON prompts USING ivfflat (embedding_vector vector_l2_ops)WITH (lists = 100);1.2 CustomVectorRepository에서의 활용@Repository@RequiredArgsConstructorpublic class CustomVectorRepository { public List findSimilarPrompts(double[.. 2024. 11. 17. 이전 1 2 3 4 ··· 6 다음