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 56 앱을 App Store와 Google Play에 배포하기Expo 앱을 배포한다고 하면 보통 eas build 명령 하나를 떠올립니다. 실제 운영 배포는 빌드, 앱 서명, 스토어 업로드, 베타 테스트, 심사, 공개 출시, OTA 업데이트가 서로 다른 단계입니다. 이 구분을 놓치면 CI가 성공했는데 스토어에는 앱이 없거나, JavaScript 수정이라고 생각해 OTA를 발행했는…
- 차량 상태 동기화: Push, WebSocket과 Polling을 함께 쓰는 이유커넥티드 카 앱의 차량 상태는 한 번 조회하고 끝나는 데이터가 아닙니다. 도어, 공조, 충전과 차량 온라인 상태는 앱 밖에서도 계속 바뀝니다. 사용자가 원격 명령을 실행하는 동안에도 이전 상태 이벤트와 새로운 조회 응답이 다른 순서로 도착할 수 있습니다.
- 커넥티드 카 원격 명령: 요청부터 차량 응답까지의 상태 관리커넥티드 카 앱에서 도어 잠금이나 공조 시작 버튼을 누르면 요청은 여러 시스템을 통과합니다. 앱이 서버 요청에 성공했다고 차량 기능까지 실행된 것은 아닙니다. 명령이 차량에 도착하고 제어 장치가 결과를 반환해야 비로소 실행 여부를 판단할 수 있습니다.
- BLE 차량 제어: GATT 연결과 저전력 통신을 안정화하는 방법BLE는 차량과 휴대폰이 가까이 있을 때 작은 데이터를 주고받는 데 적합합니다. 디지털 키, 근거리 도어 제어와 차량 식별처럼 연결 시간이 짧고 배터리 소비를 줄여야 하는 기능에서 자주 사용됩니다.