🧑🏻💻 프로젝트/beomstory
-
MySQL Full-Text Search 도입기🧑🏻💻 프로젝트/beomstory 2025. 4. 14. 13:13
💣 배경 및 문제 상황초기에는 단순히 사용자들이 "제목" 또는 "설명"에 포함된 키워드로 LIKE '%keyword%' 검색을 수행하도록 설계했지만 문제가 발생🔸 방식SELECT * FROM table_A WHERE title LIKE '%keyword%' OR description LIKE '%keyword%';실제 사용한 쿼리는 아니지만 이런 식으로 사용 🔍 LIKE 문 동작 방식 분석 1️⃣ 예시 테이블 생성CREATE TABLE table_A ( id BIGINT PRIMARY KEY AUTO_INCREMENT, author_id BIGINT, title VARCHAR(255), description VARCHAR(255), created_at TIMESTAMP DEFAULT CUR..
-
Spring data R2DBC🧑🏻💻 프로젝트/beomstory 2025. 4. 13. 13:13
이번에 진행하는 프로젝트가 Kotlin + Coroutine을 이용함에 따라 DB 통신 기술을 비동기로 사용하도록 해야 했습니다.spring-data-jpa를 사용하지 못하기에 database와 비동기로 통신할 수 있는 기술에 대해서 찾아보게 되었습니다.📌 Hibernate ReactiveHibernate Reactive는 JPA의 Reactive 구현체로 JPA 반응형 구현체ORM 기능을 전부 활용 가능!!For a given Session object, nested calls to withTransaction() occur within the same shared transaction context. However, notice that the transaction is a resource loca..
-
🚐 Kafka 메시지 발행 최적화: 동기 방식에서 코루틴까지의 여정🧑🏻💻 프로젝트/beomstory 2025. 3. 24. 17:45
⚠️ 문제 상황트랜잭션 아웃박스 패턴을 사용하여 outbox 테이블에서 배치 단위로 데이터를 가져와 Kafka로 메시지를 발행하는 과정에서 메시지가 실제로 Kafka에 정상적으로 전달되었는지 확인하는 기능이 필요했습니다. 🤔 초기 접근법 - 동기적 처리 KafkaTemplate.send().get()Kafka에 메시지가 정상적으로 전송되었는지를 확인하기 위해 get() 메서드를 사용했습니다.val successfulIds = mutableListOf()pendingMessages.forEach { message -> try { val topic = kafkaProperties.getTopicForOutboxType(message.outboxType) kafkaTempla..