본문 바로가기

springboot5

@Transactional: 테스트 코드와 서비스 코드의 동작 차이 회원가입 테스트 코드를 작성하고 실행하는 강의를 보면서 공부하다가 강사님이 @Transactional 어노테이션을 주석처리하고 테스트를 돌린 것을 못 보고 "왜 나는 테스트 결과를 DB에서 확인할 수 없지?"라고 당황했다. 원인은 테스트 클래스 위에 붙여놓은 @Transactional 때문이었다.@SpringBootTest@Transactional // "트랜젝션 처리를 해야 하니깐 붙여야지"라고 아무 생각 없이 사용했는데, 알고 보니 스프링은 테스트 환경에서 @Transactional을 다르게 취급하고 있었다. 서비스 계층에서는 로직이 성공적으로 끝나면 DB에 커밋하고 예외가 터지면 롤백하지만,테스트 계층에서는 테스트가 성공하든 실패하든 무조건 롤백한다.즉, 테스트가 끝나자마자 스프링에서 테스트에서.. 2026. 2. 1.
[고성능 선착순 쿠폰 발급 시스템] #4. Redis 분산 락과 Facade 패턴 도입기 1. 지난 이야기 지난 포스팅에서 비관적 락(Pessimistic Lock)을 통해 데이터 정합성은 지켰지만, 1,000명의 유저가 몰리자 대기열이 폭발하며 타임아웃 에러(14.8%)가 발생하는 한계를 확인했습니다.DB는 데이터 저장소이지, 줄을 세우는 역할로는 적합하지 않다는 결론을 내렸습니다. 그래서 오늘은 '줄 세우기(Lock)' 역할을 DB보다 훨씬 빠르고 가벼운 인메모리 저장소인 Redis에게 위임하기로 했습니다. 2. Redis 설정 및 연결 테스트 저는 윈도우 환경에서 개발을 하고있기 때문에 아래 링크에서 Redis를 다운받았습니다.Releases · tporadowski/redis Releases · tporadowski/redisNative port of Redis for Windows... 2026. 1. 17.
[고성능 선착순 쿠폰 발급 시스템] #3. synchronized의 배신과 비관적 락(Pessimistic Lock) 적용 1. JMeter을 활용한 부하 테스트지난 포스팅에서 기본적인 쿠폰 발급 로직을 구현했고 curl을 이용해 단일 요청(Single Thread) 환경에서 테스트했을 때는 정상 작동을 확인했지만, 접속자가 늘어났을 때는 어떻게 작동하는지 확인할 필요가 있다고 느꼈습니다. 우선 제 서버가 얼마나 연약한지 확인해보기 위해 JMeter을 활용해서 테스트를 진행해보려 합니다.시나리오: 쿠폰은 딱 100장.공격: 100명의 유저가 동시에 발급 요청을 보낸다.기대 결과: 재고는 0이 되고, 발급 내역은 정확히 100개여야 한다.부하 테스트를 위해 Apache Jmeter 공식 사이트에 접속해서 Binaries 항목에 apache-jmeter-5.6.3.zip(윈도우 기준)을 다운로드 했습니다.편한 위치에 압축 해제 .. 2026. 1. 9.
[고성능 선착순 쿠폰 발급 시스템] #2. 프로젝트 세팅 및 기본 발급 로직 구현 1. 패키지 구조: 유지보수를 위한 계층형 구조그동안 공부할 때는 기능을 구현하기만 급급하여, 한 패키지에 모든 클래스를 몰아넣곤 했습니다.이번 프로젝트는 유지보수와 확장성을 고려하여 스프링의 표준적인 계층력 구조를 선택했습니다. vanilalatte.couponsystem 이라는 패키지 경로 하위에 아래와 같이 역할을 분리했습니다.- 패키지 구조controller: 외부 요청을 받는 창구 (Web Layer)service: 비즈니스 로직을 수행하는 핵심 (Service Layer)repository: DB에 접근하는 역할 (Data Access Layer)domain: 핵심 도메인 객체 (Entity)dto: 계층 간 데이터 교환을 담당하는 객체현재는 간단한 예제라 사용하지 않았지만, 추후 응답 데이터.. 2026. 1. 7.
[고성능 선착순 쿠폰 발급 시스템] #1 프로젝트 기획 및 기술 스택 선정 1. 프로젝트 선정 이유단순한 CRUD(게시판) 기능을 구현해 보면서 백엔드의 기초를 다졌습니다. 하지만 실제 서비스에서는 수만 명이 동시에 접속할 때 서버가 버틸 수 있는가라는 문제에 직면하게 됩니다. 이번 프로젝트는 단순히 데이터를 저장하는 것을 넘어, 대용량 트래픽 상황에서의 동시성 제어와 시스템 안정성을 확보하는 백엔드 개발자의 핵심 역량을 기르기 위해 시작했습니다. 2. 프로젝트 개요명칭: 고성능 선착순 쿠폰 발급 시스템목표: 초당 1만 건 이상의 요청에도 데이터 부정합 없이 정확히 1000개의 쿠폰을 발급하는 시스템 구축.3. 기술 스택 및 선정 이유단순히 유행하는 기술이 아니라, '왜 이 기술이 필요한가'에 집중했습니다.Java 17 & Spring Boot 3.5.9: 최신 Java 환경에.. 2026. 1. 5.