2026-07-04 (토) · 미션 공개 + 주간 방향
type
key
rows
code
23:59
"코드 1 개에 손님 50 명이 동시에 들어오면 무슨 일이 벌어질까?"
티켓 1장 남았는데 50명 동시 결제.
@Lock(PESSIMISTIC_WRITE)
@Version
@Lock(PESSIMISTIC_WRITE) @Query("SELECT p FROM Product p WHERE p.id=:id") Optional<Product> findForUpdate( @Param("id") Long id);
DB 가 SELECT ... FOR UPDATE 발행 → 다른 트랜잭션은 이 row 를 _대기_
장점: 확실. 단점: 대기 시간.
@Entity public class Product { @Version private Long version; }
업데이트 시 version 매칭 — 안 맞으면 예외 발생 → 클라이언트가 다시 시도 (재시도 정책 필요)
장점: 경합 적을 때 빠름. 단점: 재시도 비용.
경합이 _잦으면_ → 비관 락 (재시도 비용 ↑↑) 경합이 _드물면_ → 낙관 락 (대기 시간 ↑↑)
면접에서 이 trade-off 를 답하면 +1 점.
synchronized
@Transactional
06-week5-concurrency/ ├── report.md ├── project/ # Spring Boot baseline + 락 └── evidence/ ├── concurrency-failure-log.md # 음수 재고 재현 로그 ├── k6-script.js # 또는 동시 요청 스크립트 ├── concurrency-success-log.md # 락 적용 후 성공 로그 └── lock-strategy-comparison.md # 비관 vs 낙관 결정 근거
21:00
{cohort}-질문
이번 주 = "내 코드에 50 명이 동시에 들어오면?" 다음 면접 = "동시성 이슈 어떻게 해결하나요?" 답할 수 있게
다음 주: Week 6 — 서버 성능 최적화 / 프로파일링 + 격주 강의.