데이터로 말하고, 코드로 증명하는 개발자

권태형

기획부터 회고까지 전 과정에서 선택의 이유를 말할 수 있는 개발을 목표로 합니다.

스킬 & 도구

Web / App
협업
백엔드
AI 활용

주요 개발 스택

SQL lite HTML CSS JavaScript Kotlin

협업 · 디자인 · AI

Git / GitHub Flow GitHub Projects / Issues Jira · Notion · Slack Figma 와이어프레임 Figma Design System ChatGPT / Cursor 코드 리뷰 Copilot 코드 자동완성 Prompt 기반 리팩토링

프로젝트

2025.09 – 2024.11 · 팀 프로젝트 (팀명: 세얼간이 · 권태형 · 하경완 · 함지원)

설문 생성부터 응답 수집, 통계 분석까지 한 번에 처리할 수 있는 웹 기반 설문 플랫폼입니다.
Cloudflare Pages + Pages Functions + D1 조합으로 프론트엔드·백엔드·데이터베이스를 단일 환경에서 운영하도록 설계했습니다.

기술 스택

HTML CSS Vanilla JavaScript Chart.js
  • 순수 HTML/CSS/JS 기반으로 설문 생성 · 응답 · 대시보드 · 통계 화면 구현
  • 공통 컴포넌트(카드, 버튼, 모달)를 재사용해 일관된 UI 제공
  • Drag & Drop, 통계 차트 등 인터랙션을 모두 Vanilla JS와 Chart.js로 직접 구현

GitHub · github.com/kwonkth/survey-project

레포지토리

Backend (Cloudflare Pages Functions)

Cloudflare Pages Functions JavaScript (ES Modules) REST API
  • Cloudflare Pages Functions(Workers 런타임) 위에서 JavaScript ES Modules로 백엔드 구현
  • onRequest* 패턴으로 설문, 응답, 폴더, AI 설문 생성 등 REST API 엔드포인트 설계
  • 프론트엔드와 fetch 기반으로 통신해 설문 CRUD, 응답 수집, 통계 데이터를 주고받음

Database (Cloudflare D1)

  • wrangler.toml에서 D1 바인딩 이름을 surveyforge로 지정
  • env.surveyforge.prepare(...).run()/all()/bind() 형태로 SQL 직접 실행
  • surveys: 설문 메타데이터(제목, 설명, JSON 구조, status, folder_id, created_at, updated_at)
  • results: 설문 응답 데이터 및 통계 계산용 원본 저장
  • folders: 설문 폴더링/분류 기능용 테이블
  • 대부분의 핸들러에서 CREATE TABLE IF NOT EXISTS로 테이블 자동 생성 로직 포함

AI / 외부 API

  • 파일: functions/api/generate-survey.js
  • 모델: anthropic/claude-haiku-4.5 (OpenRouter Chat Completions)
  • OPENROUTER_API_KEY 환경 변수를 사용해 서버 측에서 fetch로 직접 호출
  • 응답 JSON을 설문 문항 구조에 맞게 정규화하여 프론트엔드에서 바로 사용할 수 있는 형태로 반환
  • /styles/*.json에 설문 스타일 템플릿을 정의하고, AI 프롬프트에서 불러와 테마/스타일이 적용된 설문 초안 생성

문제 해결 요약

문제 · 설문을 재미있게 만드는 과정이 주관적이라 자동 생성 기능을 도입했지만, JSON 템플릿 기반 구조와 맞지 않아 Gemini 모델이 불완전한 JSON을 반환하는 문제가 반복되었습니다.

접근 · 여러 모델을 테스트하여 JSON 호환성을 검증했고, Claude Haiku 4.5가 스타일 템플릿과 긴 문항 구조를 안정적으로 처리함을 확인해 모델을 교체했습니다. 또한 "JSON만 출력"하도록 프롬프트를 개선하고 서버 측 파싱 검증 로직을 추가했습니다.

결과 · AI 설문 생성 기능이 안정적으로 동작하며 설문 품질과 일관성이 크게 향상되었고, 사용자는 설문 유형만 선택하면 즉시 사용 가능한 설문 초안을 자동으로 생성할 수 있게 되었습니다.

개인 프로젝트

마크다운 기반의 기술 블로그 플랫폼으로, 태그·검색·초안 기능을 제공하고 글별 회고 메모를 남겨 성장 기록을 돕는 서비스를 만들고 있습니다.

기술 스택

Streamlit Plotly Python SQLite Pandas NumPy ReportLab Markdown OpenPyXL xlrd

레포지토리

GitHub · https://github.com/kwonkth/Book

AI 활용

  • ChatGPT/Cursor를 활용해 에러 로그를 요약하고 원인 후보를 좁힌 뒤 직접 재현
  • 긴 컴포넌트 파일을 AI로 분리 전략을 제안받고, 그 중 일부를 수동 리팩토링
  • 테스트 코드 초안을 AI로 생성하고, 실패 케이스와 엣지 케이스는 직접 보완

주요 기능

  • 도서 관리
    • ISBN·제목으로 도서 등록
    • 완료/읽는 중/보류 등 상태 관리
  • 독서 기록 및 메모
    • 마크다운 기반 독서 노트 작성
    • 중요한 구절 하이라이트 및 태그 추가
  • 통계·시각화
    • 연도·분기별 독서량 그래프(Plotly) 제공
    • 장르별/저자별 독서 분포 분석
  • 데이터 내보내기
    • 독서 기록을 PDF·엑셀로 내보내기 (ReportLab, OpenPyXL)
todolist – Android 할 일 관리 앱
개인 프로젝트 · Kotlin / Android

일상적인 작업을 등록·수정·삭제하고 완료 여부를 관리할 수 있는 Android 기반 할 일 관리 앱입니다.
단순 기능 구현을 넘어, 구조적인 코드와 확장성을 고려한 아키텍처 설계를 목표로 개발했습니다.

개발 의도

  • 할 일 생성·수정·삭제, 완료 여부 처리, 날짜/상태 기반 필터링 등 핵심 기능 플로우 직접 설계 및 구현
  • 즐겨찾기, 정렬, 상세 보기 등 사용성 개선 기능 추가 및 인터랙션 최적화
  • 전체 기능 기획, UI 설계, Android 앱 개발, 테스트까지 엔드 투 엔드로 단독 수행

기술 스택 & 설계

Kotlin Android MVVM Jetpack ViewModel LiveData / StateFlow Room / 로컬 저장소 Kotlin Coroutines Flow

레포지토리 · GitHub · github.com/kwonkth/todo3

문제 해결 사례

개발 과정에서 에뮬레이터와 API 버전이 맞지 않아 앱이 실행되지 않는 문제가 발생했으며, SDK 설정과 에뮬레이터 이미지를 일치시켜 정상 구동되도록 해결했습니다.

또한 즐겨찾기 기능 구현 중 태그 불일치로 잘못된 항목이 표시되는 오류가 있었고, 데이터 모델 기반으로 태그를 재정의해 올바르게 매칭되도록 수정했습니다.

개인 프로젝트 · 정적 웹 서비스

수업·스터디에서 작성한 필기를 공유하고 열람할 수 있는 정적 웹 기반 필기 저장소 서비스입니다.
복잡한 백엔드 없이, 누구나 브라우저에서 빠르게 접근할 수 있는 공유 공간을 목표로 설계했습니다.

주요 기능

  • 📌 1. 필기 업로드 & 관리
    • 텍스트·마크다운 기반 필기 업로드
    • 필기 수정·삭제 기능
    • 자동 저장 또는 버전 관리(구현 시)
  • 📌 2. 카테고리/태그 분류
    • 강의/주제별 카테고리 설정
    • 태그 기반 필기 분류 및 빠른 필터링
  • 📌 3. 검색 기능
    • 제목·내용·태그 기준 검색
    • 최신순/인기순/카테고리 정렬
  • 📌 4. 공유 기능
    • 링크 기반 필기 공유
    • 다른 사용자의 필기를 열람하거나 즐겨찾기 가능(구현 시)
  • 📌 5. 북마크 / 즐겨찾기
    • 자주 참고하는 필기를 즐겨찾기로 저장
    • 즐겨찾기 목록에서 빠르게 재확인
  • 📌 6. 정리 도구(선택 사항)
    • 마크다운 렌더링 지원
    • 하이라이트/요약 기능(필요하면 추가 가능)
  • 📌 7. 사용자 편의 기능
    • 반응형 UI
    • 최근 본 필기 자동 기록
    • 다크모드(구현 시)

기술 스택

HTML5 CSS3 Vanilla JavaScript DOM 조작 Cloudflare Pages