기록을 이력서·자기소개서에 활용할 수 있는 문장으로 정제하는 iOS SwiftUI 앱입니다.
REFINE은 사용자가 1/3/5/7개의 기록 조각을 작성하면, LLM이 기록을 분석해 핵심 키워드, 요약, 이력서·자기소개서에 활용할 수 있는 한 줄 문장으로 정제해 주는 앱입니다.
취업 준비 과정에서 "내 경험을 어떻게 문장으로 정리해야 하는지" 막막한 문제를 줄이는 것을 목표로 했습니다. 사용자는 질문에 답하듯 생각과 경험을 기록하고, 앱은 이를 구조화된 결과로 변환해 자기소개서 초안이나 면접 준비에 활용할 수 있도록 돕습니다.
- 조각 수 선택: 1/3/5/7개 중 원하는 기록 기간을 선택
- 오늘의 기록: 질문에 답하며 경험과 생각을 텍스트/사진으로 기록
- 진행 추적: 선택한 조각 수 기준으로 현재 진행 상황을 시각적으로 표시
- AI 정제: 기록을 분석하여 핵심 키워드, 요약, 자소서용 한 줄 문장 생성
- 통계: 작성 패턴과 인사이트 제공
- 기록 목록: 작성한 기록 검색 및 상세 조회
- 사이클 관리: 완료한 기록 사이클별 히스토리 관리
- 공유: 결과를 이미지 카드로 생성하여 SNS 공유
- 다크 모드: 라이트/다크 테마 지원
- 프레임워크: SwiftUI
- 최소 버전: iOS 16.0+
- 언어: Swift 5.9+
- 아키텍처: MVVM 패턴
- 상태 관리:
@StateObject,@EnvironmentObject - 데이터 저장: SwiftData, CloudKit/iCloud 동기화 설정
- AI 연동: LLM API 기반 기록 분석
- API 보안: Cloudflare Workers 프록시를 통한 AI API 키 서버 측 관리
REFINE/
├── REFINE/
│ ├── REFINEApp.swift # 앱 진입점, SwiftData/CloudKit 설정
│ ├── ContentView.swift # 메인 네비게이션 뷰
│ ├── Models/
│ │ ├── AppState.swift # 앱 전역 상태 관리
│ │ ├── DailyEntry.swift # 기록 조각 모델
│ │ ├── CycleAnalysis.swift # AI 분석 결과 모델
│ │ └── ThemeManager.swift # 테마 관리
│ ├── Services/
│ │ └── OpenAIService.swift # LLM 분석 요청 및 응답 처리
│ ├── Utilities/
│ │ ├── JSONExtractor.swift # LLM 응답 JSON 추출
│ │ └── APIConfig.swift # API 엔드포인트 설정
│ └── Views/
│ ├── DashboardScreen.swift # 대시보드 화면
│ ├── HomeScreen.swift # 기록 작성 화면
│ ├── AnalysisScreen.swift # 분석 중 화면
│ ├── ResultScreen.swift # 결과 화면
│ ├── StatsScreen.swift # 통계 화면
│ ├── ListScreen.swift # 기록 목록 화면
│ ├── WeeksScreen.swift # 사이클 관리 화면
│ ├── ShareScreen.swift # 공유 화면
│ └── SettingsScreen.swift # 설정 화면
├── cloudflare-workers/
│ └── src/index.js # AI API 프록시
└── README.md
- macOS Ventura (13.0) 이상
- Xcode 15.0 이상
- iOS 16.0+ 디바이스 또는 시뮬레이터
-
프로젝트 열기
cd REFINE-iOS open REFINE-iOS.xcodeproj -
Xcode에서 프로젝트 설정
- 프로젝트 네비게이터에서 REFINE-iOS 선택
- Signing & Capabilities에서 팀 선택
- Bundle Identifier 설정
-
실행
- 시뮬레이터 또는 실제 기기 선택
Cmd + R또는 Run 버튼 클릭
- 현재 진행 상황 표시
- 빠른 통계 (총 글자 수, 사진 수, 주차)
- 메뉴 항목 (기록, 목록, 통계, 주차, 공유, 설정)
- 다크모드 토글
- 선택한 조각 수 기준 진행도 표시
- 오늘의 질문
- 텍스트 입력 영역
- 사진 첨부 기능
- 기록 저장 및 정제하기 버튼
- 애니메이션 로딩 화면
- LLM 분석 요청 및 결과 수신 후 자동 이동
- 핵심 키워드 표시
- 요약 텍스트
- 이력서·자기소개서에 활용 가능한 한 줄 문장
- 이미지/텍스트 저장 기능
- 총 글자 수 및 사진 수
- 일별 작성량 차트
- 인사이트 카드
- 검색 기능
- 작성한 모든 기록 표시
- 각 기록의 미리보기
- 전체 통계 요약
- 사이클별 히스토리
- 완료된 사이클 표시
- Instagram Story 크기 프리뷰
- 배경 색상 선택 (화이트/블루/퍼플/그라데이션)
- 이미지 저장
- SNS 공유 (Instagram, Twitter)
- iCloud 자동 백업 토글
- 다양한 형식으로 내보내기 (TXT, JSON, PDF, Markdown, CSV)
- 백업 파일 복원
- 알림 설정
- 질문 커스터마이징
- 앱 정보
class AppState: ObservableObject {
@Published var currentScreen: Screen = .dashboard
@Published var inputText: String = ""
@Published var currentDay: Int = 3
// ...
}class ThemeManager: ObservableObject {
@Published var theme: Theme = .light
func toggleTheme() {
theme = theme == .light ? .dark : .light
}
}.transition(.asymmetric(
insertion: .move(edge: .trailing),
removal: .move(edge: .trailing)
))enum JSONExtractor {
static func extractFirstJSONObject(from text: String) -> String? {
// 코드 블록이나 부가 설명이 섞인 LLM 응답에서 첫 JSON 객체만 추출
}
}- Primary Blue: #007AFF
- Green: #34C759
- Orange: #FF9500
- Red: #FF2D55
- Purple: #5856D6
- Gray Scale: 시스템 그레이 (6단계)
- Large Title: 34pt, Bold
- Title: 28pt, Bold
- Headline: 17pt, Semibold
- Body: 17pt, Regular
- Caption: 13pt, Regular
- Padding: 24pt (표준 수평 여백)
- Corner Radius: 12-20pt
- Spacing: 8-32pt (컴포넌트 간격)
- 푸시 알림
- 위젯 지원
- iPad 최적화
- 음성 입력 지원
- 접근성 개선
- 더 다양한 자기소개서 문항별 출력 템플릿 지원
- 분석 결과 재생성 및 버전 관리
이 프로젝트는 개인 학습 목적으로 만들어졌습니다.
버그 리포트나 기능 제안은 Issues를 통해 제출해주세요.
문의사항이 있으시면 이슈를 등록해주세요.