쿼리 오류 해결 과정

SoHEeeeeee·2023년 12월 29일
0
post-thumbnail

👩🏻‍💻문제점

시작은 회사 관리자 페이지 로딩 시간이었다.
몇몇 페이지를 제외하고는 대부분의 페이지를 여는데 7초 이상이 소요되는 문제였다.

처음에는 이 문제를 어떻게 해결하나 막막했다.
회사에 와서 배운점은 문제 해결의 시작은 로그라는 것이다.


원인파악

관리자 페이지의 로그를 보기 시작했다.
로딩이 걸리고 화면이 보여지기까지 특정 메소드에서 시간을 오래 잡아먹는 것을 확인했다.

[2023-12-29 09:14:17:56872034][http-nio-18080-exec-6] INFO  log.log - method name is select****

해당 메소드의 코드를 살펴보았고 쿼리까지 찾아냈다.
해당 쿼리의 파라미터 값은 로그인 아이디를 사용했기에 관리자 아이디를 넣고 쿼리를 실행해보자 7초 이상이 소요되는 것을 확인했다.

이 쿼리에 대한 튜닝이 필요한 시점이었다.


체크사항1

일단 이 쿼리가 어디에서 사용되고 있는지를 확인해보았다. 해당 메소드를 호출하는 자바스크립트 공통 코드를 확인하게 되었다.

해당 function은 각 페이지마다 사용되고 있었다.

function ****(){
	$.ajax({
        type: 'get',
        url: '/***/***/**',
		async:false,
        dataType: 'json',
        success: function (data) {
            *** = data;
            ***(this);
        },
        error: function (message) {
            alert(message);
        }
    });
}

이 기능은 아이디 리스트를 가져오는 데 사용하고 있었고 모든 페이지에서 활용되는 기능이었기에 대부분의 페이지에서 로딩이 오래 걸렸던 것이다.


체크사항2

그리고 쿼리에서 가져오는 결과값을 어떻게 활용하고 있는지를 파악했다.

이 과정에서 알게된 점은(팀장님을 통해서도 확인했다.) 해당 쿼리가 여러 개발 단계를 거치면서 불필요한 값들을 가져오고 있었고 일부 컬럼은 오류가 있어 중복된 데이터를 줄지어 가져오고 있었다.

그래서 필요한 컬럼만 select하도록 수정했다.


쿼리 오류 해결

쿼리를 수정하는 과정에서 애초에 값을 잘못 가져오고 있다는 걸 생각하지 못하고 기존에 가져오는 값들을 그대로 가져오되 속도를 높여야 한다고만 생각했다.
(* 그럼에도 큰 문제 없이 페이지가 운영되었던 건 자바스크립트 코드에서 필요한 데이터를 걸러주는 코드가 있었기 때문이었다.)

이때 내가 놓쳤던 건 최종적으로 쿼리에서 출력된 데이터를 프론트단에서 어떻게 조건을 주고 화면 상에 출력되는지를 보았어야 했는데 기존 쿼리가 출력하는 값을 똑같이 만들어서 속도를 줄이는 데에만 초점을 맞췄다는 것이다.

그리고 각각의 파라미터마다 값을 가져오는 패턴을 찾다가 시간을 많이 허비한 점도 문제였다. (애초에 데이터를 잘못 가져오고 있었으니.. 어떤 값은 모든 데이터를 가져오고 어떤 값은 본인 데이터 한 개만 가져왔다. 값을 가져오는 기준점을 도저히 알아낼 수 없었다.)

최종적으로는 필요한 데이터만 출력하도록 수정하는 것으로 문제를 해결하게 되었다. 기존 쿼리보다 엄~청 간결하게 수정되었다.


결론

회사 코드를 올릴 수 없어 나중에 내가 다시 보았을 때 이 내용이 낯설 수 있겠으나, 향후 쿼리 문제를 해결할 때 쿼리 단독의 문제로만 볼 것이 아니라 해당 오류 코드의 전체적인 흐름을 보며 수정할 부분을 체크하고 찾는 과정도 필요하다는 것을 기억하자.

🙋🏻‍♀️ 속도 문제는 쿼리 자체를 수정하는 게 최종적인 방법이겠지만 프론트단에서 어떻게 조건을 주고 값이 변경되어 출력되는지도 체크해 볼것.

profile
주니어 개발자

0개의 댓글