왕논의 연구실

KWDC 참가 후기 본문

세미나, 컨퍼런스

KWDC 참가 후기

ywangnon 2023. 8. 1. 00:45

7월 18일, 한국에 있는 거의 모든 iOS 커뮤니티들이 모이는 KWDC가 열렸습니다!

 

애플 홈페이지에서도 공지할 정도로 큰 행사였습니다.

 

가격이 생각보다 비싸서 고민했는데, 회사에서 지원해 줘서 마음 편히 다녀오게 되었습니다. 물론 보고서는 작성하지만요.

 

저는 대부분을 강남 세션에서 들었습니다.

 

그래서 제가 들은 세션에 대해 하나하나 정리할 겸 적어볼까 합니다.

 

<글로벌 앱을 위한 Localization>

개요

애플은 글로벌 앱을 위한 Localization(로컬라이제이션) 기능을 새롭게 소개하였습니다. Localization은 앱을 다양한 문화권과 언어에 맞게 적절히 번역하고, 현지 문화에 적합한 기능과 디자인을 제공하여 사용자들에게 더 나은 경험을 제공하는 것을 목표로 합니다. 이제 우리는 새로운 기능들과 예시를 살펴보며 어떻게 앱을 효과적으로 로컬라이즈 할 수 있는지 알아보겠습니다.

 

핵심 배운 점

1. 숫자 포맷팅: 각 언어와 문화권에 따라 숫자를 표현하는 방식이 다를 수 있습니다. 예를 들어, 프랑스어, 독일어, 스페인어, 이탈리아어의 경우 숫자 15,000은 한국의 "만오천"과는 다르게 "15"를 의미합니다. 따라서 숫자 포맷터(number formatter)를 사용하여 각 언어의 숫자 표현 방식에 맞게 처리해야 합니다.


2. 성별 및 단복수 표현: 스페인어, 포르투갈어, 독일어와 같은 언어에서는 단어의 성별과 단복수 표현이 다를 수 있습니다. 이런 경우 AttributedString를 활용하여 성별에 따라 단어를 다르게 보여주거나, 성별에 무관하게 일반화된 단어를 사용할 수 있습니다.


3. 복수형 표현: 언어별로 0, 1, 2, 3과 같은 복수형 표현이 다를 수 있습니다. 예를 들어, 우크라이나어에서는 0, 1, 2, 3의 경우 모두 다른 형태를 갖습니다. 이런 경우 stringdict를 활용하여 복수형 표현을 관리할 수 있습니다.

 

4. Right to Left(RTL) 텍스트 지원: 아랍어, 히브리어와 같은 언어는 RTL 텍스트를 사용합니다. 이에 따라 앱의 인터페이스와 아이콘 등을 고려하여 적절히 배치해야 합니다.

 

5. 키값 작성 방법: 번역 파일에서 단어의 키값을 정할 때는 간단한 단어만 사용하지 않고, 해당 단어의 위치나 사용 문맥에 따라 추가적인 설명을 붙이는 것이 좋습니다. 이렇게 하면 번역 작업이 더욱 정확하고 효율적으로 이루어질 수 있습니다.

 

import Foundation

func localizedNumberFormat(forNumber number: Double, localeIdentifier: String) -> String? {
    let numberFormatter = NumberFormatter()
    numberFormatter.locale = Locale(identifier: localeIdentifier)
    numberFormatter.numberStyle = .decimal
    return numberFormatter.string(from: NSNumber(value: number))
}

// 테스트
let number = 15000.0

// 한국어 표현 (한국 Locale)
if let koreanFormat = localizedNumberFormat(forNumber: number, localeIdentifier: "ko_KR") {
    print(koreanFormat) // 출력 결과: "15,000"
}

// 독일어 표현 (독일 Locale)
if let germanFormat = localizedNumberFormat(forNumber: number, localeIdentifier: "de_DE") {
    print(germanFormat) // 출력 결과: "15"
}

// 스페인어 표현 (스페인 Locale)
if let spanishFormat = localizedNumberFormat(forNumber: number, localeIdentifier: "es_ES") {
    print(spanishFormat) // 출력 결과: "15"
}

// 이탈리아어 표현 (이탈리아 Locale)
if let italianFormat = localizedNumberFormat(forNumber: number, localeIdentifier: "it_IT") {
    print(italianFormat) // 출력 결과: "15"
}

잘 작성한 건지 모르겠습니다. 필요한 키워드만 후다닥 적어온 거라서...

 

<우리가 모듈화를 할 수 밖에 없는 이유>

모듈화를 하게 된 이유

- 코드량이 증가함에 따라 빌드 시간이 늘어났고, 이를 해결하기 위해 모듈화를 진행하였습니다.

- 모듈화를 위해 모듈 기준을 정의하고, 구조를 정의하였습니다.

 

도구

카카오 뱅크에서는 모듈 구조 정의를 위해 Tuist templetes를 도입했습니다. 또한, 아키텍처 패턴은 Ribs를 적용하였습니다.

 

<좋은 앱은 무엇일까요? 접근성 지원을 위한 첫걸음>

접근성이란? 제한 사항을 고려하여 가능한 많은 사용자가 불편없이 이용하게 하는 것입니다. 애플에서의 접근성이란 손쉬운 사용의 기능들이 적용될 수 있는 것으로 요약할 수 있습니다.

 

<유저스토리를 활용한 프로젝트 진행의 장단점>

비전프로 발표를 보면서 비전프로에서 이커머스를 적용한다면 어떻게 적용할 수 있을까?라는 질문을 스스로에게 해보았다고 합니다. 문제는 자신은 기획에 대해서 잘 알지만, 이에 대한 것은 기술적인 지식이 많이 필요해진다는 것입니다.

 

이를 위해 기존의 폭포수와 같이 기획을 하고 다음 단계의 담당자에게 컨펌받는 식으로는 일의 속도와 정확성이 떨어지게 됩니다. 그로 인해 프로젝트에 대해 팀을 만들어서 해당 프로젝트에 대한 전문성을 높이고 문제를 폭넓게 해결하도록 하는 애자일 방식을 적용하게 되었습니다.

 

그중 문제에 대한 문장을 작성해서 그 문제에 대해 각 담당자가 모여 해결하도록 하는 유저스토리를 적용해 보았습니다.

 

예를 들어 구매자가 상품을 더 자세하게 보고 싶어 할 때 "특정 상품의 상세정보를 볼 수 있다"라는 라는 문장을 유저스토리로 정할 수 있습니다. 상세 정보 페이지를 만든다는 것이 아닌 정보를 보는 것만을 명시하기에 더 넓게 접근할 수 있습니다. 이 문장으로 기존 UI는 상세 페이지를 넘어가는 것을 생각하지만, 비전 프로에서는 상품 자체를 3D 확대한다는 방식을 생각해 볼 수 있게 됩니다.

 

이렇게 새로운 기술로 인해 일하는 방식을 바꾸게 되고 그 덕분에 생산성을 높일 수 있었다고 합니다.

 

하지만, 문제는 각 담당자의 역할이 넓어지게 됩니다. 전에는 내려온 오더를 이행하는 것만을 신경 쓰면 되었지만, 이제는 기획 단계에서부터 붙어서 일하게 되어 담당자들의 역할이 많아지게 됩니다.

 

<iOS 17 커뮤니케이션 도구의 변화>

아이폰의 아이메세지 기능의 발달 역사와 카카오톡에서 이미 적용되었거나 같은 문제를 다르게 해결하는 것을 비교해 보았습니다.

 

결론

회사에서 지원해 주고 가니 맘 편히 들을 수 있었습니다. 보고서를 작성하는 것도 어찌 보면 세미나 한 것을 바로 정리할 기회를 만들어줘서 좋았습니다.

 

구체적인 내용들을 보고서에 적다 보니 여기서는 간단하게만 정리해 보았습니다.

 

영상이 뜨면 관련 자료에 대해 좀 더 정리해 보고 못 본 세션도 정리해 볼까 합니다.