독립 개발자 · 타이중

App Store에 올라간 앱 다섯 개.

그리고 지금도 돌아가고 있는 사이트와 서비스 열다섯 개.

Feng Chia University 광전공학과 3학년이며, 컴퓨터공학 전공은 아닙니다. 아래는 실제로 끝내서 넘긴 것들입니다. 제가 직접 종료한 제품 하나도 포함되어 있습니다.

출시한 iOS 앱
5
운영 중인 사이트와 서비스
15
운영 환경에서 수정한 보안 결함
2

만든 것들

다섯 개 앱은 제 회사 계정인 Gomiigo Games(법인명: Tuthome Co., Ltd.) 이름으로 출시했으며, 각 앱은 처음부터 끝까지 제가 직접 만들었습니다. 아래의 사이트와 서비스는 모두 제가 직접 관리하는 Linux 서버 한 대에서 돌아갑니다.

진행 중

교육 플랫폼 기술 감사 및 수정

외주 개발자로서 운영 중인 Next.js + Supabase 플랫폼 안에서 작업하며, 보안 결함 두 건을 찾아 고쳤습니다.

처음부터 새로 만든 프로젝트가 아니라, 이미 실제 사용자가 있는 다른 사람의 코드베이스 안에서 일한 것입니다. 두 결함은 다중 역할 권한 모델의 권한 상승 경로와 테넌트 간 데이터 노출이었습니다. 모든 변경은 row-level security 정책이 적용된 Postgres 스키마 위에서 리뷰를 거친 pull request로 전달했습니다. 고객사 이름은 합의에 따라 밝히지 않습니다.

건의 보안 결함 수정
2
개 commit 전달
54
개 데이터베이스 migration
44
  • TypeScript
  • Next.js
  • React
  • Supabase
  • PostgreSQL
  • RLS
진행 중

개인 개발 체계

스스로를 위해 쓴 작업 규칙 모음: 일을 어떻게 배분하고, 어떻게 검증하며, 실수 하나하나가 어떻게 규칙이 되는지.

핵심 규칙은 한 줄입니다. 만든 쪽은 절대 검증하지 않는다. 작업이 끝나면 그 과정을 전혀 모르는 새 세션을 열고, 그 세션은 통과, 증거를 붙인 실패, ‘검증 불가’ 세 가지 답만 낼 수 있습니다. 그 옆에는 열 달 동안 잘못됐던 일 34건의 기록이 있고, 각 항목은 이후 작업에 적용되는 규칙으로 다시 썼습니다.

개의 재사용 가능한 skill
126
건의 사후 분석 기록
34
메인 세션이 차지한 비용 비중 (세션 170개 실측)
88%
  • Claude Code
  • Markdown
  • Shell
  • Node.js
  • Python
납품 완료

Move On Australia

호주 이사 업체의 CRM에 자동화 세 가지를 만들어 넣었습니다. AI 인력 배정, 이메일에서 주문 추출, 경로 최적화입니다.

고객사에는 이미 Base44 로우코드 CRM이 있었고, 제 일은 그것이 스스로 돌아가게 만드는 것이었습니다. AI 배정은 가용 여부와 위치에 따라 작업 인력을 할당하고, 이메일 파싱은 들어오는 문의를 구조화된 주문으로 바꾸며, 경로 최적화는 그날 가장 저렴하게 이동하는 방법을 계산합니다. AI 호출은 서버리스 함수를 거치며, 사용할 모델은 코드에 명시해 두었습니다. 납품하고 마무리했으며, 세 차례의 대금 지급 단계는 모두 정산됐습니다.

줄의 코드
30,005
개 자동화 함수
32
개 데이터 엔티티
15
  • Base44
  • Serverless Functions
  • Claude API

App Store에 출시한 다른 앱

CamMenu

CamMenu

출시

읽을 수 없는 메뉴를 찍으면, 손가락으로 가리켜 주문할 수 있는 문구를 돌려줍니다.

  • 16,229 줄의 Dart 코드
  • 5 개 언어

사이트와 서비스

모두 지금도 운영 중이며 바로 열어 볼 수 있습니다. ‘로그인 필요’ 표시가 붙은 것은 계정 시스템이 있는 서비스로, 제품 자체가 아니라 로그인 페이지가 먼저 보입니다.

Idea Manager

Idea Manager

운영 중

아이디어를 캔버스에 스케치하면, AI가 노드 사이의 연결을 따라 펼쳐 나갑니다.

  • 7,064 줄의 코드
  • 20 개 API 라우트
  • Next.js
  • TypeScript
  • Prisma
소규모 매장 주문 페이지

소규모 매장 주문 페이지

종료

소규모 매장을 위한 주문 시스템입니다. 여덟 매장에 DM으로 제안했고, 미리 정해 둔 판정일 결과: 판매 0건. 종료했습니다.

매장마다 설정 파일 하나를 두는 구상이었습니다. 새 매장용으로 한 시간이면 스타일을 바꿀 수 있는 화이트라벨 주문 페이지였습니다. 시작하기 전에 통과/실패 기준과 철수 조건을 써 두었고, 정해 둔 날짜에 결산했습니다. 세 조건 모두 미달이었습니다. 이 항목을 남겨 두는 이유는, 어떤 성공 사례보다 제가 결정을 내리는 방식을 잘 보여 주기 때문입니다. 실패가 어떤 모습인지 먼저 정의하고, 때가 되면 실제로 그렇게 판정합니다.

  • 8 곳에 제안
  • 0 건 판매
  • Web
Zhi Jian Studio

Zhi Jian Studio

운영 중

제 외주 스튜디오의 사이트입니다. 쓰던 도구는 그대로 두고, 워크플로만 자동화합니다.

  • 6,354 줄의 코드
  • 4.5 개월 유지 관리
  • Web
ChatCal

ChatCal

운영 중

양식을 채우는 대신 대화하듯 일정을 기록합니다.

  • 2,015 줄의 코드
  • 26 개 라우트
  • Web
Threads Filter

Threads Filter

운영 중

Threads 게시물을 분류하고 걸러서, 제가 읽고 싶은 것만 남깁니다.

  • 2,505 줄의 코드
  • 4 개 데이터베이스 테이블
  • Node.js
Survival Wallet

Survival Wallet

운영 중

데이터가 자기 브라우저에만 남고 어디에도 업로드되지 않는 가계부입니다.

  • 2,696 줄의 코드
  • 17 개 테스트
  • PWA
  • sql.js
  • vitest
MathBox

MathBox

운영 중

자주 쓰는 계산과 그래프를 한곳에 모아 둔 수학 도구 모음입니다.

  • 4,420 줄의 코드
  • Node.js
  • Express

Mentora

로그인 필요

AI 학습 동반자입니다. 질문 하나에 분석 다섯에서 여섯 단계를 이어 거친 뒤 답합니다.

  • 7,038 줄의 코드
  • 12 개 AI 라우트
  • Next.js 16
  • Clerk
  • Supabase
  • gRPC

AgentHub

로그인 필요

개인용 AI 어시스턴트 플랫폼입니다. 답변은 생성되는 대로 스트리밍됩니다.

  • 4,974 줄의 코드
  • 13 개 라우트
  • Next.js
  • SSE

SocialAgents

운영 중

AI 어시스턴트를 LINE과 Telegram에 올립니다. 워크스페이스 하나에서 여러 페르소나와 그 연락처를 관리합니다.

  • 2,119 줄의 코드
  • 7 개 데이터베이스 테이블
  • Next.js 16
  • Drizzle
  • PostgreSQL 18
  • LINE
  • Telegram

숙제 풀이 도우미

운영 중

문제를 찍거나 입력하면 단계별 풀이를 보여 줍니다. AI 계층에는 6단계 fallback이 있습니다.

  • 4,428 줄의 코드
  • 29 개 엔드포인트
  • Bun
  • Web

KeyStorage

운영 중

브라우저 내장 Web Crypto API로 키를 암호화해 브라우저 안에 보관합니다.

  • 1,159 줄의 코드
  • Web Crypto API

Worklog

운영 중

그날 한 일을 하루 한 줄로 적습니다. 집에 있는 NAS에서 돌아갑니다.

  • 971 줄의 코드
  • Bun

개발자 도구와 백엔드

제 문제를 풀려고 만든 것들입니다. 대부분 공개된 인터페이스는 없습니다.

DingDong

진행 중

여기서 가장 먼저 시작한 프로젝트입니다. LINE 봇 뒤에 스케줄링, 작업 큐, 데이터 모델까지 처음부터 직접 만든 백엔드 전체가 붙어 있습니다.

제 첫 번째 진짜 백엔드였습니다. 앞에는 LINE 봇이 있고, 그 뒤에서 FastAPI가 데이터 모델 18개에 걸친 엔드포인트 44개를 제공하며, Celery가 예약 작업과 비동기 작업을 돌리고, 저장은 MySQL, 캐시는 Redis가 맡습니다. 전부 Docker 안에서, 제가 직접 호스팅하는 Gitea 인스턴스 옆에서 돌아갑니다. 이 안에는 AI가 어디에도 없습니다. 그때는 아직 시작하지 않았으니까요.

  • 12,618 줄의 Python 코드
  • 44 개 API 엔드포인트
  • 18 개 데이터 모델
  • Python
  • FastAPI
  • Celery
  • MySQL
  • Redis
  • Docker
  • LINE API

구인 공고 선별 시스템

로그인 필요

제 문제를 풀려고 만들었습니다. 공고를 수집하고, 단계별 AI 필터로 거른 뒤, 지원한 곳을 추적합니다.

  • 195 개 commit
  • 82 개 API 엔드포인트
  • 11 개 데이터베이스 테이블
  • Node.js
  • SQLite
  • Playwright
  • nginx
  • systemd

SkillsHub

프로토타입

AI가 제 skill 라이브러리를 직접 읽을 수 있게 하는 Model Context Protocol 서버입니다.

Model Context Protocol은 AI가 외부 데이터를 직접 읽을 수 있게 하는 규약입니다. 제가 skill 라이브러리를 한 덩어리씩 붙여 넣는 대신 AI가 직접 조회할 수 있도록, Next.js로 MCP 서버를 썼습니다. 밑에는 Drizzle과 SQLite가 있고, 저장소 데이터는 GitHub API로 가져옵니다.

  • 3,755 줄의 코드
  • 4 개 데이터베이스 테이블
  • Next.js 15
  • Drizzle
  • SQLite
  • MCP SDK
  • Docker

FocusMask

프로토타입

페이지에서 제 주의를 흐트러뜨리는 부분을 가려 주는 Chrome 확장 프로그램입니다.

Manifest V3 기반 Chrome 확장 프로그램입니다. 하는 일은 하나뿐입니다. 페이지에서 제가 자꾸 눈길을 주고 마는 부분—사이드바 추천, 아래쪽 관련 영상, 소셜 피드—을 가리는 것입니다. 규칙은 브라우저 안에만 있고, 계정도 없고, 아무것도 업로드하지 않습니다.

  • 960 줄의 코드
  • Chrome Extension MV3

아직 비공개

FirstFrame

테스트 중

Vision 프레임워크 위에 만든 촬영 보조 앱으로, 8개 언어를 지원합니다. 현재 TestFlight에 있습니다.

Apple의 Vision 프레임워크로 프레임을 실시간 분석하고, 카메라는 AVFoundation이 구동합니다. 그래서 셔터를 누르기 전에 구도의 어디가 잘못됐는지 알려 줍니다. 8개 언어, commit 114개, 현재 TestFlight에 있으며 App Store에는 아직 제출하지 않았습니다.

  • 10,955 줄의 Swift 코드
  • 114 개 commit
  • 8 개 언어
  • Swift
  • SwiftUI
  • Vision
  • AVFoundation
  • fastlane

Bloopz

심사 제출

구상에서 App Store 심사 제출까지 사흘 만에 마친 작은 게임 앱입니다.

핵심은 복잡함이 아니었습니다. 아이디어 하나를 심사 제출까지 밀고 가는 데 제가 얼마나 걸리는지 알고 싶었습니다. 아트워크, IAP 설정, 스토어 소재까지 포함해 사흘이었습니다.

  • 3,659 줄의 코드
  • 3 일, 구상에서 제출까지
  • Swift
  • SwiftUI

ERP 프로토타입

프로토타입

재고 관리 프로토타입으로, 여기서 유일하게 Vue로 쓴 프로젝트입니다.

재고 관리 프로토타입으로, 상품·재고·입고·출고·고객을 다루는 테이블 아홉 개로 이루어져 있습니다. 여기서 유일하게 Vue로 쓴 프로젝트이며, 실제 작업에서 Vue와 React가 어디서 다른지 알기 위해 일부러 택했습니다.

  • 3,086 줄의 코드
  • 9 개 데이터베이스 테이블
  • Vue 3

일하는 방식

만든 쪽이 검증하지 않는다

대부분은 AI를 답변 기계로 씁니다. 묻고, 받아들이고, 넘어갑니다. 제 결과를 바꾼 습관은 ‘만드는 일’과 ‘확인하는 일’을 분리한 것이었습니다. 방금 무언가를 끝낸 세션에게 그것을 판정하게 두는 일은 없습니다. 방금 쓴 세션은 자기가 쓴 것을 변호하지만, 본 적 없는 세션은 그러지 않습니다.

자기 가정을 믿기 전에 먼저 측정한다

한때 저는 여러 AI 에이전트에 작업을 나눠 맡기는 것이 비용의 주범이라고 확신했고, 그래서 모든 것을 한 대화 안에 몰아넣었습니다. 그러다 제 세션 170개를 실제로 측정해 봤습니다. 주 대화가 비용의 약 88%를 차지했고, 위임한 에이전트를 전부 합쳐도 12% 정도였습니다. 인과를 거꾸로 알고 있었던 겁니다. 남은 것은 숫자가 아니었습니다. 확신에 찬 의견을 몇 달 동안 한 번도 확인하지 않은 채 갖고 있었고, 확인하는 데는 한 시간 남짓이면 충분했다는 사실이었습니다.

판단은 내 몫으로 남긴다

제 작업 대부분은 AI의 도움을 받으며, 이를 숨기지 않습니다. 다만 역할 분담은 분명합니다. AI가 양을 맡고, 판단은 제 몫입니다. 무엇을 만들지, 무엇을 완료로 볼지, 어디서 타협하지 않을지. 이것들은 위임하지 않습니다.

소개

저는 Po-Han Hua입니다. 타이중에 있는 Feng Chia University 광전공학과 3학년이며, 2028년 봄 졸업 예정입니다.

컴퓨터공학 출신이 아닙니다. 있었으면 하는 것을 직접 만들면서 소프트웨어 만드는 법을 배웠습니다. 컴퓨터공학 바깥의 많은 학생도 이런 식으로 실제 쓰이는 것을 만들 수 있다고 생각합니다. 광학 실험실에서 제 옆자리에 앉은 사람도 마찬가지입니다. 다만 대부분은 그런 말을 들어 본 적이 없을 뿐입니다.

연락

외주 작업과 협업 제안을 환영합니다. 지금 무엇을 만들고 있는지 이야기해 주셔도 좋습니다.