
내 컴퓨터에서만 되던 걸 링크 하나로, 폰에 깔리는 앱으로. 어디에 올리고 뭘 조심하는지 순서대로. 내 화면에서만 되면 아직 아무도 못 쓰니까.
지난 호에서 첫 결과물을 만들었다면, 그건 아직 내 컴퓨터 안에만 있다. 주소창의 localhost는 "이 컴퓨터"라는 뜻이라, 그 링크를 남한테 보내면 안 열린다. 만드는 것과 남이 쓰게 하는 것은 다른 일이고, 많은 사람이 바로 여기서 멈춘다.
내보낸다는 건 두 가지 중 하나다. 웹이면 어딘가 항상 켜져 있는 컴퓨터(서버)에 올려 두고, 그 주소(링크)를 나눠주는 것. 앱이면 사람들 폰에 깔리게 하는 것. 지난 호에서 웹이냐 앱이냐를 정했으니, 이번엔 그걸 각각 어떻게 내보내는지 본다.
웹은 둘로 갈린다. 파일만 있는 것이냐, 서버가 도는 것이냐. 지난 호에서 "저장할 게 있나"로 갈렸던 그 갈림이 여기서 그대로 이어진다.
| 내 웹은 | 어디에 올리나 (처음엔) | 링크 모양 |
|---|---|---|
| 파일만 (HTML·JS) | Cloudflare Pages · GitHub Pages · Netlify · Vercel (전부 무료 시작) | 이름.pages.dev 같은 무료 주소 |
| 서버가 도는 것 | Railway (가장 쉬움) · Render · Fly | 이름.up.railway.app |
| 내 컴퓨터로 직접 | Cloudflare Tunnel (내 맥을 서버로) | 내 도메인. 단 내 컴퓨터가 꺼지면 같이 꺼짐 |
파일만 있으면 제일 쉽다. 저장이 필요 없는 소개 페이지·계산기·일회성 도구라면, 코드를 깃헙에 올리고 Cloudflare Pages나 GitHub Pages에 연결하면 끝이다. 고칠 때마다 자동으로 다시 올라가고, 비용도 0이다. 처음 "링크를 남한테 보냈다"는 성공을 가장 빨리 보는 길이다.
서버가 돈다면(글·계정이 저장되는 방명록 같은 것) Railway가 입문엔 가장 수월하다. 깃헙 저장소를 연결하면 알아서 빌드하고 띄워 주소를 준다. 데이터베이스도 클릭 몇 번으로 붙는다. 처음엔 무료 크레딧으로 시작하고, 사람이 붙으면 그때 요금을 본다.
앱은 웹처럼 링크 하나로 끝나지 않는다. 사람 폰에 깔려야 하고, 그 길이 가까운 사람용과 모두용으로 나뉜다.
| 누구한테 | 어떻게 (iOS 기준) | 관문 |
|---|---|---|
| 나·가까운 몇 명 | TestFlight (애플 공식 테스트) | 개발자 계정은 필요, 하지만 정식 심사는 가벼움 |
| 모두 (공개) | App Store 정식 심사 | 심사 통과해야 올라감. 반려도 흔함 |
| 안드로이드 | Google Play (내부 테스트 → 공개) | 계정 1회 $25. iOS보다 심사가 빠른 편 |
처음엔 TestFlight로 충분하다. 정식 출시 전에, 내 폰과 친구 몇 명 폰에 먼저 깔아 보는 길이다. 링크(또는 코드)를 보내면 TestFlight 앱으로 설치된다. 여기까지는 무거운 정식 심사 없이 빠르게 돌아간다. "일단 내 손의 실기기에서 진짜 되는지"를 여기서 확인한다.
모두에게 공개하려면 App Store 심사를 넘어야 한다. iOS는 Apple 개발자 계정(연 $99), 앱 아이콘, 권한 설명 문구, 개인정보 처리방침 주소, 그리고 심사원이 볼 수 있는 준비물이 필요하다. 웹에는 없던 관문이다. 그래서 앱은 흔히 만들기보다 내보내기가 더 오래 걸린다. 반려도 처음엔 거의 겪는다(자주 걸리는 지점은 바로 다음 장에서).
"내 컴퓨터에선 됐는데 올리니까 안 돼요." 내보내기의 거의 모든 좌절이 이 한 문장이다. 아래는 우리가 웹·앱을 여러 개 실제로 내면서 밟은 것들이다. 미리 알면 안 무섭다.
공통점이 보인다. 내보내기의 함정은 대개 코드가 아니라 환경(키·저장·캐시)과 준비물(처리방침·아이콘·권한 문구)에 있다. 그래서 막히면 코드를 더 파기 전에 이 둘부터 본다.
내보내기 직전에 이것만 훑어도 흔한 사고의 절반은 막는다. 웹과 앱으로 나눴다.
그래도 반려되거나 막히면, 그 문구를 그대로 AI에게 붙여넣고 "이거 어떻게 고쳐?"라고 물으면 대부분 그 자리에서 풀린다. 지난 호의 요령 그대로다.
