본문 바로가기

공부/성능개선6

728x90
[ParkNav] 코어 로직 동시성제어 테스트 코드 작성 테스트 코드 작성 테스트 방법 선택 동시성 제어 테스트를 위해 테스트 코드작성을 하려고 계획을 했고 가장 처음 만난 문제는 동시성 제어는 단위테스트로 작성해야 하는가 통합테스트로 작성해야 하는가? 에 고민에 빠졌고 동시성 제어는 멀티스레드 환경에서 테스트를 진행해야하고 단위테스트는 각 메서드나 함수 단위로 테스트를 해야하기때문에 통합 테스트로 진행하기로 했다. 테스트 흐름 아래의 순서대로 로직을 작성했고 동시성제어는 성공적으로 작동했다. 하지만 문제점이 발생했다. 객체를 생성하여 실제 DB에 저장을 한다 저장 된 객체를 모두 불러온다. 동시성 제어 테스트를 위해 동시에 서비스 로직을 호출한다 입차가 성공한 수와 입차가 실패한 수를 모두 저장한다 입차 성공수와 입차 실패수가 모두 맞는지 검증한다 1차 문제.. 2023. 4. 27.
[ParkNav] QueryDSL을 이용한 관리자 페이지 성능개선 성능 개선 결과 개선 전: 1461 ms 동적 쿼리 적용 : 67ms 문제점 기존 관리자 페이지를 호출 시 페이지를 호출하는 시간이 너무 오래걸리는 문제가 발생했고 페이지 호출 시간 = 데이터의 개수 만큼의 페이지 지연이 발생되었다. 군산오름 주차장 기준 1461ms 가 소요되었다. 원인 기존 로직의 흐름에 문제가있었는데 다른 두 테이블의 데이터를 합쳐야 하고 검색조건에 맞는 결과만 내어줘야하기 때문에 두번의 DB호출에서 Pageable을 걸지 못했고 얻어온 데이터를 합치는 과정에서 검색조건을 필터링 했는데 그 결과 많은 쿼리 조회로 인해 페이지 조회가 느려진것이다. 기존 로직은 다음과 같다. 주차장의 모든 예약정보를 가져온다. 예약 정보 중 입차 한 기록이 있는지 DB에서 검색한다. 입차 했을경우 : .. 2023. 4. 27.
[ParkNav] 예약처리 일관성 테스트 Case 1, Case 2 : 주차시간을 지켜 주차한 경우로, 보편적이고 일반적인 상황이라 가정한다. Case 3, Case 4 : 주차시간을 지키지 않은 경우로, 예외 상황이라 가정한다.→ 예외상황에서 version 1 , version 1-1 은 예약차량 입차가 가능한 상황에서 version 2 는 입차 안정성을 갖지 못하는 경우도 발생한다. → 일반적인 상황, 예외상황 모두 포함하여 version 2 가 예약차량 입차 안정성과 주차장 운영 효율성 모두 가장 높은 수치를 갖는다. 예약처리 일관성 테스트 상황 설정 주차장 총 구획 수 : 5자리 11:00 이후 주차장에 차량이 없으므로, 14:0015:00, 15:0016:00 예약시 성공해야 한다. 테스트 결과 version 0 의 경우, 1번•3번은.. 2023. 4. 27.
[ParkNav] 알고리즘 Version 0 ~ Version 2 Version 0 예약 예약시작시간이 종료시간보다 늦게 입력된 경우 예외처리 NOT_END_TO_START(400,"입차시간이 출차시간보다 빨라야 합니다.") 주차장 ID가 주차장 정보 DB에 없는 경우 예외처리 NOT_FOUND_PARK(400, "등록된 주차장이 없습니다.") 로그인한 유저의 대표차량이 등록되지 않은 경우 예외처리 NOT_FOUND_CAR(400, "등록된 차량이 없습니다.") 예약시작~종료시간 사이에 동일차량으로 예약한 내역이 있는 경우 예외처리 ALREADY_RESERVED(400, "이미 예약된 시간입니다.") 주차장 운영정보가 없는 경우 예외처리 NOT_FOUND_PARK_OPER_INFO(400, "해당 주차장 운영정보가 없습니다.") 현재 주차가능 대수와 선택시간 예약건수 .. 2023. 4. 27.

TOP

TEL. 02.1234.5678 / 경기 성남시 분당구 판교역로