2022.11.21 ~ 2023.01.31
로또 시뮬레이션을 진행해볼 수 있는 웹사이트 입니다.
Frontend: Vue
Backend: SpringBoot, JPA, Querydsl
Database: MySQL
Infra: Docker
-
시뮬레이션 기능
-
통계정보 제공
- 도메인 중심 설계
- 로또 번호를 숫자를 원시타입이 아닌 LottoNumber라는 도메인으로 정의해 1~45사이의 중복되지 않는 숫자라는 도메인 특성 부여했습니다.
- LottoNumber객체를 매번 생성하지 않고 static필드에 값을 선언하고 재활용하는 방식으로 메모리 사용 효율을 높였습니다.
- 테스트 코드 작성
- 도메인의 주요 기능에 대한 모든 테스트 코드 작성해 코드의 안전성을 높였습니다.
- Querydsl의 데드락 현상
- 문제 원인: Q타입이 순환 의존을 가질 경우, 멀티 쓰레드 환경에서 Q타입을 초기화하면 데드락이 발생할 가능성 존재했습니다.
- 해결 방법: postConstructor시점에 ClassPathUtils의 scanPackage메서드를 사용해 멀티 쓰레드 환경 이전에 단일 쓰레드에서 클래스를 초기화 해 데드락 방지했습니다.
- 현재는 리팩토링을 통해 엔티티의 순환 의존 관계를 제거해 데드락이 발생하지 않는 상태입니다.