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

RAG 실습하기

RAG(Retrieval-Augmented Generation)란 대규모 언어 모델(LLM)이 답변을 생성하기 전, 신뢰할 수 있는 지식 베이스를 검색하여 그 정보를 바탕으로 답변을 생성하는 기술이다. 즉 모델 자신의 기억에만 의존하지 않고 외부 데이터베이스를 찾아본 후 그 내용을 기반으로 답변하는 기술이라고 볼 수 있다. ...

멀티 모듈로 DDD의 4계층 구조 구성하기

4계층 구조 (4-Layered Architecture) 프로젝트 링크 해당 프로젝트에서 DDD (Domain-Driven Design) 개발 방식을 최대한 따라가며 개발하고자 한다. DDD 원칙을 구현하기 위한 아키텍처로 보통 4계층 구조를 채택하는데, 해당 계층 구조는 주로 역할과 목적을 기반으로 구분한다. ...

RestDocs로 OpenAPI Swagger 문서 생성하기

Spring Boot 프로젝트를 운영하면서 API 명세서 문서를 RestDocs를 활용해 운영 중인데, OpenAPI Swagger 문서가 필요한 경우가 있다. 나의 경우에는 프론트엔드에서 OpenAPI Generator를 통해 API 스펙을 자동으로 만들어주기 위해서 Swagger 문서가 필요했다. 이번 포스팅에서는 Re...

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 ...