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

2025 넥스트라이즈 서울 이곳은

NextRise 2025 Seoul 회사에서 단체 워크샵으로 코엑스에서 진행한 NextRise 2025 Seoul 박람회에 방문했다. NextRise는 벤처 및 스타트업 기업가, 엑셀러레이터, 벤처 투자사, 산업계 리더들이 네트워크를 형성하고, 인사이트를 공유하며 혁신을 선보이는 스타트업 박람회라고 소개하고 있다. 참가...

Presigned URL 그것은 새로운 파일 전송의 시작이었다.

Pre-signed URL을 사용해보자 Pre-signed URL 이란 Pre-signed (미리 서명된) URL 이란 AWS 자원의 접근 권한을 제공하기 위해서 사용되는 이전에 미리 적절한 권한을 가진 자격증명으로 서명된 URL을 말한다. 회사에서 기존에는 S3에 저장된 파일에 대한 정보를 클라이언트에게 전달해줄 때 Bl...

MyBatis가 내 Record를 외면했다. — 매핑 좀 하자니까!

이슈 내용 MyBatis에는 조회 쿼리 결과가 여러 rows로 조회되는 데이터를 객체의 Collection 필드에 담을 수 있는 기능이 있다. 바로 <resultMap/> 태그 내 <collection/> 태그이다. 예를 들어 조회 결과가 이렇게 나오는 쿼리가 있다고 가정하자. ...

TransactionalEventListener가 만든 동기 이벤트는 모든 연결을 점유하고, 그 속에서 나는 갇혀버렸다

이슈 내용 TransactionalEvent 처리를 동기로 하는 경우 이벤트를 발행하는 쪽의 트랜잭션이 Connection을 계속 점유한다는 이슈를 알게 되어, 이에 대해 정리해보려 한다. 발생 원인은? Connection은 트랜잭션 동기화 자원이 모두 정리될 때까지 보유한다. 따라서 TransactionalEvent가 ...

직렬화 케이스 SnakeCase 👉 CamelCase 변환 이슈

일반적인 직렬화 케이스 변환 이슈 (CamelCase 👉 SnakeCase) 일반적으로 Java 또는 Kotlin 언어로 Spring 기반의 백엔드 작업을 하면, 객체의 필드를 카멜 케이스 (CamelCase)로 정의하는 것이 일반적이다. 그리고 만약 클라이언트 측에서 서버 측으로부터 전달받는 데이터를 스네이크 케이스 (Sn...

그가 테스트 컨테이너를 소환했을 때, 모든 통합 테스트가 가능해졌다

이번에 회사 조직에서 통합 테스트를 위한 환경을 구축하는 과정에서 테스트 컨테이너를 도입하게 되면서, 그 과정을 정리하고자 한다. 그 전에 왜 통합 테스트 환경으로 테스트 컨테이너를 채택하게 되었는지 배경은 다음과 같다. 왜 테스트 컨테이너를 채택했나? H2 인메모리 DB 고려 처음 통합 테스트 환경을 H2를 활용해 구축...

Bean 등록의 끝, 나는 그 클래스만 선택해야 했다 (feat. @SpringBootTest classes 속성)

Spring Boot 특정 클래스만 Bean 등록하기 feat. @SpringBootTest의 classes 속성 개요 회사에서 통합테스트 환경을 구축하는 과정에서 통합테스트 작성 시 선언해줘야 하는 어노테이션의 재사용성을 위해 하나의 커스텀 어노테이션을 생성하여 관리하고자 했다. 여기서 회사 프로젝트의 특성 상 테스트 환경...

Obsidian 데일리 투두리스트로 일감 관리하기

옵시디언 데일리 투두리스트로 일감 관리하기 1. 데일리 노트 (Daily notes) 설정하기 옵시디언에서 기본적으로 제공하는 코어 플러그인 (Core plugins)에 데일리 노트가 있다. 옵시디언 설정에 들어가 코어 플러그인에서 데일리 노트를 활성화한다. 그 다음 코어 플러그인 설정에서 데일리 노트 파일에 대한 설정...

공유락을 걸었던 그, 하지만 나는 그때 베타락을 걸었다

데이터베이스 락 1. 공유락 공유락은 데이터를 변경하지 않는 읽기 작업을 위한 락으로, 리소스를 읽을 수는 있지만 수정할 수 없게 하기 위한 락이다. 다른 트랜잭션에서 공유락이 걸린 데이터를 읽어도 데이터의 정합성은 지켜지기 때문에 다른 트랜잭션의 공유락은 막지 않는다. 하지만 공유락이 걸린 데이터에 베타락을 걸고 접근할 ...

트랜잭션 락을 걸면, 그녀는 내게 답하지 않는다

트랜잭션 락 1. 비관적 락 (Pessimistic Lock) 설명 데이터 충돌 가능성이 높다고 가정하고 트랜잭션이 데이터에 접근할 때마다 락을 걸어 다른 트랜잭션의 접근을 제한하는 방식으로, 즉 비관적인 관점에서 데이터 충돌을 사전에 방지하는 방식이다. DB 락의 공유락, 베타락 기법을 사용하는 방식이다. (각 DB 락의...