Hello, I’m Gyumyung Lee👋

Backend Programmer, Spring Boot, Java, Kotlin. and I consider it important to record. Such as TIL and Blog.

Latest Posts

Spring Boot + MySQL SQLState 08S01 Communications link failure 에러

이슈 내용 SQLState: 08S01 + Communications link failure 에러 발생 원인 1. JDBC SocketTimeout 시간 초과 JDBC의 socketTimeout은 응답 수신 한도 쿼리가 오래 걸리거나, 결과가 크거나 네트워크가 느려 응답 스트림 수신이 오래 걸리는 경우 드라이버...

Spring의 전략 패턴 심화 - 특정 인터페이스 구현체 주입

전략 패턴에 대한 내용은 해당 포스팅에서 확인할 수 있다. 요구사항 Pay 라는 인터페이스를 구현하는 구현체들 중 특정 조건 별로 구현체를 얻어오는 전략 패턴 문제를 해결해보자. 내용 Pay 인터페이스 정의 및 Pay 인터페이스 구현체는 다음과 같다. public interface Pay { void payAmo...

Nginx client_max_body_size가 10m인데 10MB 넘는 파일이 업로드가 된다?

이슈 내용 Nginx 웹서버를 사용하는 환경에서 배포하고 있는 프론트엔드와 백엔드 서비스가 있다. 두 서비스에서의 Nginx client_max_body_size는 10m으로 설정되어 있다. 하지만 막상 10MB가 넘는 파일도 업로드가 될 때가 있다. 이러한 현상이 가능한 이유를 알아본다. 발생 원인 Nginx의 clien...

413 Error - Spring Boot 프로젝트의 웹서버 별 파일 업로드 크기 제한 설정

이슈 내용 413 Payload Too Large (Request Entity Too Large) 발생 원인 기본적으로 웹 서버는 리소스 사용량을 고려하여 클라이언트가 서버에게 전송하는 최대 데이터 크기를 제한하고 있다. 서비스를 운영하다보면 파일을 업로드해야 하는 상황이 발생하는데, 이 때 전송하려는 최대 데이터 크기가 ...

Spring Redis TTL 만료 시 이벤트 처리하기

일반적으로 Redis는 저장한 데이터의 TTL이 만료되어도 아무것도 알려주지 않는다. 하지만 Keyspace notifications (키 공간 알림) 설정을 키면 keyevent 채널에서 expired 이벤트를 발행한다. keyevent 채널이란? Redis의 Keyspace notifications을 켜면, 키에 어떤 ...

Spring RedisTemplate 조회 중 역직렬화 이슈

배경 Spring에서 RedisTemplate를 활용해 Redis 저장소에 데이터를 저장∙조회할 땐 RedisTemplate 설정에서 정의한 대로 Key:Value 값을 직렬화∙역직렬화한다. RedisTemplate<String, ExampleObject>와 같이 Value 값을 특정한 타입으로 정의한 경우에는 문...

화상통화 서비스 구현하기 (2) - AWS Chime SDK 활용하기

AWS Chime SDK를 활용해 화상통화 서비스 중 화상통화방 참여 기능을 한번 구현해보자. 기술 스택 예제에서 활용한 기술 스택 기준 백엔드: Kotlin + Spring Boot Spring Boot v3.0.6 Kotlin v1.8.21 Java v17 ...

화상통화 서비스 구현하기 (1) - 리서치

화상통화 서비스는 WebRTC 기술을 기반으로 동작한다. 화상통화 기능을 구현하기 위해서는 신호 교환 (Signaling), 세션 관리, TURN/STUN 서버 지원 부분이 필요하다. 일반적인 화상통화 서비스 구성 1. 신호 교환 (Signaling) 서버 구현 WebRTC 피어 간 직접 연결을 위해서는 SDP (세션 기술...

Spring Boot STOMP 기반 웹소켓 구독 및 연결 해제 이벤트 처리

이번 포스팅에서는 Spring Boot 프로젝트에서 STOMP 기반 웹소켓으로 소켓 구독 해제 및 연결 해제 이벤트를 처리하는 방법에 대해 정리해보고자 한다. 들어가기 전에, STOMP? STOMP (Simple Text Oriented Messaging Protocol) 는 메시징 프로토콜 중 하나로, 텍스트 기반 프레임...

Spring Boot 애플리케이션이 시작할 때 이벤트 발생

Spring Boot 애플리케이션을 개발할 때 간혹 애플리케이션이 시작되면서 특정 이벤트를 실행해야 하는 경우가 있다. Spring Boot에서 이러한 작업을 처리하는 2가지 방법을 소개하겠다. 1. CommandLineRunner 또는 ApplicationRunner CommandLineRunner 또는 Applicati...