⚡ Bolt: [성능 최적화] Inline 해시 연산 및 메모리 할당 제거#183
Conversation
- `process_dir` 내에 있던 CSS 템플릿과 `MessageDigest.getInstance("SHA-256")` 해시 연산을 파일 최상단 전역 상수로 추출
- 디렉토리 깊이가 깊어질수록 O(N)으로 발생하던 연산 오버헤드 방지
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
- `process_dir` 내에 있던 CSS 템플릿과 `MessageDigest.getInstance("SHA-256")` 해시 연산을 파일 최상단 전역 상수로 추출
- 디렉토리 깊이가 깊어질수록 O(N)으로 발생하던 연산 오버헤드 방지
- Jacoco 커버리지 유지를 위해 상수를 `private val`로 선언하여 불필요한 getter 생성 방지
- `process_dir` 내에 있던 CSS 템플릿과 `MessageDigest.getInstance("SHA-256")` 해시 연산을 파일 최상단 전역 상수로 추출
- 디렉토리 깊이가 깊어질수록 O(N)으로 발생하던 연산 오버헤드 방지
- Jacoco 커버리지 유지를 위해 상수를 `private val`로 선언하여 불필요한 getter 생성 방지
- `process_dir` 내에 있던 CSS 템플릿과 `MessageDigest.getInstance("SHA-256")` 해시 연산을 파일 최상단 전역 상수로 추출
- 디렉토리 깊이가 깊어질수록 O(N)으로 발생하던 연산 오버헤드 방지
- Jacoco 커버리지 유지를 위해 상수를 `private val`로 선언하여 불필요한 getter 생성 방지
- `dir_files.sortWith(compareBy({it.name}))`를 `dir_files.sortBy { it.name }`으로 변경하여 빈 리스트나 1개 요소 리스트 정렬 시 불필요하게 생성되는 Comparator 인스턴스 할당 오버헤드 제거
- 파일 시스템 뷰 순회 등 잦은 리스트 정렬에서 발생하는 GC 부하 감소
💡 What:
src/main/kotlin/html4tree/main.kt에서process_dir함수가 호출될 때마다 실행되던 CSS 템플릿 생성 및 SHA-256 스타일 해시 연산을 파일의 최상단 전역 상수로 분리했습니다.🎯 Why:
해당 애플리케이션은 디렉토리를 순회(
process_dir)하며 HTML을 생성하는데, 반복되는 순회 작업 시 템플릿 스트링 할당과 특히MessageDigest.getInstance와 같은 무거운 암호화 해시 연산이 매 디렉토리 방문마다 중복으로 발생하여 불필요한 성능 저하와 메모리 낭비(Allocation)를 유발하고 있었습니다.📊 Impact:
디렉토리 개수가 늘어날수록 선형적으로 증가하던 해시 계산(SHA-256) 비용과 대규모 템플릿 문자열의 인스턴스화 비용이 O(1) 초기 셋업 비용으로 대폭 감소합니다. 대규모 저장소 크롤링 시 CPU 및 메모리 점유율의 뚜렷한 개선을 기대할 수 있습니다.
🔬 Measurement:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 && ./gradlew clean test jacocoTestReport jacocoTestCoverageVerification --continue를 실행하여 모든 기능이 정상 동작하고 기존 코드 커버리지가 유지됨을 확인합니다.PR created automatically by Jules for task 2423400945189706006 started by @seonghobae