반복/중복 수행

1. 문제점

화면에서 저장 이벤트가 발생이 되어 처리하는데 오랜 시간이 걸린다. 이것을 일반적으로 Long Transaction이 발생되었다고 이야기 한다. Long Transaction이 발생하는 여러 사유 중 반복/중복에 의해서 발생하는 것에 대해서 이야기 한다.

2. 해결 방안

2-1. 원인

Application에서.많이 발생하는 문제로 업무 개발을 개발자 혼자 하는 경우 보다 영역(도메인)을 나누어서 개발 하는 경우 발생 많이 발생한다.

  • 동일한 조건으로 동일한 결과를 내는 쿼리 및 RestAPI 반복 수행

  • 틀린 조건으로 동일한 결과를 내는 쿼리 및 RestAPI 중복 수행

반복/중복 예시 Sequence에서 가입정보를 조회하는 부분이 4군데 있다. 조회 조건으로 가입번호, 전화번호, ID(PK)로 조회 하여 반복 4회, 중복 2회 이지만 실제 조회되 결과는 모두 가입정보로 동일한 결과를 가지는 것으로 빈번한 DB I/O가 발생 하여 성능이 늦어 진다.

2-2. 해결

반복/중복을 되지 않게 코드를 변경하는 것으로 변경하는 다음과 같은 방법으로 변경한다.

2-2-1. Transaction 구간 안에 있는 모든 Method에 파라메터(인수)로 전달

가장 일반적인 방법이지만 가장 안전한 방법으로 Transaction 구간에서 사용한 내부 객체를 만들어서 인수로 전달 하여 사용하고, 데이터의 수정이 발생하면 수정 후 반환 하여 Transaction구간내에서 정합성을 보장하여 처리한다.

2-2-2. Transaction 구간 안애서 사용되는 Local Cache 사용

Transaction 구간 내부에서 메서드를 여러개 호출 하고 있는데 파라메터로 객체를 넘길 수 없는 경우 공유 되는 객체에 대해서 Local Cache를 만들어서 Transaction 구간 안에서만 사용하도록 한다.

주의할 점은 Local Cache를 사용 하므로 Key 구조이다.

2-2-2. Transaction 구간 안애서 사용되는 Local Thread 사용

가장 좋지 않은 방법으로 Thread가 종료 될 때 지워 주어야 한다.

Last updated