2026/01 4

모임 참가 신청 API: 모임 최대 참가자 수 동시성 문제 해결하기

🎯학습 목표1. 모임 참가 신청에서 초과 참석(overbooking) 이 왜 발생하는지(레이스 컨디션) 설명할 수 있다.2. “정원 체크 + 참석 처리”를 직렬화(serialization) 해야 하는 이유를 설명할 수 있다.3. Pessimistic Lock(`SELECT ... FOR UPDATE`) 으로 groupId 단위 동시성을 제어하는 설계를 설명할 수 있다.4. FREE, APPROVAL_REQUIRED 정책에서 정원 체크 시점이 달라지고, attend, approve, left에 락이 필요한 이유를 설명할 수 있다.모임 서비스에서 “참여하기”는 가장 빈번하고, 동시에 가장 민감한 API 중 하나입니다. 특히 참여 정책이 FREE(즉시 참석) 인 모임은 사용자가 버튼을 누르는 순간 곧바로 A..

💭Retrospective 2026.01.10

이미지 로딩 속도와 크기 70% 단축: WebP 변환부터 Redis 프리업로드로 URL을 보증하기

🎯학습 목표1. 이미지가 서비스 성능에 미치는 비용을 이해하고, 이를 줄이기 위해 업로드 시점 최적화(WebP 변환 + 리사이징) 가 왜 필요한지 설명할 수 있습니다.2. 무제한 업로드를 기술이 아닌 정책(최대 업로드 수 제한) 으로 먼저 제어하고, 원본 1장에서 main/thumb 파생 이미지를 생성하는 설계를 설명할 수 있습니다.3. Pre-upload(`imageKey` + Redis TTL)를 통해 서버가 이미지 URL을 보증하고, 이후 consume 단계로 도메인과 안전하게 연결하는 구조를 이해할 수 있습니다.4. 이미지 포맷 선택을 압축률이 아닌 운영 안정성 관점(WebP 선택) 에서 판단하고, 업로드 실패 문제를 애플리케이션 + 인프라(Nginx) 레이어까지 포함해 해결할 수 있습니다.1...

💭Retrospective 2026.01.10

1. Spring Data JPA 이론: SQL 중심적인 개발의 문제점과 JPA 등장

1. Spring Data JPA: SQL 중심적인 개발의 문제점1.1 SQL에 의존하는 개발의 한계자바, C# 처럼 객체 지향 언어로 애플리케이션을 개발하면서, 데이터 저장소로는 대부분 관계형 데이터베이스(RDB)를 사용합니다. 이 조합은 너무나 보편적이어서 자연스럽게 느껴지지만, 실제 개발을 깊이 해보면 근본적인 불편함을 계속 마주하게 됩니다. 불편함이라는 문제의 출발점은 단순합니다. 객체를 데이터베이스에 저장하려면 반드시 SQL이 필요하다는 점입니다.객체를 한 개 저장한다고 해서 save() 버튼 하나로 끝나지 않습니다. INSERT, SELECT, UPDATE, DELETE 같은 모든 CRUD 작업을 위해 개발자는 SQL을 직접 작성해야만 합니다. 이 순간부터 애플리케이션은 점점 객체 중심이 아니..

🍃SpringBoot 2026.01.10

서평단: 그림으로 이해하는 도커와 쿠버네티스

1. 서평단 활동 소개해당 내용은 길벗 "출판사에서 도서를 제공받았음"을 알리며, 무료로 지원받아 솔직하게 쓴 글입니다. 이번 글은 길벗 31차 개발자 리뷰어 서평단 활동을 통해 도서를 무료로 제공받아, 직접 읽고 솔직하게 정리한 후기입니다. 서평단으로 참여하면서 가장 기대했던 부분은, 도커와 쿠버네티스 기초 복습이었습니다. 이미 저는 도커와 쿠버네티스를 미리 공부하고 간단한 프로젝트로 실습한 경험이 있는 상태입니다. 하지만 실무에서 직접 경험하지 못한 상황이기 때문에 점점 사용한 기능만 사용하게 되면서 부가적인 기능들을 점점 잊혀지고 있었습니다. 그래서 다시 도커부터 쿠버네티스까지 기초를 다시 공부할 필요성을 크게 느끼고 서평단 활동을 신청하고, 감사하게도 서평단으로 선정되었습니다. 도커와 쿠버네티..

💭Retrospective 2026.01.09