끝을 보는 용기

Day 122 - 게임 아이템 거래소 프로젝트 70%, 삽질로 하루를 허비해 버렸다

writingforever162 2025. 2. 5. 23:44

1. 프로젝트 진행 상황 및 계획

🥇 비관적 락 사용하기 (완료)
🥈 낙관적 락 사용하기 (완료)

🥉 분산 락 구현하기 (진행 중, 25.02.06 완료 목표)
4️⃣ 분산 락 구현 이후 테스트 코드 실행하기 (진행 전, 25.02.06 완료 목표)

5️⃣ 동시성 제어 관련 공부하기 (진행 중, 25.02.06 완료 목표)

 

2. 삽질로 하루를 허비했다.

(1) 스레드 20개, 입찰 요청 1,000건일 때 ▼

(2) 스레드 20개, 입찰 요청 500건일 때 ▼

(3) 스레드 20개, 입찰 요청 249건일 때 ▼

비관적 락(pessimistic lock)이나 낙관적 락(optimistic lock)을 적용했을 때 동시성이 잘 제어되는지를 보려고 테스트 코드를 작성하고 여러 번 실행했는데, 너무 '성능 개선'에 꽂힌 탓이었을까? 입찰 요청 수를 1,000건으로 늘렸을 때 오류가 발생해서 스레드(thread)가 20개일 때 예상 밖 예외가 발생하지 않는지 여러 번 찾아다녔다. 테스트 코드의 목적을 잊은 줄도 모르고 몇 번씩 실행하고 걸린 시간이며 여러 값을 확인하느라 시간 가는 줄을 몰랐다.

 

한 마디로 삽질하느라 하루를 허비하고 말았다.

 

동시성이 잘 제어되는지 확인하려면 테스트 코드 대신 실제 환경과 유사한 조건에서 검증해야 하는데, 아침이고 점심이고 스레드 수를 고정한 채 요청 수만 바꿔가며 테스트에 몰두했다. 개인 환경에서 검증하면 네트워크라든지 컴퓨터 사양 같은 요소 때문에 값의 정확성이 떨어지는 줄도 모르고.

프로젝트 마감이 겨우 이틀밖에 남지 않은 와중에 예상 밖 예외 메시지를 분석했다. 스레드가 20개이고 입찰 요청이 500건인 두 번째 상황에서 나온 수치를 참 열심히도 해석했다.

 

ⓐ 입찰 요청 총 개수: 500개 

ⓑ 발생한 예상 안 예외 총 개수: 17개

ⓒ 성공해야 하는 요청 총 개수: 483개 (ⓐ -  ⓑ) 

ⓓ 실제로 성공한 요청 총 개수: 480개 

ⓔ 테스트 코드 실행 시 발생한 예상 밖 예외 총 개수: 3개. 'ⓒ - ⓓ' 값과 동일하다.

 

Exception in thread "pool-2-thread-28" 
CannotCreateTransactionException: 
Could not open JPA EntityManager for transaction
// (1) HikariCP:
// - 데이터베이스와의 된 연결을 관리하는 커넥션 풀
// - 일정 수의 연결을 동시에 처리 가능
// (2) 예외 발생 
// - 위치: HikariCP의 스레드 풀 내에서 실행 중인 28번 스레드 
// - 내용: 트랜잭션을 처리하려는 스레드에서 JPA EntityManager를 열 수 없음

Caused by: JDBCConnectionException: 
Unable to acquire JDBC Connection 
[HikariPool-1 - Connection is not available, 
request timed out after 30004ms 
(total=20, active=20, idle=0, waiting=0)]
// 원인: JDBC 연결을 얻을 수 없음
// HikariCP에서 연결 풀에서 30초 동안 연결을 얻지 못함

Caused by: java.sql.SQLTransientConnectionException: 
HikariPool-1 - Connection is not available, 
request timed out after 30004ms 
(total=20, active=20, idle=0, waiting=0)
// 세부 원인: HikariCP 연결 풀에서 타임아웃 발생
// 풀에 활성 연결이 모두 사용 중이고 대기 중인 연결이 없음
// HikariPool-1에서 활성 연결이 20개가 모두 사용 중이고,
// 대기 중인 연결이 0개라서,
// 새로운 요청이 연결을 얻지 못하고 타임아웃 오류 발생

 

우선 남은 기간에는 분산 락 적용과 글 정리에 집중해야겠다. 오늘은 밤에 되기가 무섭게 눈꺼풀이 바로 감길 만큼, 긴장이 탁 풀어진 듯한 느낌이 들 정도로 피곤했다.