Java(35)
-
[LG U+ 유레카 3기] Redis Queue + Scheduler로 선착순 쿠폰(100장) 동시성 해결 실습
🧩 Redis Queue + Scheduler로 선착순 쿠폰(100장) 동시성 해결 실습❶ 상황 설명선착순 쿠폰 이벤트는 “동시에 많은 사용자가 몰리는” 대표적인 동시성 문제다.처음엔 JPA에서 quantity를 그냥 감소시키면, 여러 요청이 동시에 들어올 때 갱신 유실(Lost Update) 때문에 재고가 깨지기 쉽다.이번 실습에서는 DB 락에만 의존하지 않고, Redis Queue로 요청을 줄 세운 뒤 Scheduler가 순차적으로 발급하는 구조로 선착순 100장을 안정적으로 처리했다.❷ 핵심 아이디어 (한 문장 요약)신청(apply)은 Redis 큐에 넣기만 하고 빠르게 종료 → 발급(publish)은 스케줄러가 큐에서 꺼내 DB 재고를 감소 → 재고가 0이면 SoldOut 처리Producer: ..
2026.01.06 -
[LG U+ 유레카 3기]Spring Boot REST API + Swagger + Postman 연동 실습
오늘은 Spring Boot로 만든 학생 관리 REST API에 Swagger(OpenAPI 3.0)와 Postman을 붙여서, “백엔드 API → 문서 → 테스트 도구”까지 한 번에 연결하는 실습을 했다.단순히 코드만 작성하는 수준이 아니라, HTTP 응답 설계(ResponseEntity), API 문서화(@Tag, @Operation), OpenAPI JSON, Postman 연동까지 현업에서 실제로 사용하는 흐름과 거의 동일한 구조였다.❶ REST API 기반 Student CRUD 구조 복습1) 레이어드 아키텍처 구조이번 실습의 기본 골격은 이미 만들어 둔 Student CRUD 프로젝트다. 레이어드 아키텍처 구조는 다음과 같다.Controller : HTTP 요청(URI, 메서드) → Java ..
2025.12.02 -
[LG U+ 유레카 3기] Spring Data JPA find() 메서드 실습
Spring Data JPA find() 메서드 실습 - Student 검색 패턴 정리❶ 상황 설명이번 오전 실습에서는 Spring Data JPA의 메서드 이름 규칙 기반 조회(find)를 집중적으로 연습했다.특히 Student 엔티티를 대상으로 다양한 검색 패턴을 만들어 보는 것이 목표였다.단일 조건 조회: findByName()복합 조건 조회: findByEmailAndPhone(), findByEmailOrPhone()문자열 패턴 조회: StartingWith, EndingWith, Containing, Like정렬: findAllByOrderByNameDesc()범위 검색: findByIdBetween()핵심은 “쿼리를 직접 안 써도, 메서드 이름만으로 조건과 정렬을 표현할 수 있다”를 몸으로 ..
2025.11.26 -
[LG U+ 유레카 3기] Spring Data JPA CRUD + Lombok + 패턴 실습 정리
Spring Data JPA CRUD + Lombok + 패턴 + 레이어드 아키텍처 한 번에 정리1. 오늘 실습 상황 정리이번 실습에서는 Spring Boot + Spring Data JPA + Lombok 조합으로 Student 테이블 CRUD + 페이징을 구현하고,추가로 레이어드 아키텍처 개념, Lombok의 역할, Spring Data JPA 구조, Builder 패턴, Singleton 패턴까지 연결해서 정리했다.구조는 다음처럼 구성했다.entity : Student 엔티티repository : StudentRepository (JpaRepository 상속)service : StudentServiceCrud / StudentServiceCrudImplcontroller : StudentContr..
2025.11.25 -
[LG U+ 유레카 3기] Spring MVC + CORS 실습
이번 실습은 Spring MVC의 핵심 개념인 POST 처리, redirect 흐름, RestController의 JSON 응답 방식, 그리고 CORS 전역 설정까지 묶어서 진행했다. ✔ @SpringBootApplication 1️⃣ @SpringBootConfiguration내부적으로 @Configuration을 상속스프링 컨테이너에 설정 클래스임을 알려줌2️⃣ @EnableAutoConfiguration스프링이 자동으로 필요한 Bean 들을 설정해주는 기능예:Tomcat 자동 설정DataSource 자동 설정MVC 설정 자동 적용스프링 부트 “자동 설정” 핵심 기능3️⃣ @ComponentScan현재 패키지를 기준으로 하위 패키지 전체에서 Bean(@Component, @Service, @Repos..
2025.11.25 -
[LG U+ 유레카 3기] JPA N+1 · Fetch Join · JPQL Join
오늘은 JPA를 사용할 때 반드시 알아야 하는 N+1 문제와 이를 해결하는 fetch join, 그리고 JPQL Join 문법을 실습 중심으로 정리한 날이다.실제 Hibernate 로그가 어떻게 출력되는지 직접 보면서 이해하는 “핵심 실습”이었기 때문에 내용을 정확히 정리해두면 향후 프로젝트/JPA 최적화에 큰 도움이 된다.❶ N+1 문제란?기본 엔티티 목록을 조회하는 SELECT(1) 후, 각 엔티티가 가지고 있는 연관 엔티티를 N번 추가로 조회하며 발생하는 비효율이다.String jpql = "select o from Orders o";List list = em.createQuery(jpql, Orders.class) .getResultList();Hiberna..
2025.11.20