LINE iOS, AttributedString으로 설정 시스템 대규모 리팩터링 성공!

by DD
2개월 전
조회수 46

LINE iOS 앱의 동적 설정 시스템인 '서비스 설정'의 확장성 및 유지보수성 문제를 해결하기 위해 AttributedString 아키텍처를 도입

순환 의존성(Circular Dependency), 불완전한 추상화, 스레드 안전성 부재 등 기존 시스템의 구조적 문제점을 분석하고, AttributedString의 핵심 개념을 활용하여 개선

모듈별 설정 키 정의, 디코딩 캡슐화, Sendable을 활용한 스레드 안전성 확보를 통해 설정 시스템의 안정성을 강화

디버그 오버라이드(Debug Override) 기능 내장 및 고품질 테스트 대역 제공으로 개발 생산성 향상

기존 시스템을 점진적으로 대체하며, 대규모 설정 관리의 새로운 표준을 제시

AttributedString 아키텍처: 설정 시스템의 근본적 변화

본문은 기존 iOS 설정 시스템의 문제점을 해결하기 위해 AttributedString(AttributedString)의 설계를 차용했다. AttributedString은 텍스트 속성을 관리하는 데 특화된 Foundation 프레임워크의 핵심 컴포넌트이다.

AttributeScope(AttributeScope): UIKit, SwiftUI 등 프레임워크별 속성 그룹화

AttributeDynamicLookup(AttributeDynamicLookup): 런타임 비용 없이 타입 수준 라우팅 구현

AttributeContainer(AttributeContainer): 실제 값 저장 및 안전한 읽기/쓰기 제공

이러한 구조를 통해 LINE은 모듈 간의 순환 의존성(Circular Dependency) 문제를 해결하고, 설정 키의 타입 안전성을 확보했다.

기존 시스템 vs. AttributedString 기반 시스템: 비교 분석

기존 iOS 설정 시스템은 일체형 구조로 인해 순환 의존성(Circular Dependency), 불완전한 추상화, 스레드 안전성 부재 등의 문제점을 안고 있었다. 반면, AttributedString 기반 시스템은 다음과 같은 장점을 제공한다.

모듈별 키 정의: 각 모듈에서 독립적으로 설정 키와 전용 값 타입을 정의하여 의존성 문제를 해결

디코딩 캡슐화: decode(from:)과 encode(_:) 메서드를 통해 개별 키 단위의 직렬화 로직 관리

Sendable을 활용한 스레드 안전성: Swift 6의 Sendable 체크를 통해 동시성 문제(Concurrency Issue)를 정적으로 해결

이러한 변화는 코드의 가독성, 유지보수성, 그리고 안정성을 크게 향상시켰다.

AttributedString 기반 설정 시스템의 Best Practice

AttributedString 기반 설정 시스템은 다음과 같은 Best Practice를 제시한다.

모듈 분리: 각 모듈은 자신의 설정 키와 값 타입을 독립적으로 관리하여 결합도를 낮춤

디코딩 캡슐화: decode(from:)과 encode(_:) 메서드를 통해 직렬화 로직을 키 단위로 캡슐화하여 코드 중복을 방지

Sendable 활용: Swift의 Sendable 체크를 통해 동시성 문제를 컴파일 타임에 해결

테스트 용이성: MockConfigurationService를 제공하여 테스트 코드 작성 및 유지보수 용이성 확보

이러한 접근 방식은 대규모 설정 관리 시스템의 설계 및 구현에 대한 새로운 표준을 제시한다.

기존 시스템에서 AttributedString 기반 시스템으로의 마이그레이션

LINE은 기존 설정 시스템을 AttributedString 기반 시스템으로 점진적으로 마이그레이션했다. 마이그레이션 과정에서 다음과 같은 문제에 직면했고, 이를 해결하기 위한 노력을 기울였다.

호환성 유지: 기존 코드와의 호환성을 위해 ConfigurationService 프로토콜을 중심으로 설계

점진적 배포: 새로운 시스템을 점진적으로 배포하여 안정성을 확보

테스트: MockConfigurationService를 활용하여 철저한 테스트 수행

이러한 과정을 통해 LINE은 기존 시스템의 문제점을 해결하고, 새로운 설정 시스템을 성공적으로 구축했다.

AttributedString 기반 설정 시스템의 생태계 확장

AttributedString 기반 설정 시스템은 다음과 같은 생태계 확장을 가능하게 한다.

디버그 오버라이드 기능 내장: 개발자가 디버그 메뉴에서 설정값을 쉽게 변경할 수 있도록 지원하여 개발 생산성 향상

고품질 테스트 대역 제공: MockConfigurationService를 통해 테스트 코드 작성 및 유지보수 용이성 확보

향후 확장성: 새로운 설정 키와 값 타입을 쉽게 추가할 수 있도록 설계되어 미래 확장에 대한 유연성 확보

이러한 생태계 확장은 LINE iOS 앱의 개발 효율성을 높이고, 더 나아가 대규모 설정 관리 시스템의 새로운 표준을 제시한다.

AttributedString 구조로 풀어낸 대규모 iOS 설정 시스템