본문 바로가기
반응형

전체 글72

6편. [Flutter] 지하철 다음 역 도착 앱 만들기 ⑥ Windows에서 iOS 앱 배포하기 iOS 앱을 빌드하려면 Mac의 Xcode가 필요한데, 개발 환경은 Windows였습니다. 그래서 클라우드 macOS에서 빌드하는 Codemagic과 TestFlight로, Mac 없이 아이폰 실기기에 앱을 올렸습니다.💡 준비물Apple Developer Program: 연 $99입니다. TestFlight로 내 아이폰에 설치하는 것부터 이 멤버십이 필요합니다.번들 ID: iOS 번들 ID에는 언더스코어(_)를 쓸 수 없어서, Android는 com.woohyung.subway_eta, iOS는 com.woohyung.subwayEta로 다르게 정했습니다.App Store Connect API 키(.p8): Codemagic이 서명하고 업로드할 때 씁니다. 파일은 한 번만 내려받을 수 있어서 바로 백업.. 2026. 10. 4.
5편. [Flutter] 지하철 다음 역 도착 앱 만들기 ⑤ API 역 이름이 공식 이름과 다를 때 실시간 도착 API에 "천호"로 조회하면 0건이 오고, "천호(풍납토성)"으로 조회해야 결과가 옵니다. 역 선택 화면을 만들면서 공식 역 데이터와 실시간 API의 이름을 맞추다가 발견한 문제입니다.💡 역 데이터 구하기서울시 Open API로 역 데이터 세 가지를 받았습니다. 이 데이터는 실시간 지하철 키가 아니라 별도의 일반 인증키가 필요합니다.서비스내용범위역간 거리·소요시간노선별 역 순서, 역 사이 소요시간, 누적 거리1~8호선 278개 역노선별 역 정보역명, 노선, 역 코드, 외부 코드799개 역역사 정보역명, 노선, 위도·경도784개 역역 순서는 1~8호선만 있어서, 나머지 노선은 외부 코드 순서로 만들었습니다. 2호선 성수·신정 지선, 5호선 마천/하남 분기 같은 갈래도 외부 코드로 표현할 수 .. 2026. 10. 4.
4편. [Flutter] 지하철 다음 역 도착 앱 만들기 ④ 센서로 공공 API의 지연 보정하기 공공 API가 40~60초 늦게 오는 건 앱에서 바꿀 수 없습니다. 그래서 폰의 가속도 센서로 "지금 멈췄다"를 직접 감지해서, API보다 먼저 역 도착을 알아채도록 했습니다. 재생 테스트에서는 센서가 API의 도착 표시보다 7~8초 빨랐습니다.💡 자동 탑승: 후보를 여러 개 두고 실제 출발로 확정종착역에서 엉뚱한 열차를 잡던 문제는, 후보를 하나만 고르던 방식 때문이었습니다.대기 목록의 가까운 열차를 모두 후보로 둡니다.폰에서 열차 진동이 감지되면 "탄 열차를 확인하는 중이에요"를 보여 줍니다.위치 API에서 실제로 출발한 열차가 확인되면 그 열차로 확정합니다.확정한 뒤에는 "자동으로 찾은 열차 · 마천 18:42 출발 확인"처럼 무엇을 잡았는지 보여 주고, 틀렸으면 "다른 열차예요"로 되돌릴 수 있.. 2026. 10. 4.
3편. [Flutter] 지하철 다음 역 도착 앱 만들기 ③ 실제 지하철에서 테스트하기 에뮬레이터에서 잘 돌던 앱을 5호선 마천→오금 구간에서 처음 타 봤더니, 세 가지 문제가 한꺼번에 드러났습니다. 감으로 고치지 않기 위해 테스트 전에 진단 기록 기능부터 넣었고, 그 기록을 그대로 재생 테스트로 만들었습니다.💡 진단 기록부터 넣기실차 테스트를 "잘 되는 것 같다" 수준으로 끝내지 않으려고, 안내 중에 일어나는 일을 전부 기록하게 했습니다.1초마다 가속도 흔들림 수치와 그때의 상태(정차·주행)대기 중 들어오는 열차의 도착 상태 코드, 남은 초, 서울시 수신 시각자동 탑승 후보와 확정·취소, 탑승 중 열차 위치와 남은 초, 도착 판정기록은 기기 메모리에만 두고 서버로 보내지 않습니다. TestFlight 빌드에서만 켜지고, 안내가 끝나면 텍스트로 복사할 수 있습니다.💡 문제 1. 종착역에.. 2026. 10. 4.
2편. [Flutter] 지하철 다음 역 도착 앱 만들기 ② API 키를 숨기는 프록시 서버 앱이 서울시 API를 직접 부르지 않고, FastAPI로 만든 프록시 서버를 거치게 했습니다. API 키를 숨기고, 하루 1,000회 호출 한도를 아끼고, 서울시 API의 특이한 오류 응답을 서버에서 정리하기 위해서입니다.💡 왜 프록시 서버가 필요한가키 노출: 키를 앱에 넣으면 앱을 풀어 보는 것만으로 키가 드러납니다. 게다가 서울시 API는 키가 URL 경로에 들어갑니다.호출 한도: 실시간 지하철 키는 하루 1,000회까지만 호출할 수 있습니다. 사용자마다 직접 부르면 금방 바닥납니다.http 전용: 서울시 API는 http만 지원합니다. 앱에서 부르려면 Android와 iOS에 평문 통신 예외를 둬야 합니다.💡 캐시와 single-flight역별 도착 정보와 호선별 위치를 10초 동안 메모리에 캐.. 2026. 10. 4.
1편. [Flutter] 지하철 다음 역 도착 앱 만들기 ① 기지국에서 공공 API로 지하철에서 다음 역 도착 시간을 초 단위로 보여 주는 앱을 보고, 똑같이 만들어 보기로 했습니다. 처음엔 기지국을 쓴다는 이야기를 듣고 그 방향을 검토했지만, 결국 서울시 실시간 공공 API와 열차 번호 추적으로 방향을 바꿨습니다.💡 기지국 방식을 검토한 결과기지국 방식은 폰이 붙어 있는 셀 ID를 읽어서 지금 어느 구간인지 추정하는 방법입니다. 지하에서는 GPS가 안 잡히지만, 지하철 구간마다 중계기가 있어서 셀 ID로 위치를 짐작할 수 있습니다.Android는 TelephonyManager.getAllCellInfo()로 LTE/5G 셀 정보를 읽을 수 있습니다. 단, 위치 권한이 필요합니다.iOS는 OS가 셀 ID 접근을 막고 있어서 같은 방식이 불가능합니다.셀 ID와 구간을 연결한 데이터베이스를.. 2026. 10. 4.
[Java] STS 4 설치 및 설정 [MySql] MySql 설치 및 환경변수 설정 💡MySql 설치하기 1.MySql 공식 홈페이지 들어가서 자신의 운영체제에 맞는 버전을 다운 받습니다. https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Note: MySQL 8.0 is the final series richwish.tistory.com [Java] JDK 설치 (설치,환경변수 설정,버전 확인) 💡JDK 설치 1. 먼저 자바를 설치하기 위해 하단 링크로 접속합니다. https://www.oracle.com/technetwork/java/javase/downloads/index.html Download the Latest J.. 2023. 10. 29.
[MySql] MySql 설치 및 환경변수 설정 💡MySql 설치하기 1.MySql 공식 홈페이지 들어가서 자신의 운영체제에 맞는 버전을 다운 받습니다. https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8.1, use a MySQL product's MSI or Zip archive for installation. MySQL Server 8.1 and higher also bundle MySQL Configurator, a tool that helps configure MySQL Server. dev.mysql... 2023. 10. 26.
반응형