전체 글
-
MySQL Full-Text Search 도입기💻 computer science/📦 database 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🌱 spring 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 메시지 발행 최적화: 동기 방식에서 코루틴까지의 여정🧑🏻💻 프로젝트 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..
-
CLOVA Studio API 이용하여 답변 받기☁️ infra/Naver Cloud Platform 2025. 3. 7. 13:33
이번 502 포텐데이(비사이드 x 네이버 클라우드) 해커톤에 참여해 CLOVA Studio를 이용한 경험을 작성하고자 한다.http://bside.best/projects/detail/P250219095755 📌 CLOVA Studio 플레이그라운드Naver Cloud 콘솔 > CLOVA Studio 서비스 접속 > 플레이그라운드 왼쪽의 파라미터들을 통해서 하고자하는 기능에 따라 커스텀을 진행하면 된다.해당 화면에 대한 설명은 해당 링크를 통해서 확인하면 된다. ✏️ 프롬포트 작성 만들 서비스의 이름과 페르소나를 부여해주어야 한다.모델에게 성격, 캐릭터 등을 부여하는 작업을 프롬포트 엔지니어링이라고 한다.CLOVA Studio 에서는 프롬포트를 시스템 지시문이라는 이름으로 사용꿈을 해몽하는 모델을 ..
-
NCP를 이용한 프로젝트 배포 - (3) 도메인 및 SSL 적용☁️ infra/Naver Cloud Platform 2025. 2. 28. 01:09
Naver Cloud Platform은 HTTPS/기본 도메인을 제공하지 않아 도메인 지정하고 SSL 적용해보기로 했다. 1️⃣ 개인 도메인 구매NCP Global DNS를 사용하기 위해서는 개인 도메인이 필요하다.개인 도메인은 호스팅 사이트에서 구매할 수 있다. (가비아 에서 구매) 2️⃣ NCP Global DNS에 구매한 도메인 등록NCP 콘솔 > Networking > Global DNS > 도메인 추가 - 구매한 도메인 추가 도메인이 등록이 되면 Global DNS에서 제공하는 네임 서버를 확인할 수 있다.가비아는 자체적으로 DNS 서버를 운영하고 있어 구매한 도메인은 자동으로 가비아의 도메인 서버로 등록된다.따라서, Global DNS에 도메인 등록이 완료되었으면 가비아의 도메인 통합 관리 ..
-
NCP를 이용한 프로젝트 배포 - (2) 배포☁️ infra/Naver Cloud Platform 2025. 2. 28. 00:54
Spring Boot로 개발한 애플리케이션을 Docker Hub에 올리고 이를 NCP 서버에서 자동으로 pull 받아 실행하도록 설정하는 과정또한, GitHub Actions을 이용해 main 브랜치에 코드가 push될 때 자동으로 배포가 이루어지도록 설정 ⤴️ Github ActionsGitHub Actions을 이용하여 CI/CD 파이프라인을 구축하는 설정입니다.name: github-actionson: push: branches: [ "develop", "main" ] pull_request: branches: [ "develop", "main" ]jobs: build: name: build runs-on: ubuntu-latest steps: - uses:..
-
NCP를 이용한 프로젝트 배포 - (1) 서버☁️ infra/Naver Cloud Platform 2025. 2. 28. 00:41
이번에 비사이드 X 네이버 클라우드 502 AI 포텐데이 프로젝트를 진행하면서GithubActions을 이용한 CI/CD 파이프라인으로 자동화하여 NCP(Naver Cloud Platform)이용해 서버를 배포하는 과정을 정리하려고 합니다. 🎯 목표NCP 서버 활용docker 기반 애플리케이션 배포github actions을 활용한 CI/CD 파이프라인 구성 ⚙️ VPC / 서브넷 설정📍 VPC 생성 IP 주소 범위는 사설 IP주소의 범위를 의미하며 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 중에 선택해서 cidr를 조정 📍 서브넷 생성 Internet Gateway 전용 여부에서 "Y"를 선택하면 public이고 "N"를 선택하면 private 🚀 NCP ..
-
👾 MockK와 Mockito🔖 Kotlin 2025. 1. 9. 17:16
📌 Mockito@Testfun `mockito 테스트 예제`() { // given val username = "beomsic" val user = User(username) given(userRepository.save(any())).willReturn(user) // when userService.save(user) // then then(userRepository).should().save(any())}Mockito를 사용하면 BDDMockito를 통해서 BDD 형태로 작성할 수 있다.when은 given으로 verify는 then으로 사용 📌 MockK코틀린에서 테스트 시 Mock 객체를 생성하는 것을 도와주는 라이브러리@Testfun `mockk ..