2FA 앱, 정규식 최적화와 병렬 처리로 성능 2배 향상!

by DD
2개월 전
조회수 24

2FA 앱의 성능 병목 현상을 분석하고, 정규 표현식(Regex) 최적화를 통해 계산 시간을 획기적으로 단축함

병렬 처리를 도입하여 여러 CPU 코어를 활용, 전반적인 처리 속도를 향상시킴

액터(Actor) 기반의 동기화 기법을 사용하여 병렬 처리 과정에서 발생하는 경쟁 조건 문제를 해결함

앱 출시 후에도 지속적인 성능 개선을 통해 사용자 경험(UX)을 향상시키는 과정을 제시함

정규 표현식(Regex) 최적화를 통한 성능 개선

저자는 2FA 코드의 '흥미로운 숫자' 패턴을 감지하기 위해 사용된 정규 표현식(Regex)이 성능 병목 현상의 주범임을 확인했다. 특히, '666666'과 같은 섹스튜플(Sextuple) 패턴을 감지하는 `checkThoseSexts()` 메서드는 전체 처리 시간의 상당 부분을 차지했다. 저자는 정규 표현식 대신 문자열 비교(String Matching) 방식을 사용하여 성능을 획기적으로 개선했다. 정규 표현식(Regex)을 직접 하드코딩된 문자열 집합으로 대체하여, `checkThoseSexts()` 메서드의 실행 시간을 30배 이상 단축했다.

병렬 처리를 통한 TOTP 코드 생성 속도 향상

저자는 TOTP(Time-based One-Time Password) 코드 생성을 위해 병렬 처리(Parallelism)를 도입하여, 여러 CPU 코어를 활용하도록 했다. 초기에는 각 스레드가 독립적으로 코드를 생성하는 방식을 사용했지만, UI가 멈추는 문제가 발생했다. 이를 해결하기 위해, 저자는 CPU 코어 수에 맞춰 스레드 수를 제한하고, 각 스레드가 계산할 코드 범위를 조정했다. 이로 인해, 전반적인 코드 생성 속도를 56% 향상시켰다.

액터(Actor) 기반의 동기화(Synchronization) 구현

병렬 처리 과정에서 발생하는 경쟁 조건(Race Condition) 문제를 해결하기 위해, 저자는 액터(Actor)를 활용했다. 액터는 상태(State)에 대한 안전한 접근을 보장하며, 여러 스레드에서 동시에 접근하는 것을 방지한다. 저자는 `CodeIncrementor` 액터를 사용하여 각 스레드가 중복 없이(Without Duplication) 다음 TOTP 코드를 계산하도록 했다. 이로써, 병렬 처리의 안정성을 확보하고, 정확한 코드 생성을 보장했다.

성능 프로파일링(Profiling) 도구 활용

저자는 Xcode Instruments를 사용하여 앱의 성능 병목 현상을 정확하게 파악했다. 특히, Time Profiler를 활용하여 CPU 사용량을 분석하고, 코드 실행 시간을 측정했다. 이를 통해, 정규 표현식(Regex)의 성능 저하, 초기 코드 로딩 시간 지연 등의 문제를 발견하고, 개선 방향을 설정했다. 저자는 프로파일링(Profiling)을 통해 얻은 데이터를 기반으로, 구체적인 코드 개선을 수행했다.

앱 출시 후 성능 개선의 중요성

저자는 앱 출시 후에도 지속적인 성능 개선의 중요성을 강조하며, 사용자 피드백(User Feedback)을 기반으로 개선 사항을 도출해야 한다고 언급했다. 또한, 성능 개선 과정을 통해 얻은 통찰력을 공유하며, 개발자들이 지속적인 성능 관리(Performance Management)를 통해 사용자 경험을 향상시킬 수 있음을 보여주었다. 저자는 성능 개선을 통해 앱의 가치를 높이고, 사용자 만족도를 극대화할 수 있음을 강조했다.

The 2FA app that tells you when you get `314159`