spring 4

[Infra] 모니터링 서버 구축 (feat. Prometheus, Grafana)

1.  모니터링 서버 도입 목적프로젝트 진행 중에는 대규모 트래픽이 발생하지 않아 모니터링의 필요성을 크게 느끼지 못했습니다. 그러나 최근 JMeter를 활용해 가상의 트래픽을 발생시켜 성능을 측정한 결과, 특정 지점 이후 요청이 실패하는 문제가 발생했습니다. 이때 실패 원인을 정확히 파악할 수 없었고, 향후 대량 트래픽 상황에 대비하기 위해 모니터링 서버의 필요성이 대두되었습니다.기존에는 요청 실패 시 로그를 수작업으로 분석하여 문제를 확인하고 대응했지만, 이 과정은 시간이 오래 걸리고 비효율적이었습니다. 이러한 한계를 극복하고 실시간으로 시스템 상태를 파악하기 위해 모니터링 서버를 구축하고자 합니다. 이번 블로그에서는 모니터링 서버를 구축하는 과정과 이를 통해 유의미한 지표를 분석하는 방법을 소개하겠..

Infra 2024.12.21

[Spring/WebSocket] 실시간 음성 채팅 구현 (feat. Socket.IO)

1. 요구 사항프로젝트 목표: 청각 장애인과 일반 사용자가 음성으로 통화할 수 있다."들리담"은 일반 사용자와 청각 장애인이 실시간으로 음성으로 채팅할 수 있는 플랫폼입니다. 우선, 최초 회원가입 시에 청각 장애인의 목소리를 학습합니다. 이후에 청각 장애인이 일반 사용자와 음성 채팅을 할 때, 청각 장애인에게는 채팅 창이 표시됩니다. 청각 장애인에게 보내는 일반 사용자의 음성은 STT(Speech-To-Text) 과정을 거쳐 텍스트로 변환되어 청각 장애인의 채팅창에 표시됩니다. 청각 장애인은 발화 내용을 채팅창에 입력을 하면 발화 내용이 미리 학습된 본인의 목소리로 변조가 되어 상대방에게 전달됩니다. 이 글에서는 청각 장애인과 일반 사용자의 실시간 통신을 백엔드에서 어떻게 구축하였는지 알아보겠습니다.2...

WebSocket 2024.09.22

[Spring/JPA] delete가 안되는 문제 (feat. 참조 무결성)

1. 문제 상황Spring으로 프로젝트 진행 중에 Note 엔티티를 지우는 API를 구현하고, API가 정상적으로 2XX응답을 반환했지만, JPA가 delete 쿼리를 생성해주지 못하는 문제가 발생했습니다. 테이블 간의 연관관계는 다음과 같습니다. Note 엔티티는 ChatRoom 엔티티와 일대일 연관관계를 가지며 ChatRoom 엔티티는 Member 엔티티와 다대일 연관관계를 가집니다. - Controller (NoteController.java)@DeleteMapping("/{noteId}")@MemberOnlypublic ResponseEntity deleteNote( @Auth final Accessor accessor, @PathVariable("noteId") fina..

JPA 2024.09.15

[Spring] Spring Boot + OpenAI 도입기 (Chat Completions)

1. Chat Completions이란?"Chat Completions" API는 사용자가 대화형 AI 모델과 상호작용할 수 있도록 OpenAI에서 제공해 주는 기능입니다. Chat Completions API는 "사용자가 입력한 대화의 맥락"에 따라 응답을 생성합니다. API는 대화의 맥락을 이해하고 이전 메시지들을 고려하여 다음 응답을 생성합니다. 여기서 "사용자가 입력한 대화의 맥락"에 주목해야 합니다!2. 구현 개요OpenAI의 Completions API 공식 문서를 살펴보면 위와 같이 API 호출 시 보내야 하는 데이터가 크게 두 가지가 있습니다.model: 사용하고자 하는 모델의 이름gpt-3.5-turbo: 2021년 10월 데이터까지 학습gpt-4o-mini: 2023년 10월 데이터까지..

OpenAI 2024.09.01