토큰워치 개발 보고서|AI 가격·성능 비교 플랫폼의 설계와 Ubuntu 배포
AJECT 개발 보고서 · 2026년 10월 21일 · 공개 베타
TOKEN WATCH
AI는 똑똑하게.
요금은 합리적으로.
월 구독료부터 API 토큰 단가, 무료 사용 조건과 성능까지. 사용 목적과 예산에 맞는 AI를 선택하도록 돕는 비교 서비스를 개발했습니다.
1. 왜 AI 비교 서비스를 만들었나
같은 AI 브랜드 안에서도 모델 버전과 요금제에 따라 비용과 이용 범위가 달라집니다. 월 구독 서비스와 개발자용 API는 별도로 과금될 수 있고, 입력·출력·캐시 토큰 단가도 서로 다릅니다. 이미지·음악·영상 생성 서비스는 토큰 대신 크레딧이나 생성 횟수를 쓰기도 합니다.
토큰워치는 이처럼 서로 다른 비용을 하나의 순위로 단순화하기보다, 소비자가 무엇을 비교하고 있는지 이해하도록 정보를 분리했습니다. 목표는 가장 저렴한 AI 하나를 선정하는 것이 아니라 업무와 예산에 맞는 선택을 돕는 것입니다.
2. 비교 화면의 설계와 구현
한국 가격 비교 포털의 익숙한 탐색 방식을 참고해 카드가 반복되는 격자보다 리스트 중심 구성을 선택했습니다. 주요 AI 바로가기, 한 번의 용도 선택, 요약 목록과 클릭 후 세부 정보로 이어지는 흐름을 구성했습니다. 초기 화면에는 불필요한 검색창과 중복 분류 버튼을 줄였습니다.
| 비교 영역 | 화면에서 확인할 내용 | 설계 기준 |
|---|---|---|
| 월 구독료 | 대표 요금제와 선택 후 상세 플랜 | 구독 비용과 API 비용을 구분 |
| 무료 사용 | 무료 제공 여부와 이용 조건 | 무료라는 표시와 실제 제한을 함께 설명 |
| API 가격 | 모델별 입력·출력 단가와 계산 참고 정보 | 모델 버전과 과금 단위를 명시 |
| 성능 비교 | 공개 벤치마크 참고 자료 | 별도 탭에서 모델·평가 조건을 확인 |
| 후기 | 서비스별 사용 경험과 장단점 | 검토된 회원 후기와 외부 참고 자료를 구분 |
초기 비교 대상은 ChatGPT, Claude, Gemini, DeepSeek, Grok, Perplexity, Cursor, Mistral, Qwen, Llama, Midjourney, Canva, Suno, Udio, Runway, Pika, Kling AI 등 17개 서비스입니다. 텍스트·코딩뿐 아니라 이미지·음악·영상까지 탐색 범위를 넓혔습니다.
가격 중심 정보의 우선순위를 유지하면서 성능은 독립 탭으로 분리했습니다. 확인되지 않은 가격을 0원이나 무료로 표시하지 않고, 출처·확인일·참고 정보 여부를 함께 전달하도록 구성했습니다.
3. 브랜드와 시각 체계
브랜드명은 토큰워치 | AI 가격비교입니다. 짙은 네이비와 에메랄드 색상을 기본으로 사용하고, 참고·확인 상태에는 보조 색상을 적용했습니다. 비교 막대와 체크를 결합한 아이콘으로 가격 비교와 확인이라는 기능을 표현했습니다.
화면은 장식보다 정보의 계층을 우선했습니다. 서비스 이름, 핵심 비용, 세부 조건, 가입·사용 링크가 구분되도록 구성하고, 서비스 선택 시 상세 정보와 후기를 열어 사용자가 필요한 만큼 살펴보도록 했습니다. 이는 사용성 개선을 위한 설계 결과이며, 방문자 실험으로 전환율 상승을 입증한 단계는 아닙니다.
4. 기술 아키텍처와 사양
Ubuntu 서버에 독립 배포할 수 있는 Node.js 애플리케이션으로 구성했습니다. 서버 애플리케이션은 별도 npm 패키지 의존성 없이 Node.js 내장 HTTP·암호화·SQLite 기능을 중심으로 구현했습니다.
요청 처리 구조
- 브라우저가 HTTPS로 비교 화면과 API를 요청합니다.
- nginx가 요청을 받아 내부 애플리케이션으로 전달합니다.
- Node.js가 정적 페이지·회원 인증·후기 요청을 처리합니다.
- SQLite가 회원·세션·후기 데이터를 저장합니다.
외부 웹 연결과 애플리케이션 내부 통신을 분리하고, 정적 화면과 API를 같은 출처에서 제공합니다.
| 영역 | 적용 사양 |
|---|---|
| 운영체제 | Ubuntu 24.04 LTS |
| 런타임 | Node.js 24 계열, JavaScript ES Modules |
| 백엔드 | Node.js HTTP 서버와 JSON API |
| 데이터베이스 | SQLite, node:sqlite, WAL 모드 |
| 프런트엔드 | HTML·CSS·JavaScript |
| 웹 서버 | nginx 역방향 프록시, HTTPS |
| 서비스 관리 | systemd 자동 시작과 실패 시 재시작 |
| 배포 관리 | 버전별 릴리스 디렉터리와 현재 버전 연결 |
| 운영 도구 | 설치·사전 점검·상태 검증·백업·복원·롤백 스크립트 |
초기 독립 서버 패키지는 1.0.0-beta.1로 구성했습니다. 실제 설치 과정에서 추가 수정한 사항은 후속 배포 패키지에도 반영해야 합니다. 원래 배포 파일과 운영 서버의 수정 상태가 같다고 가정하지 않는 것이 버전 관리의 핵심입니다.
5. 회원 인증과 후기 운영
회원가입에는 비밀번호 재입력과 표시 기능을 제공했습니다. 비밀번호는 scrypt 기반 해시로 저장하며, 임의 세션 토큰을 발급하고 서버에는 세션 토큰의 해시를 저장합니다. 운영 환경의 세션 쿠키에는 HttpOnly·Secure·SameSite 설정을 적용했습니다.
| 처리 영역 | 구현 내용 |
|---|---|
| 변경 요청 | Origin·CSRF 검증과 서버 인증 확인 |
| 입력 데이터 | 허용 필드·값·요청 크기 검증 |
| 남용 방지 | 회원가입·로그인·후기 작성 요청 제한 |
| 후기 등록 | 새 후기는 검토 대기 상태로 저장 |
| 평점 집계 | 승인된 회원 후기만 공개 평점에 반영 |
| 본인 관리 | 서버에서 작성자를 확인한 후 후기 삭제 |
| 운영자 관리 | CLI를 통한 후기 승인·숨김과 계정 관리 |
검토 대기 중인 후기는 작성자에게 상태를 보여주고, 외부에서 수집한 참고 후기를 회원 평점 평균에 섞지 않도록 구분했습니다. 현재 이메일 인증·자동 비밀번호 복구·소셜 로그인·웹 관리자 화면은 구현하지 않았습니다.
위 항목은 구현된 보호 장치를 설명합니다. 외부 보안 감사나 침투 테스트를 완료했다는 의미는 아닙니다.
6. 실제 배포에서 해결한 문제
이전 릴리스 판단과 심볼릭 링크 순환
최초 설치에서 존재하지 않는 이전 경로가 이전 릴리스로 판단될 수 있는 문제가 있었습니다. 실패 복구 과정에서 현재 경로가 자기 자신을 참조하는 링크가 되면 systemd가 작업 디렉터리에 진입하지 못합니다. 실제 릴리스 경로에 서버 파일이 존재하는 경우에만 이전 버전으로 인정하도록 수정했습니다.
심볼릭 링크와 Node.js 진입점 비교
실행 인자는 현재 버전 링크를 가리키지만 모듈 경로는 실제 릴리스 경로로 해석되면서, 실행 진입점 비교가 실패하는 문제가 확인됐습니다. 실행 경로를 realpathSync로 실제 파일 경로로 변환한 뒤 비교하도록 바꿔 서버 시작 코드가 실행되도록 수정했습니다.
네트워크 제약에 맞춘 인증서 발급
배포 환경에서는 외부 80번 포트를 통한 HTTP 도메인 검증이 불가능해 인증서 발급이 실패했습니다. DNS 검증으로 전환했고 운영자가 인증서 발급 완료를 확인했습니다. 수동 DNS 인증서 발급과 자동 갱신 설정은 별도 작업이므로, 갱신 연동 또는 운영 절차를 추가로 마련해야 합니다.
7. 무엇을 검증했고, 무엇이 남았나
초기 패키지에서는 실제 HTTP 요청을 사용하는 백엔드 테스트, 프런트엔드 동작 테스트, 정적 페이지와 API 계약 테스트를 수행했습니다. 데이터베이스 백업 무결성과 운영 CLI 동작도 확인했습니다. 운영 서버에서는 수정 이후 상태 확인 API의 애플리케이션·데이터베이스 정상 응답과 systemd 실행 상태를 확인했습니다.
| 항목 | 확인 범위·현재 상태 |
|---|---|
| 서버 기능 테스트 | 초기 패키지에서 실제 HTTP 요청 기반 테스트 통과 |
| 프런트엔드 테스트 | 테스트 환경에서 동작 검증, 실제 브라우저 전체 검증과 구분 |
| 운영 서버 실행 | 사용자 제공 로그에서 서비스 실행·DB 준비 상태 확인 |
| 가격 데이터 | 수동 확인 참고 자료, 최신 가격 전면 재검증은 후속 작업 |
| 실시간 가격 수집 | 미연결 |
| 부하·보안 평가 | 부하 테스트·외부 보안 감사 미완료 |
| 실제 기기 검증 | 모바일·브라우저 전체 시나리오 검증 필요 |
이 보고서는 개발 기록과 운영자가 제공한 배포 로그를 기준으로 작성했습니다. 작성 시점에 운영 서버 전체를 새로 점검하거나 서비스 가용성을 지속 측정한 결과는 아닙니다. 시간대별 요금 변동과 실시간 가격 추적을 모든 서비스에 제공한다고 표시하지 않습니다.
8. 다음 단계: AI 할인·꿀팁 게시판
다음 개발은 기존 비교 화면을 유지하면서 ‘가격·후기 확인 기준’ 옆에 AI 할인·꿀팁 메뉴를 추가하는 것입니다. 별도 게시글 목록·상세 페이지와 관리자 편집기를 구성하는 방향을 확정했습니다. 아래 항목은 개발 예정 기능이며 현재 배포된 기능이 아닙니다.
- 텍스트·제목·목록·이미지 중심의 게시글 작성
- 이미지 드래그 앤 드롭 업로드와 순서 변경
- 이미지 설명·대체 텍스트 편집
- 임시 저장·미리보기·게시·게시 중단
- 관리자 권한, 업로드 파일 검증, 이미지와 DB의 백업 범위 확장
- 출처·확인일·할인 조건·만료일·제휴 여부 표시
초기 글은 무료 사용부터 유료 전환까지의 선택 순서, 월간·연간 결제 비교, 할인 코드의 실제 적용 확인법, 구독과 API 과금의 차이, 음악·영상 AI의 크레딧과 이용 조건을 다룰 예정입니다. 겜스고 등 중개 서비스는 공식 판매 경로와 구분해 설명하고, 확인되지 않은 할인 코드·제휴 관계·절약 금액을 만들어 넣지 않습니다.
9. 후속 개발 우선순위
- 운영 서버에서 해결한 설치·실행 오류를 후속 패키지에 반영합니다.
- 기존 디자인을 유지한 할인·꿀팁 게시판과 관리자 편집기를 구현합니다.
- 이미지 업로드 검증·권한·백업·복원 범위를 테스트합니다.
- 초기 글을 등록하고 실제 모바일·브라우저 흐름을 점검합니다.
- 가격 자료를 재검증하고 갱신 체계를 마련합니다.
- 인증서 갱신·상태 모니터링·운영 복구 절차를 보강합니다.
토큰워치는 가격뿐 아니라 사용 조건·성능·후기를 함께 이해할 수 있는 비교 서비스로 개발하고 있습니다. AJECT는 실제 운영 과정에서 드러난 문제와 수정 내용을 함께 기록하며 서비스를 개선하겠습니다.