본문 바로가기

공부22

728x90
[Java] Mybatis 동시성 제어 회사에서 개발을 진행하던 중 실 사용자가 신청하는 로직을 개발하게 되었는데 문제는 사이트가 오픈되면 동시에 많은 인원이 신청을 하게되지만 신청자에는 제한이 있는 경우도 존재한다. 바로 동시성 제어가 필요하다 라는 생각을 했지만 JPA로는 동시성 제어를 해본 경험이있지만 Mybatis는 해본적이 없고 물어볼 선임이 없는 상황이라 혼자 테스트를 진행하며 기록한다. 환경 SpringBoot 2.7.1 Java 18 Junit 5 MyBatis 최초 테스트 코드 요청 횟수 : 1000번 쓰레드 수 : 100 제한 : 100 @Autowired private UserCommonMapper userCommonMapper; @Test void test() throws InterruptedException { int .. 2023. 9. 27.
[Java] 덱(Deque) 자료구조 덱(Deque)이란? Deque(Double Ended Queue)는 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조입니다. 즉, 큐(Queue)와 스택(Stack)의 기능을 모두 갖춘 자료구조입니다. 사용법 Deque deque = new LinkedList(); // 또는 ArrayDeque(); Deque는 다음과 같은 주요한 연산들을 지원합니다: Push/Pop: 양쪽 끝에 요소를 추가하거나 제거합니다. addFirst(element): Deque의 맨 앞에 요소를 추가합니다. addLast(element): Deque의 맨 뒤에 요소를 추가합니다. removeFirst(): Deque의 맨 앞의 요소를 제거하고 반환합니다. removeLast(): Deque의 맨 뒤의 요소를 제거하고 반환합니다.. 2023. 5. 11.
[ParkNav] 코어 로직 동시성제어 테스트 코드 작성 테스트 코드 작성 테스트 방법 선택 동시성 제어 테스트를 위해 테스트 코드작성을 하려고 계획을 했고 가장 처음 만난 문제는 동시성 제어는 단위테스트로 작성해야 하는가 통합테스트로 작성해야 하는가? 에 고민에 빠졌고 동시성 제어는 멀티스레드 환경에서 테스트를 진행해야하고 단위테스트는 각 메서드나 함수 단위로 테스트를 해야하기때문에 통합 테스트로 진행하기로 했다. 테스트 흐름 아래의 순서대로 로직을 작성했고 동시성제어는 성공적으로 작동했다. 하지만 문제점이 발생했다. 객체를 생성하여 실제 DB에 저장을 한다 저장 된 객체를 모두 불러온다. 동시성 제어 테스트를 위해 동시에 서비스 로직을 호출한다 입차가 성공한 수와 입차가 실패한 수를 모두 저장한다 입차 성공수와 입차 실패수가 모두 맞는지 검증한다 1차 문제.. 2023. 4. 27.
[ParkNav] QueryDSL을 이용한 관리자 페이지 성능개선 성능 개선 결과 개선 전: 1461 ms 동적 쿼리 적용 : 67ms 문제점 기존 관리자 페이지를 호출 시 페이지를 호출하는 시간이 너무 오래걸리는 문제가 발생했고 페이지 호출 시간 = 데이터의 개수 만큼의 페이지 지연이 발생되었다. 군산오름 주차장 기준 1461ms 가 소요되었다. 원인 기존 로직의 흐름에 문제가있었는데 다른 두 테이블의 데이터를 합쳐야 하고 검색조건에 맞는 결과만 내어줘야하기 때문에 두번의 DB호출에서 Pageable을 걸지 못했고 얻어온 데이터를 합치는 과정에서 검색조건을 필터링 했는데 그 결과 많은 쿼리 조회로 인해 페이지 조회가 느려진것이다. 기존 로직은 다음과 같다. 주차장의 모든 예약정보를 가져온다. 예약 정보 중 입차 한 기록이 있는지 DB에서 검색한다. 입차 했을경우 : .. 2023. 4. 27.

TOP

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