<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>ggamnunq.log</title><description>백엔드 개발을 공부하며 배운 것, 해결한 문제, 프로젝트와 활동 이야기를 기록합니다</description><link>https://ggamnunq.github.io/</link><language>ko</language><item><title>“안녕하세요”가 “안, 안녕, 안녕하…”로 저장되던 문제</title><link>https://ggamnunq.github.io/tech-blog/posts/whylog-transcript-interim/</link><guid isPermaLink="true">https://ggamnunq.github.io/tech-blog/posts/whylog-transcript-interim/</guid><description>WhyLog 회의 기록에 문장 하나가 글자가 늘어나는 조각 여러 줄로 저장됐습니다. 서버는 중간 인식 결과를 is_final 값으로 거르려 했지만 클라이언트는 그 값을 보내지 않았고, 확정 결과는 아예 저장 대상에서 빠져 있었습니다.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><category>troubleshooting</category><category>backend</category><category>WhyLog</category><category>WebSocket</category><category>STT</category><category>메시지 설계</category></item><item><title>실시간 자막이 참가자가 늘수록 늦게 뜨던 문제</title><link>https://ggamnunq.github.io/tech-blog/posts/whylog-subtitle-broadcast/</link><guid isPermaLink="true">https://ggamnunq.github.io/tech-blog/posts/whylog-subtitle-broadcast/</guid><description>WhyLog 실시간 회의에서 자막을 웹소켓으로 참가자 모두에게 보내던 구조가 동기 방식이라 참가자가 늘수록 지연이 커졌습니다. 원인을 짚고 전송 스레드 분리와 ConcurrentWebSocketSessionDecorator로 개선한 과정을 정리했습니다.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><category>troubleshooting</category><category>backend</category><category>WhyLog</category><category>WebSocket</category><category>Spring</category><category>동시성</category><category>성능</category></item><item><title>웹소켓으로 음성을 중계하던 서버를 LiveKit SFU로 바꾼 이유</title><link>https://ggamnunq.github.io/tech-blog/posts/whylog-voice-sfu/</link><guid isPermaLink="true">https://ggamnunq.github.io/tech-blog/posts/whylog-voice-sfu/</guid><description>WhyLog 실시간 음성 회의에서 처음엔 Spring 서버가 웹소켓으로 음성을 중계했습니다. 서버 중계·P2P·MCU·SFU를 비교해 SFU를 고르고, 백엔드는 접속 토큰만 발급하도록 역할을 나눈 과정을 정리했습니다.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><category>backend</category><category>project</category><category>WhyLog</category><category>WebRTC</category><category>LiveKit</category><category>WebSocket</category><category>Spring</category></item></channel></rss>