
➡️ 공모전 프로젝트의 목표 이번 글에서는 한이음 공모전에서 진행하고있는 수강신청 시스템 개발 시작 과정을 정리하려고 한다. 수강신청 서버는 특히 대용량 트래픽에 취약하기 때문에 '터지지 않는 시스템'을 만들자는 목표로 공모전 프로젝트를 시작하게되었다. ➡️ 기본 M
이번 글에서는 최근 프로젝트를 하면서 실제로 겪은 연관관계 이슈와 공부하면서 정리하게 된 JPA 연관관계의 기초 개념과 주의할 점들을 간단하게 기록한다. 📢 연관관계란? DB 테이블은 서로 연결되어 있고, 이 연결을 관계(연관관계)라고 부른다. 예를 들어, 강의(c
1. JPQL의 한계 Spring JPA를 처음 배우면 대부분 @Query를 쓰거나 findByXXX() 같은 메서드 네이밍 전략을 사용해서 데이터를 조회한다. 이때 사용하는 쿼리 언어가 JPQL(Java Persistence Query Language)이다. > JP

✍️ 설계보다 코드가 먼저? 이번에 수강신청 시스템을 구현하면서 가장 먼저 한 일은 코드를 짜는 것이 아니라 로직을 플로우차트로 그려보는 것이었다. 이 차트를 먼저 만들고 나니 구현이 훨씬 쉬워졌다. ✔️ 무엇을 언제 검사해야 하는지, 예외는 어디에서 발생할 수 있는

1. 테스트 개요 수천 명 이상이 동시에 몰리는 수강신청 상황에서 시스템이 다운되지 않고 얼마나 잘 버티는지, 특히 제한된 자원(t3.large) 환경에서 얼마만큼의 트래픽을 처리할 수 있는지를 보기 위해 이번 테스트를 진행햇다. 👉이 시스템은 다음과 같은 특성이 있다: 짧은 시간 내 폭발적인 접속 실시간 좌석 정보와 동기성 중요 백엔드 성능이 느려지면...

1. 문제 시작: 서버가 터진다💥 우리 팀은 일반적인 MVC 구조로 수강신청 서비스를 개발했다. 사용자는 로그인한 뒤, 바로 수강신청 API를 호출하는 방식이었다. 처음엔 잘 작동했지만 JMeter 테스트에서 수천명이 동시에 접속할때 CPU와 DB 커넥션 풀이 빠르

1. 도입 배경 기존 수강신청 시스템은 Polling 방식으로 동작하고 있었다. 사용자는 일정 간격으로 자신의 대기 상태를 확인하며, ALLOWED 상태가 되었는지를 계속 서버에 요청해야 했다. Polling 방식은 단순하고 안정적이라는 장점이 있었지만 대기 인원이

수강신청 시스템에서 가장 까다로운 부분은 단순히 대기열을 유지하는 것이 아니라"지금 입장이 허용된 사용자가 실제로 로그인까지 완료했는지"를 추적하고 "빈자리가 생겼을 때 누굴 입장시킬지" 정확히 판단하는 것이다.초기에는 서버 내부에서 아래와 같이 관리했다.대기열: Li

먼저 결과부터 보자!! 아래 영상은 JMeter 도구를 활용해 500명의 사용자가 특정 courseId에 대해 수강신청 → 수강취소를 반복하도록 테스트한 장면이다. 사용자 화면에서도 좌석 수가 즉시 반영되는 것을 확인할 수 있다. ❓우리는 어떻게 이런 실시간 좌석 반