본문 바로가기

우당탕탕 개발기획 일지

220908 디비 튜닝 진행기 / 디비튜닝 의뢰 방법 (1)

728x90

사이트가 느려져 팀원들의 원성을 듣게 되었다.

더 이상 기능 개선이 아니라 근본적인 속도 개선이 필요하다.

이것도 급하고 저것도 급한데 이를 어찌하리. 라는 마음으로 이제서 디비튜닝을 본격적으로 알아보게 되었다.

 

1. 사이트 속도 개선을 위해서는 뭘 해야하지? 

사이트 개선을 위해 디비 튜닝을 해야하는 구나 라는 첫 번째 결론을 도출하기까지는 많은 공부와 정보가 필요했다.

전문가가 곁에 있어서 간단하게 답을 제시해주는 상황이 아니기 때문에 맨 땅에 헤딩하는 기분으로 무작정 구글에 사이트 속도에 관련한 정보를 읽어보았다.

 

2. 디비튜닝부터 해보자!

사이트가 느려지는 데는 다양한 요소가 있다. 그러나 가장 먼저 해볼 수 있는 것은 DB를 살펴보는 것이라는 걸 알았다.

https://dotherealthing.tistory.com/21

 

사이트가 느려지는 이유

다양한 이유가 있으나 아래와 같이 서칭해보았다.  - DB 과부하 설계가 잘못된 경우. 인덱스 처리.  ** DB 튜닝, 최적화 개요  http://blog.skby.net/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-..

dotherealthing.tistory.com

 

3. 어디에 어떻게 의뢰하지?

그렇게 시작된 디비튜닝은 대체 어디서부터 해야할지 몰랐는데,

개발자 지인찬스로 물꼬를 터 조언을 듣고, 크몽에서 괜찮아보이는 분들에게 의뢰를 시작했다.

 

일단 뭘 어떻게 해야할지 몰라서 의뢰 내용도 정확하게 진행하지 못했다.

하지만 일단 역시 시작하면 뭐든 된다.

미리 준비하고 정보를 수집할 수 있는 여력이 있는데 소홀히 여겨 하지 않는다면 뒷 부분에서 고생하게 되지만

전혀 어떻게 해야할지 몰라서 시작을 못하겠는 경우에는 일단 시작하는 것이 도움이 된다.

전문가들과 상담을 하면서 어떤 부분을 미리 준비해야 하는구나, 어떻게 의뢰했어야 하는구나, 비용이나 소요시간은 보통 이렇게 되는구나 에 대한 정보들을 수집할 수 있게 된다.

 

나의 경우에는 정보가 없고 도무지 뭐가 뭔지 몰라서 진행하는데 두려움과 주저함이 컸는데,

상황과 시간에 밀리고, 또 시작은 잘하는 나의 성향으로 인해서 어쨌든 시작을 할 수 있었다.

한 번 상담 받고 견적받는게 뭐가 그리 어려웠냐고 말할 수 있지만, 뭘 물어봐야하는지도 모르는 경우에는 물어보는것조차 버겁다. 희뿌연 안개 속에서 일부분만 보고서 앞으로 나아가는 기분이었다. 하지만 시작을 하지 주변이 점점 밝아졌다!😀

 

상담을 통해 알게 된 내용

<전문가의 간단한 진단 및 개선 방법>
인덱스도 제대로 타기 힘든 경우가 많아서 1차 검증결과 모든 쿼리정보가 인덱스를 제대로 타지 못하고 있다.
한 테이블에 너무 많은 정보들이 있어서 현재 구조는 좀 무거운 편이다.

인덱스만 재구성한다면 크게 문제는 없겠으나, 설계적 한계를 도출한다면 테이블 재설계가 들어가야하는데
테이블 구조가 일부 변경이 되므로 기존 테이블에 데이터 넣는 부분이 변경이 필요할수 있다
기존 테이블 구조를 변경하게 되면 기존에 있던 데이터들에도 변경이 생기된다.

그렇기 때문에 테스트서버에서 테스트 완료 후 실제 테이블 이관하여 테스트를 해본다.
그리고 기존의 테이블은 유지하고 신규 테이블을 만들어서 테스트 하고 적용한다.
그래야 기존것과 비교가 가능하기 때문이다.

만일 테스트 결과 신규 테이블로 변경해도 된다는 판단이 서게 되어서 변경하게 되는 경우 기존 데이터들에 변화가 생기면 마이그레이션도 해준다(=이관쿼리역시 작성하여 준다.)

1차 : 쿼리 재작성을 통한 개선
2차 : 인덱스 구성을 추가하여 개선
3차 : 테이블 재구성을 통한 개선

만일 테스트 서버에서 개선이 됐는데 운영 서버에서 안되면 다시 해준다.

<전문가의 요청사항(우리가 전달한 쿼리에 대해서)>
자잘한 쿼리들이 너무 많아서 저걸 다 하면 수십 건이 나오는데 개선이 불필요한것도 존재한다.
명확하게 순번 + 쿼리정보 이렇게 한셋트로 정리해서 전달 바란다.
저 로그정보에는 어떤걸 기준으로 작성해야할지 중복도 많고 판단이 힘들다.
그래야 총 몇건이며 몇건을 개선했다 라는 평가가 나올 수 있다.

지금 전달해준 쿼리는 단순 쿼리 정보다 너무 많이 포함되어 있다. 로그파일 보면 쿼리가 엄청 많다.
단순쿼리는 COUNT 하는 작업 등의 쿼리는 지금도 1-2초 나오고  있는데 그런것까지 굳이 건수로 잡을 건 아니다.

 

4. 디비 튜닝을 의뢰하는 방법

우리 회사에서 슬로쿼리를 가지고 시작하는데 가장 큰 도움을 준건 카페24였다.

사이트가 느려서 서버 증설이나 어떤 조치를 취해야 하는 지 물어봤더니,

슬로쿼리를 한 무더기 주면서 

하드웨어 부분이 아니라 이 부분을 먼저 손봐라 라는 답을 주었었다.

 

그래서 그걸 크몽에서 전문가에게 그냥 전달하고 이걸 빠르게 개선해주시는데 얼마나 걸리나요 ? 라고 물어보고 다녔다.

 

사실 초안 견적이다보니 몇 분에게는 자세한 설명을 못 들었고,

한 분과 적극적으로 상담받다가 알게 된 것이,

 

이건 특정 시간대 쿼리를 그냥 전체로 준 것이라 정리 된 것이 아니다.

그러므로 아래와 같이 정리된 리스트로 의뢰를 달라는 답변을 받았다.

 

1) 해당 쿼리를 정리한 후

2) 여기서 느린 쿼리를 확인한 후

3) 어떤 쿼리들을 의뢰하고 싶은지 목록을 가져와라

 

여기서부터 정말 마음이 답답했던 것이..우리는 이 쿼리를 정리할 전문가가 없다 ㅠㅠㅠㅠㅠㅠ 

지금 SQL 을 공부하고 있긴 하지만, 시작단계고 

다 공부한다고 해서 이걸 내가 정리할 수 있을까 하는 생각과, 이걸 공부해서 정리하면 어느세월에 하냐라는 생각에..

 

그 다음부터는 해당 쿼리를 정리하는 것까지 견적에 포함해서 아래와 같이 다시 물어보았다.

 

 

<디비튜닝 의뢰 내용>

1. 지난 번 드린 쿼리를 문서 정리요청 (내부에 작업자가 없어서 해당 쿼리를 정리하여 드릴 수 없어 여기부터 요청드립니다.)

2. 1번 쿼리들 중 오전 10-11시 사이 최대 쿼리타임 2초가 지나는 쿼리들을 전체 리스트업

3. 2번 쿼리들 중 개수를 정하여 오전 10-11시 사이 최대 쿼리타임 2초가 지나는 쿼리들을 대상으로 작업

4. 작업에 대해 수정된 DB 또는 파일 소스를 정리 하여 문서에 정리

다행히 한 의뢰인이 정리하는게 번거로운 일이긴 하지만, 웹사이트에서 나오는 것들이라 그렇게 많은 쿼리가 있는 것은 아닐 것이다. 그것까지 해주겠다고 하셨다! 

 

 

덧,

 

우리와 쭉 함께하던 우리의 전담 개발자이신 외주 개발자님은 아래와 같이 나에게 신신당부를 하셨다

 

속도 개선을 위한 작업에 대해 수정된 DB 또는 파일 소스를 정리 바랍니다.

추후 문제 발생 시 확인을 위해 필요합니다.

또한 속도 개선 작업은 속도 확인을 위해 운영 서버에서 작업을 하실 것으로 예상됩니다.

운영서버에 수정이 되면 테스트 서버에도 반영되어야 합니다.

작업하시는 분께서 운영 서버 반영 후 테스트서버에 반영하고 그 내용을 정리하도록 해주세요.

정리된 문서는 추후 공유바라며 저도 확인하겠습니다. 꼭 챙기고 확인하셔야 합니다.

 

시작이 반이라면 이제 정말 시작을 할 수 있는 단계에 온 것 같다.

제발 ! 사이트야 빨라져라! 

아무 사고 없이 개선되길!

728x90