카드서버 리뉴얼 - 6

5/17

동시성 제어 때 a 카드에 대해 요청이 여러개 들어올 경우, 해당 카드 번호에 대해 transactional 을 사용한 lock이 걸려있다면, 오라클 직렬화 에러가 발생하게 된다.

뒤의 요청들도 모두 alive되어있기를 원한다면, 그것은 transactional을 사용해서 해결할 수 있는 부분이 아니다. transactional은 DB를 보호하기 위한 어노테이션이지, 서비스의 모든 요청을 핸들링하기위한 어노테이션이 아니다.

 

기존 카드서버에서는 동시요청이 들어올 경우 pk가 중복되며 무결성 제약 조건 에러가 발생했다. 이 에러를 캐치하여 리턴할 경우, 카드서버의 호출자는 1초 sleep한 뒤 재요청을 보내게 된다.

 

transactional 어노테이션을 사용한 결과, 트랜잭션 수행 시간을 3초로 잡았으며, 이 3초 이내에 동일한 요청이 들어올 경우 직렬화 에러가 나며 뒤의 요청들은 모두 무시되는 결과를 초래했다.

 

개발자들의 예상으로는, 카드 서버의 처리가 3초 이상을 초과할리 없으며, 0.밀리세컨트 이내로 hsm에 접속해야했다. 그런데 1초 이상으로 카드 서버에서 시간을 소요해버리고 있는 것이다. 요청에 1초 이상이나 소모되는 이런 서비스는 이용할 수 없다. 그렇다면 스프링 부트로 개편한 의미가 없이 처리 속도가 빠른 버텍스를 계속 사용하는 것이 차라리 낫다.

어째서 1초씩이나 소모되는가? order by를 두 번이나하고 거기서 또 셀렉을 하고 있기 때문일까? 서버의 처리 속도를 크게 고려해 본 적이 없었는데 다시 생각하게 됐다.

 

'main' 카테고리의 다른 글

목차 정리  (0) 2025.02.18
카드 서버 리뉴얼  (0) 2023.05.10
카드서버 리뉴얼 - 3  (0) 2022.10.04
카드서버 리뉴얼 - 2  (0) 2022.10.01
카드서버 리뉴얼 - 1  (0) 2022.09.27