Name-kit: 모든 이름을 짓는 앱의 방향과 Expo SDK 57 전환
처음 만들려고 했던 것은 크리스천 작명 앱이었습니다. 이름의 뜻과 신앙적 가치를 함께 살피는 도구를 생각했습니다. 그런데 방향을 구체화할수록 작명의 범위를 한 분야에만 묶을 이유가 없다는 쪽으로 생각이 바뀌었습니다.
사람 이름부터 브랜드, 가게, 서비스, 프로젝트, 콘텐츠, 반려동물과 캐릭터까지 이름이 필요한 대상은 계속 생깁니다. 개발 쪽으로 가면 함수명과 변수명도 같은 문제를 품고 있습니다. 그래서 앱 이름을 Name-kit으로 정하고, 목표를 “세상의 모든 이름을 짓는 도구”로 다시 잡았습니다.
크리스천 작명은 하나의 전문 키트가 됐습니다
처음 구상한 크리스천 작명을 버린 것은 아닙니다. 범용 작명 안에 억지로 섞지 않고, 말씀과 신앙 가치, 한자 풀이처럼 고유한 입력이 필요한 전문 키트로 두었습니다.
브랜드나 프로젝트처럼 공통 질문으로 충분한 분야는 대상 설명, 핵심어, 분위기와 언어를 조합하는 공통 흐름을 사용합니다. 반면 크리스천 작명처럼 별도 기준이 필요한 분야는 전용 입력 화면과 생성 규칙을 연결합니다. 어느 쪽에서 만든 이름이든 결과 모델과 보관함은 함께 씁니다.
이 구조라면 새로운 분야를 추가할 때 앱 전체를 다시 만들 필요가 없습니다. 단순한 분야는 키트 메타데이터를 추가하고, 검증 규칙이 복잡한 분야만 전문 흐름으로 확장하면 됩니다.
함수명을 넣자 앱의 구조가 더 선명해졌습니다
개발자 네이밍을 넣으면서 “이름”의 범위를 다시 보게 됐습니다. 함수명, 변수명, 컴포넌트명, 클래스명, 훅, API 경로, 데이터베이스 테이블과 패키지명도 결국 대상의 역할과 맥락을 짧게 압축하는 일입니다.
다만 사람에게 읽히는 이름과 코드 심볼은 제약이 다릅니다. 개발자 키트에는 TypeScript, Python, Swift, Kotlin, Dart와 Go를 넣고, 언어별 표기 관습을 선택하도록 했습니다. 공통 생성 흐름을 공유하되 결과를 평가하는 규칙은 분야에 맞게 분리한 이유입니다.
Expo SDK 57 전환에서 두 번 막혔습니다
프로젝트는 Expo SDK 56으로 시작했지만 바로 SDK 57로 올렸습니다. 현재 조합은 Expo 57.0.13, React Native 0.86.2, React 19.2.3입니다.
첫 번째 문제는 의존성 자동 선택이었습니다. 업그레이드 도중 react-dom 19.2.8이 선택됐는데, 프로젝트의 React는 Expo SDK 57이 요구하는 19.2.3이었습니다. peer dependency가 충돌하면서 설치가 중간에 멈췄습니다. react-dom을 19.2.3으로 직접 맞추고 react-native-web 버전도 SDK 57 범위로 고정한 뒤 의존성이 정리됐습니다.
두 번째는 시뮬레이터였습니다. 개발 서버를 8082에서 띄웠는데 화면에는 예전 개발 서버의 8081 포트를 불러오지 못했다는 오류가 나왔습니다. 처음에는 SDK 57 번들 문제를 의심했습니다. 실제 원인은 시뮬레이터에 남아 있던 다른 개발 앱이 예전 주소를 잡고 있던 것이었습니다. 그 앱을 종료하고 Expo Go로 프로젝트 주소를 다시 열자 Name-kit 화면이 정상적으로 나타났습니다.
마지막으로 Expo Doctor 21개 검사를 모두 통과했고, TypeScript 검사와 iOS·Android 정적 번들 생성도 확인했습니다. iOS 시뮬레이터에서는 SDK 57 Expo Go로 실제 홈 화면까지 열었습니다.
npm run ios의 의미를 다시 정했습니다
실행 방법을 설명하다 보니 npm run ios와 npx expo run:ios가 섞여 있었습니다. 둘의 차이는 도구보다 프로젝트 스크립트에 있습니다. npx는 설치된 Expo 실행 파일을 직접 부르고, npm run ios는 package.json에 적어 둔 명령을 실행합니다.
처음에는 npm run ios가 곧바로 네이티브 Xcode 빌드를 실행했습니다. 일상적으로 쓰기에는 무거웠습니다. 그래서 빠른 실행과 네이티브 빌드를 이름으로 구분했습니다.
# 개발 서버와 시뮬레이터
npm run ios
npm run android
# 로컬 네이티브 빌드
npm run ios:native
npm run android:native
# USB로 연결한 실제 단말에 설치
npm run ios:device
npm run android:device같은 Wi-Fi에서 Expo Go 연결이 되지 않을 때는 npm run start:tunnel, Metro 캐시가 의심될 때는 npm run start:clear를 사용합니다. 명령 자체가 짧아진 것보다 어떤 종류의 실행인지 이름만 보고 판단할 수 있게 된 점이 더 중요했습니다.
실제 단말 검증은 아직 남아 있습니다
현재 확인한 범위는 iOS 시뮬레이터와 양 플랫폼 정적 번들까지입니다. 실제 iPhone과 Android 단말의 네이티브 설치는 아직 검증하지 않았습니다. iPhone에서는 개발자 모드와 코드 서명, Android에서는 SDK와 USB 디버깅 설정을 함께 확인해야 합니다.
앱의 범위는 넓어졌지만 다음 판단 기준은 오히려 단순합니다. 새 키트를 몇 개 더 넣는 것보다, 사용자가 맥락을 입력했을 때 실제로 저장하고 싶은 이름이 나오는지를 먼저 확인해야 합니다. 실제 단말 설치와 함께 이 생성 품질을 다음 단계에서 점검할 생각입니다.
함께 읽기
- Flutter와 React Native, 장단점보다 먼저 봐야 할 기술 선택 기준앱 개발 상담에서 자주 나오는 질문이 있습니다. "Flutter와 React Native 중 무엇이 더 좋은가요?"
- Expo의 역사: SDK 0에서 CNG와 개발 빌드까지Expo를 설명할 때 가장 자주 붙는 말은 "React Native를 쉽게 쓰게 해 주는 도구"입니다. 틀린 설명은 아니지만 지금의 Expo를 이해하기에는 범위가 너무 좁습니다. Expo는 미리 만들어진 앱에서 JavaScript를 실행하던 초기 경험을 출발점으로 삼았고, 지금은 네이티브 프로젝트 생성과 모듈 개발, 라…
- Expo SDK 56 앱을 App Store와 Google Play에 배포하기Expo 앱을 배포한다고 하면 보통 eas build 명령 하나를 떠올립니다. 실제 운영 배포는 빌드, 앱 서명, 스토어 업로드, 베타 테스트, 심사, 공개 출시, OTA 업데이트가 서로 다른 단계입니다. 이 구분을 놓치면 CI가 성공했는데 스토어에는 앱이 없거나, JavaScript 수정이라고 생각해 OTA를 발행했는…
- Expo 앱 다국어: 사전의 키를 한국어 원문으로 둔 이유성경 지도 앱에 언어 다섯 개를 더했습니다. 영어, 일본어, 중국어 간체와 번체, 스페인어입니다. 화면이 하나뿐이고 서버도 없는 앱이라 붙이는 일 자체는 간단할 줄 알았는데, 번역문을 어디에 둘지에서 막혔습니다.
- EAS의 역사: 앱 빌드에서 모바일 배포 플랫폼까지EAS를 eas build 명령어의 이름으로만 이해하면 서비스의 절반만 보게 됩니다. EAS는 Expo Application Services의 약자입니다. 소스 코드를 앱 바이너리로 만들고, 스토어에 전달하고, 이미 설치된 앱에 호환되는 업데이트를 보내는 모바일 배포 과정을 여러 서비스로 나눈 플랫폼입니다.