◈ Refactoring

    [튜닝일지] 4. 숫자 ID vs 텍스트 ID [백엔드 개발자의 쿼리 튜닝일지]

    4. 숫자 ID vs 텍스트 ID 사이드 프로젝트를 준비하면서 고민한 ID 타입에 대한 공부와 고찰을 남겨보려 한다. 1) 숫자 ID [ ex) 3451832 ] - 장점 숫자는 일반적으로 텍스트보다 작은 공간을 차지하기 때문에 인덱스 생성 및 검색이 빠르다. 데이터베이스에서 숫자 인덱스를 사용하면 메모리 사용량을 줄일 수 있다. 자동 증가(Auto-increment)와 같은 기능을 이용하여 쉽게 새로운 ID를 생성할 수 있다. - 단점 가독성이 떨어질 수 있다. 숫자 ID는 사용자에게 의미 있는 정보를 전달하지 않는다. 데이터베이스에서 무작위로 할당된 ID를 사용할 경우, 보안상의 문제가 발생할 수 있다. 2) 텍스트 ID [ ex) user123 ] - 장점 가독성이 좋다. 텍스트 ID는 해당 사용자..

    [튜닝일지] 3. 믿었던 Function이 날 배신했다. [백엔드 개발자의 쿼리 튜닝일지]

    3. 믿었던 Function이 날 배신했다. 지난 쿼리 튜닝으로 기존 대비 절반 이상으로 실행 속도를 절감시켰다. 그러나 여기서 튜닝을 멈추지 않았다. 아니 멈출 수 없었다. 이번에 건드린 건 Function(≒Procedure, 프로시저)였다. Function을 주석하고 실행하면 신기하게도 실행 속도가 빨라졌다. 왜 그런 것일까요? GPT 선생님께 여쭤보았습니다. 더보기 MySQL에서 함수가 인덱스를 사용하는지 여부는 함수의 형태와 쿼리의 구성에 따라 다릅니다. 일반적으로, MySQL은 함수를 사용하여 쿼리를 실행할 때 인덱스를 사용하지 않습니다. 함수는 쿼리에서 조건절에 사용되는 경우 인덱스를 사용할 수 있는 기회를 제한합니다. 예를 들어, 다음과 같은 쿼리에서는 인덱스를 사용할 수 없습니다. SEL..

    [튜닝일지] 2. JOIN, 잘 좀 만나봅시다. (feat. or 조건) [백엔드 개발자의 쿼리 튜닝일지]

    [튜닝일지] 1. 인덱스, 너 잘 타고 있니? [백엔드 개발자의 쿼리 튜닝일지] 1. 인덱스, 너 잘 타고 있니? 이번에 담당하게 된 프로젝트가 있는데 사이트 로딩 속도가 매우 느렸다. 아래와 같이 쿼리 조회 자체가 안되는 경우도 많아서 쿼리부터 개선 해보자는 마음으로 시 yermi.tistory.com 2. JOIN, 잘 좀 만나봅시다. (feat. or 조건) 지난 번에는 인덱스를 태우기 위해 특정 컬럼을 서브쿼리로 변경하였다. 이번 쿼리는 실행속도가 약 5초 정도 걸렸으나, 이전 인덱스 작업을 한 view를 참조하고 있었기에 3초 중반 정도로 개선이 되었다. 이번에는 이 쿼리를 1초 중반대로 줄여볼 예정이다. EXPLAIN으로 성능검사를 해보니, rfd라는 테이블이 인덱스를 안타고 있었다. or 조..

    [튜닝일지] 1. Index, 너 잘 타고 있니? [백엔드 개발자의 쿼리 튜닝일지]

    1. Index, 너 잘 타고 있니? 이번에 담당하게 된 프로젝트가 있는데 사이트 로딩 속도가 매우 느렸다. 아래와 같이 쿼리 조회 자체가 안되는 경우도 많아서 쿼리부터 개선 해보자는 마음으로 시작했다. (웹에서도 관련 기능이 당연히 동작 안하는데, 고객사는 안되는 거라 생각하고 못쓰고 있었다고 한다..😂😂) 소스를 분석하면서 view에서 실행속도가 느리다는 걸 파악했다. view가 view를 join하고 중첩하여 참조하다보니 실행 속도가 배로 느려진 것.. (이 중 300초 초과되는 검색과 관련된 view는 특정 view를 3번에 걸쳐 참조하고 있었다.) 보안 상의 이유로 view 이름을 공개할 수는 없지만, 위에 표에서 노란색으로 되어 있는 view는 성능이 낮은 모든 view에서 참조하고 있었다. ..

    [Project] Java Servlet 리팩토링 : 동물의 숲 커뮤니티(1) [Spring Boot 프로젝트 생성]

    [Project] 자바 프로젝트 리팩토링 : Library Service - THE END - 자바 프로젝트 리팩토링 : Library Service - THE END 자바 프로젝트로 만들어진 Library Service의 리팩토링이 끝났다. 이번 리팩토링하면서 느낀 점은, 1. Clean Code. 가독성과 효율성을 잡는 코드는 무엇인 yermi.tistory.com - Java Servlet 리팩토링 : 동물의 숲 커뮤니티(1) 두 번째 리팩토링은 Java Servlet, JSP 프로젝트이다. 이 프로젝트는 Spring을 배우기 전에 작업한 과제이다 보니 코드가 많이 레거시하다. (프로젝트를 하나하나 뜯어보며 Spring Boot로 리팩토링 할 예정) 작업하기 앞서 프로젝트를 먼저 생성하였다. Spr..