개발자의 작업 노트 · 2026

조현석.

Full-stack
Developer

아이디어를 서비스로,
만든 다음의 문제까지.

조현석 프로필 사진
kenny0922@naver.com

풀스택 개발자 지원

GitHub (새 탭)

제품과 그 뒤의 시스템을 만듭니다.

작게 만들고,
끝까지 확인합니다.

안녕하세요, 조현석입니다. 웹 화면에서 데이터베이스까지 연결하며, 실제로 동작하는 서비스를 만듭니다. 구현 이후에 만나는 오류와 성능 문제도 개발의 일부로 생각합니다.

Looking For Friend에서 제품 의사결정과 end-to-end 개발·검증·운영을 책임졌습니다. AI를 코드 작성, 분석, 테스트에 활용하며 설계 판단과 결과 검증을 맡았습니다.

Looking For Friend01 / LFF

Discord에서 함께 게임할 친구를 찾는 서비스

2026.06 — 2026.09 확인된 Git 개발 기록 기준

유저가 적은 게임에서는 이미 형성된 친목 관계 밖에서 새 친구를 사귀기 어렵다고 느꼈습니다. 주변의 눈치를 보지 않고 함께 게임할 사람을 찾을 수 있는 공간을 만들고자 시작했습니다. 게임·태그로 사람을 찾고, 상대가 대화 요청을 수락하면 DM을 시작할 수 있습니다.

Discord 로그인프로필·게임·태그 설정검색·프로필 탐색DM 요청·수락실시간 대화

React 19 · React Router 7 · TypeScript · Vite
Supabase Auth / Postgres / RLS / Realtime / Storage
Drizzle(초기 구조) · Playwright · Vercel

기술 설명서버에서 인증·입력을 확인하고, DB의 RLS·RPC로 접근 권한을 적용했습니다. 검색 비용을 제한하고, DM의 읽음 상태는 DB에 저장해 실시간 이벤트가 누락돼도 다시 확인하도록 설계했습니다.

문서 OCR 학습 플랫폼02 / OCR

MAYEYE · 공공문서 접근성을 위한 OCR 데이터 구축

2025 · MAYEYE 재직 중 수행한 팀 프로젝트

텍스트를 추출하기 어려운 공공문서 PDF는 내용을 읽거나 TTS로 활용하는 데 제약이 있습니다. 문자 단위의 보정과 복잡한 문서 구조 검수가 반복되는 문제에서 출발해, 직원들이 OCR 결과를 수정하고 그 데이터를 추가 학습에 재사용하는 웹 플랫폼을 만들었습니다.

맡은 역할OCR 라벨링 웹 페이지 · 직원·관리자 계정 및 문서 관리
PaddleOCR 추가 학습 자동화 로직 · 수집 데이터의 GPU 학습 실행 코드

기술 설명오인식 페이지의 텍스트 영역과 인식 결과를 사람이 보정하고, 쌓인 라벨을 PaddleOCR 추가 학습의 입력으로 연결했습니다. 문서 업로드·작업 할당·결과 저장과 GPU 학습 준비를 하나의 작업 흐름으로 구성했습니다.

React · TypeScript · Tailwind CSS · Zustand · PDF.js
Python · FastAPI · PaddleOCR · PP-StructureV3 · PostgreSQL · Supabase Storage · SSE

노래 트레이닝 AI03 / MOBILE

SingSang · 내 목소리에 맞춰 연습하는 AI 보컬 트레이닝

내 음색에 어울리는 노래를 찾고, 내 목소리로 변환한 보컬을 들어보며 연습하는 모바일 팀 프로젝트입니다. 음색 기반 추천, 보컬 합성, 음정·박자 분석과 피드백을 하나의 연습 흐름으로 연결했습니다.

맡은 역할팀장 · 전체 시스템·API 설계 · 추천용 데이터 수집·가공
사용자 인증·음성 녹음 · 클라우드 GPU 자동 학습 연동 · RVC V2 학습 조건 조정 · DB·저장소 구성

기술 설명사용자 음성으로 클라우드 GPU에서 RVC V2 학습이 자동 진행되도록 연결했습니다. 데이터 분량과 학습 스텝의 관계를 고려해 훈련 조건을 조정하고, 과적합을 줄여 연습에 활용할 수 있는 보컬 비교 자료를 제공하는 데 초점을 맞췄습니다.

Flutter · Python · FastAPI · AWS S3 · RVC V2
팀 파이프라인: 보컬 임베딩 · 코사인 유사도 · 음정·박자 분석

도전 버튜버04 / DESKTOP

캐릭터와 목소리로 자신을 표현하는 방송 도구

아바타 생성, 음성 변조, 얼굴 추적과 방송 연동을 하나의 데스크톱 앱에서 연결한 팀 프로젝트입니다. 여러 도구를 각각 준비해야 하는 과정을 줄이고, 원하는 모습과 목소리로 방송할 수 있는 환경을 구성했습니다.

맡은 역할음성 변조 · 서버 구현

기술 설명음성 업로드·WAV 변환·S3 저장을 학습 요청과 연결하고, 모델 산출물을 조회하는 API를 구성했습니다. RVC 모델 블렌딩에서는 호환 조건을 확인한 뒤 가중치를 지정 비율로 결합합니다.

Python · FastAPI · ffmpeg · RVC · PyTorch · AWS S3 · Runpod
팀 앱: Electron · React · Firebase · THA4

만들면서 해결한 문제들

01느린 요청의 원인을 나눠 찾아내기LFF · 인증과 DB 시간을 구분해 반복 왕복 줄이기

문제DB 실행 시간은 짧은데 알림·메뉴 조회의 응답 꼬리 지연이 길었습니다.

판단실제 앱 요청의 인증과 RPC 시간을 나눠 측정했습니다. 최신 사용자 레코드가 필요 없는 읽기 경로에서 인증 서버 왕복을 줄일 수 있다고 판단했습니다.

해결해당 경로에 JWT claims 검증과 공유 verifier를 적용해 JWKS 캐시를 재사용했습니다. 데이터 접근 권한은 RPC·RLS에서 계속 확인하도록 했습니다.

결과6개 인증 세션을 공유한 50 VU Preview 비교에서 p99는 1,253ms → 492.1ms로 관측됐습니다. 짧은 실행의 비교이며 통제된 A/B 시험은 아닙니다. 후속 분산 시험의 목표 미달 항목도 상세 글에 기록했습니다.

계측·인증 개선과 측정 범위 읽기
02반복되는 OCR 보정을 추가 학습 데이터로 연결하기MAYEYE · 문서 보정의 결과를 다음 학습에 재사용

문제복잡한 공공문서의 OCR 결과는 영역·문단·표를 사람이 다시 확인해야 했고, 문자 단위의 보정과 검수가 반복됐습니다.

판단원본과 결과를 비교해 보정하는 화면과, 보정 데이터를 추가 학습에 사용하는 경로를 함께 만들기로 했습니다.

해결라벨링 웹, 직원·관리자 계정과 문서 할당·관리를 구현했습니다. 축적한 데이터를 PaddleOCR 추가 학습 입력으로 준비하는 자동화 로직과 GPU 학습 실행 코드를 연결했습니다.

결과문서 보정으로 만든 라벨을 추가 학습에 활용할 수 있는 흐름을 구현했습니다. 학습 전후 정확도와 작업 시간 절감 효과는 별도로 측정된 수치가 없습니다.

라벨링·추가 학습 연결 설계 읽기
03실시간 이벤트가 누락돼도 상태를 복구하기LFF · 메시지와 읽음 상태를 DB에 남겨 다시 맞추기

문제탭이 백그라운드로 가거나 연결이 끊기면 실시간 이벤트를 놓칠 수 있어, 화면의 읽음 상태가 실제 기록과 달라질 수 있었습니다.

판단이벤트 수신 여부와 별개로 다시 확인할 기준이 필요했습니다. 메시지·마지막 읽은 위치·미읽음 상태를 DB에 저장해 복구의 기준으로 삼았습니다.

해결Realtime을 재조회 신호로 사용하고, 재연결·포커스 복귀 때 필요한 데이터를 다시 읽도록 했습니다. 읽음 위치는 이전 값보다 뒤로 돌아가지 않게 처리했습니다.

결과격리된 로컬 Chromium에서 백그라운드·재연결·이벤트 유실 뒤의 상태 복구를 검증했습니다. headless 환경의 visibility·focus 신호는 테스트에서 강제한 조건입니다.

DM 복구 설계와 검증 근거 읽기

MAYEYE 인턴십

2025.05 ~ 2025.09