대용량 데이터 처리 회고 - 6

Ahn yi·2022년 12월 17일
0

java

목록 보기
20/22

대용량 데이터 처리 회고

  • Jmeter에 대해 에러 처리가 잘 되었다!!!!!!!!!!!!!!!!!!!!
    계속 말하는 문제점은
  1. 동일인의 같은 도서 연속 대여
    • 복합키 설정
      - Tread Pool=5 설정으로 인한 exception 발생!
  2. 다수의 인원이 재고 적은 도서 단기간 대여
    • Lock으로 해결
    • Isolation Level 감소
      - DeadLock 발생!

위의 두 문제에 대한 해결 방법으로는
1. Redis로 Service단에서 사용자 id에 해당하는 key값을 저장해 둔 후에, 해당 key값의 유무에 따라 DB접근 제어
2. 임계영역 및 Redis로 Service단에서 BookId를 key값으로 두고 BookCount를 value로 두어 Service단에서 key값 유무에 따라 존재할 경우에 value를 -1로 하여 DB접근 제어

길고 긴 Jmeter 테스트가 종료되었다.
이렇게 해결하기까지 생각하게 된 경로
우선, DB Transaction내의 문제라 생각을 하였고 내부에서 해결할 방법을 찾지 못하였다.

그렇다면 DB Transaction 전에 해결하면 되지 않을까?

그리하여 Service단에서 해결하려 했고, MVC패턴을 깨고서라도 해결하려고 하였지만 Thread Pool 설정때문에 코드 수정만 많아지고 해결 하지 못하였다.
결국 다른 팀원들이 쓴 Redis에서 생각을 해보았고, 우선 첫 번째 문제점을 해결하게 되었다.
두 번째 문제에 대해서는 우선 임계영역 설정으로 해결하려 하였다. 하지만 이번에는 한번에 접근하는 사람의 수가 제각각이었다. 그렇기에 여기서도 Redis로 활용하여 동일한 key값을 활용하여 BookCount를 DB접근 전에 구할 수 있게 되었다.

  • DeadLock을 해결 할 수 있는 방법이 다른 방법이 있을 거라 생각한다. 하지만 내가 이번에 생각한 방식에 대해 좋지 않다?라고는 생각하지 않는다. 이런저런 시도를 해보다가 처음으로 Redis도 사용해 보았고 좋았던 경험이라고 생각한다.

  • 프로젝트에 대해 내가 한 부분은 많지 않지만 이것저것 많이 배우게 된 거 같다.

    • AOP
    • MySQL Full-Text Index
    • ELK Stack
    • Redis
    • 1630만건의 데이터 핸들링

위의 기술스택을 직접 구현한것이 아니라 다룰 수 있다! 라고는 못하지만 테스트 결과를 통하여

'어느 상황에 써야 된다'

개념을 익힌것에 대해 만족할만한 경험을 한 거 같다.
테스트한 부분에 대해서는 추후 코드 분석을 하고 개인적으로 공부를 한 뒤에 정리를 할 예정이다.
이번 기회를 통해 대용량 데이터 처리에 대해 뜻깊은 경험을 해본거 같아 만족스러웠다.

profile
소통을 잘하고싶은 백엔드 개발자

0개의 댓글