오승용Oh Seungyong · Full-stack DeveloperFull-stack Developer

AI를 개발 도구로 활용하는 풀스택 개발자Full-stack developer using AI as a dev tool

AI로 더 빠르게 만들고,
직접 검증해 출시합니다.
I build faster with AI,
then verify it myself and ship it.

Next.js·TypeScript 기반 웹 서비스부터 React Native 모바일 앱까지 직접 개발합니다.
AI는 리서치·개발·디버깅의 속도를 높이는 데 활용합니다.
I build and ship across web and mobile — Next.js/TypeScript services and React Native apps.
AI accelerates research, development and debugging; I verify the results before shipping.

Next.js · TypeScript · React NativeNext.js · TypeScript · React Native

App Store · Google Play 출시Live on the App Store & Google Play

OH.DEV · 오승용 · Seoul
DoNa live · QuoteCrate live
스크롤Scroll ↓
사용 기술Built with TypeScriptReactNext.jsNode.jsPostgreSQLPrismaAWS
AI 워크플로우AI Workflow ClaudeCursor

모아 놓은 프로젝트Selected work

직접 만들고
운영하는 프로젝트
Products I
build and run

기획부터 프론트엔드·백엔드 개발, 배포와 운영까지 직접 경험합니다. AI를 리서치·개발·디버깅 과정에 적극 활용해 반복 작업을 줄이고, 실제 사용자에게 도달하는 서비스로 빠르게 검증합니다.I handle product planning, frontend/backend development, deployment and operations end to end. AI cuts repetitive work in research, development and debugging, so I can validate faster with a service that reaches real users.

AI가 만든 결과를 그대로 사용하지 않고, 공식 문서·실행 결과·실사용 데이터를 기준으로 직접 검증합니다.I don't use what AI produces as-is — I verify it against official docs, execution results, and real usage data.

두나 앱 실제 화면 — 오늘의 데이트 코스
01

두나 (DoNa)DoNa

FEATURED · LIVE

데이트 코스 추천 서비스Date-course recommendation service

1인 개발 · Web / iOS / Android 정식 출시Solo build · Live on Web / iOS / Android

장소를 찾는 것에서 끝나지 않고, 데이트 장소의 순서와 동선까지 결정할 수 있도록 만든 서비스Goes beyond finding places — decides the order and route between date spots too

Next.jsTypeScriptPostgreSQLPrismaReact Native

httpOnly Cookie 인증 전환 · N+1 쿼리 개선 · Redis Rate Limiting · 모바일 빌드 이슈 해결httpOnly cookie auth · N+1 query fix · Redis rate limiting · mobile build fix

프로젝트 자세히 보기View project details→

Problem

기존 지도·장소 검색 서비스는 장소를 보여주지만, 데이트 장소를 어떤 순서로 이동해야 하는지까지 결정해주지는 않았습니다.Existing map and place-search services show you places, but don't decide the order you should move through them for a date.

내 역할My Role

기획 · 프론트엔드 · 백엔드 · DB 설계 · 결제 연동 · 모바일 앱 · 배포 · 운영까지 1인으로 진행했습니다.Solo — product planning, frontend, backend, database design, payment integration, the mobile app, deployment and ongoing operations.

아키텍처Architecture

Web · MobileWeb · Mobile→ Next.js APINext.js API→ PostgreSQL · PrismaPostgreSQL · Prisma→ Redis · S3 · Toss/RevenueCat · SentryRedis · S3 · Toss/RevenueCat · Sentry

기술적 문제 해결Technical Challenges

두나를 개발하며 실제로 부딪힌 기술적 문제 중 2가지입니다.Two of the real technical problems I ran into while building DoNa.

Case 01 · 안드로이드 빌드 의존성 충돌Case 01 · Android build dependency conflict

문제Problem
Android 빌드에서 React 19와 react-naver-maps 간 peer dependency 충돌, AGP/Gradle 버전 문제 발생Android build failed from a React 19 / react-naver-maps peer-dependency conflict plus an AGP/Gradle version mismatch
AI 활용AI use
에러 로그를 기반으로 원인 후보와 버전 충돌 가능성을 빠르게 정리Used AI to quickly triage likely causes and version-conflict candidates from the error log
직접 검증Verified myself
패키지 의존성과 라이브러리 호환성을 직접 확인하고 버전을 조정한 뒤 재빌드해 해결Checked package dependencies and library compatibility myself, adjusted versions, and rebuilt
결과Result
Android 빌드 정상화 및 배포 진행Android build fixed and shipped

Case 02 · 인증 구조 개선 (JWT → httpOnly Cookie)Case 02 · Auth hardening (JWT → httpOnly cookie)

문제Problem
인증 구조에서 JWT를 localStorage에 저장해 사용 중이었음Auth was storing the JWT in localStorage
AI 활용AI use
XSS, httpOnly Cookie, SameSite, CSRF 관련 위험과 대안을 정리Used AI to lay out the XSS/httpOnly-cookie/SameSite/CSRF risks and alternatives
직접 검증Verified myself
기존 인증 흐름을 분석하고 httpOnly 쿠키 방식으로 직접 전환, SameSite 설정과 요청 흐름을 검증Analyzed the existing auth flow, switched it to httpOnly cookies myself, and verified SameSite settings and the request flow
결과Result
클라이언트에서 토큰에 직접 접근하는 경로를 제거하고 인증 구조 개선Removed direct client-side access to the token and hardened the auth structure

그 외 구현Also shipped

  • 인증 구조 개선: JWT를 localStorage 대신 httpOnly 쿠키로 전환해 클라이언트의 토큰 직접 접근을 제거Auth hardening: moved the JWT out of localStorage into an httpOnly cookie, removing direct client access to the token
  • N+1 개선: 각 항목마다 관계 데이터를 반복 조회하던 구조를 relation include 기반으로 재구성해 per-item 반복 조회를 제거N+1 fix: restructured a per-item relation lookup into a single relation-include query, removing the per-item repeated queries
  • Redis Rate Limiting: Upstash Redis 기반으로 요청 속도 제한 적용Rate limiting: applied request rate limiting on Upstash Redis
  • 빌드 의존성 문제: React 19·react-naver-maps peer dependency 및 AGP/Gradle 버전 충돌 해결Build dependencies: resolved React 19 / react-naver-maps peer-dependency and AGP/Gradle version conflicts
  • 결제 연동: TossPayments·RevenueCat 구독 결제 직접 연동Payments: integrated TossPayments and RevenueCat subscription billing myself
  • 배포 및 모니터링: Vercel 배포, CloudFront CDN, Sentry 에러 모니터링 연결Deploy & monitoring: shipped on Vercel, fronted with CloudFront CDN, wired up Sentry error monitoring

검증Validation

  • 관찰: "코스를 늘리면 구매도 늘 것"이라 보고 35개까지 만들었지만 구매 전환은 0건. 릴스는 조회수가 나와도 시청자가 앱 존재 자체를 모른다는 것도 확인Observed: assumed more courses → more purchases, built up to 35 courses, got zero purchases; also found Reel viewers often don't know the app exists at all
  • 판단: "많이 만들면 팔린다"는 가설을 접고, 만들기 전에 수요부터 검증하는 방식으로 전환Decided: dropped the "build more, it'll sell" assumption and switched to validating demand before building
  • 실행/검증: 주렁주렁 영등포 빙고 이벤트로 첫 구조적 검증 실험: 카카오톡 채널 설문(66명, 응답률 15%)·당근마켓 투표(118명 중 응답 5명, 60% 긍정)로 약~중간 신호 확인 후 릴스 행동 데이터로 다음 검증 진행 중Validated: ran a bingo-event experiment as the first structured test: a KakaoTalk-channel survey (66 members, ~15% response) and a Daangn poll (118 views, 5 responses, 60% positive) showed a weak-to-moderate signal; now validating further via Reels behavior data

Result

코스 44개 제작, 앱스토어·구글플레이 정식 출시.44 courses built, live on the App Store and Google Play.

콘텐츠 도달 (제품 성과와 별개): Content reach (separate from product performance): 인스타 팔로워 138명('26.08), 협찬 릴스 1건 조회 40만+ — 앱 전환은 별도로 측정하지 않았습니다.138 Instagram followers (Aug '26), one sponsored reel past 400K views — app conversion from this was not tracked separately.

FE Next.js 14 · TypeScript · Tailwind BE Node.js · PostgreSQL · Prisma Mobile React Native (Expo) · EAS Build Infra Vercel · CloudFront · Upstash Redis · Sentry Payment TossPayments · RevenueCat

Links

다른 프로젝트Other projects

미리보기Preview
견적 요청Quote request#1042 · Wholesale
가격 책정Pricing
체크아웃Checkout$1,280.00
결제 완료Paid
견적Quote → 가격Price → 수락Accept → Checkout
02

QuoteCrate

LIVE

Shopify B2B 견적 앱Shopify B2B quoting app

1인 개발 · Shopify App Store 정식 출시 (2026.10)Solo build · Live on the Shopify App Store (Oct 2026)

RemixNode.jsPostgreSQLShopify
프로젝트 자세히 보기View project details→

Shopify 도매(B2B) 견적 → 주문·결제 전환 앱. 견적–가격 책정–체크아웃을 하나로 잇고, 구독 결제·필수 웹훅·이메일 인증까지 직접 구현해 Shopify App Store에 정식 출시했습니다.A Shopify wholesale (B2B) quote-to-order app. Connected quote → pricing → checkout in one flow, with subscription billing, mandatory webhooks and authenticated email — now live on the Shopify App Store.

  • 견적 → 결제 E2E 구현Quote → payment, verified E2E
  • Billing API 구독 + 무료체험Billing API subscription + trial
  • 웹훅(HMAC)·스코프 최소화 심사 대응HMAC webhooks & minimal scope

기술 문제 해결 · Checkout 401 오류Debugging story · Checkout 401

문제Problem
Embedded app 내부 요청에서 결제가 계속 401로 실패했습니다.Checkout kept failing with 401 inside the embedded app's requests.
초기 가정Initial assumption
인증 토큰 문제라고 확신하고 이틀을 헤맸습니다.I was sure it was an auth-token bug and lost two days on it.
조사Investigation
성공/실패 요청의 request·response를 직접 비교했습니다.Compared the successful vs. failing request/response pairs myself.
원인Root cause
인증이 아니라 iframe 안에서 외부 리다이렉트가 막혀 401로 표출된 것이었습니다.Not auth — an external redirect was being blocked inside the iframe and surfacing as a 401.
수정Fix
Shopify App Bridge로 top window를 이동시켜 리다이렉트가 통과되도록 했습니다.Used Shopify App Bridge to move the redirect to the top window.
결과Result
정상 인증 흐름을 복구했고, 이후로는 오류 메시지를 곧이곧대로 믿지 않게 됐습니다.Restored the normal auth flow — since then I don't take an error message at face value.
FE React · Polaris BE Remix · Node · Prisma · PostgreSQL Shopify GraphQL · Draft Orders · Billing
github.com/12jason0/quotecrate
03

두나 관리자 백오피스DoNa Admin Back Office

운영 중In use

AI 장소 자동수집 · 운영 관리자 시스템Admin system with AI place collection

1인 개발 · 실제 서비스 운영에 매일 사용Solo build · Used daily to run the live service

Next.jsNode.jsPostgreSQLClaude APITelegram Bot
프로젝트 자세히 보기View project details→

DB를 직접 고치던 운영 업무를 관리자 화면으로 옮기고, 장소 수집·번역·점검을 자동화했습니다. 관리자 화면은 내부 전용입니다.Moved operations that used to mean editing the database by hand into an admin UI, and automated place collection, translation and checks. Internal only.

  • 텔레그램으로 장소 사진·이름 전송 → Claude API가 주소·4개 언어 번역 → 검수 후 등록Send a place via Telegram → Claude API fills address & 4-language translation → reviewed before publishing
  • 버튼 한 번으로 전체 장소 폐업·주소 변경 주 1회 점검One-click weekly check for closed places and address changes
  • 분석 대시보드 · 코스/장소 관리 · 제보 검토 · 환불 · 푸시 알림Analytics dashboard · course/place management · reports · refunds · push
Web Next.js · TypeScript BE Node.js · Prisma · PostgreSQL AI Claude API · Telegram Bot
04

개콜 (개린이 콜라보)GaeCall (Beginner Collab)

부트캠프Bootcamp

팀 협업·관리 웹 서비스Team collaboration web app

4인 팀 · 프론트엔드 담당 · 포스코×코딩온 최우수상Team of 4 · Frontend · Top team award

JavaScriptReact
프로젝트 자세히 보기View project details→

개발 입문자 팀의 프로젝트 협업·관리 웹 서비스. 팀 4인(포스코×코딩온 11기 2차) — 최우수상. 회원가입·로그인·대시보드·작업보드·이슈관리 등 프론트엔드 전반 구현, axios 기반 API 연동 주도.A collaboration/PM web app for a bootcamp beginners' team (4 people, POSCO×CodingOn cohort 11) — top team award. Built most of the frontend: auth, dashboard, task board, issue tracker; led axios-based API integration.

협업: Collaboration: 화면을 나눠 개발하다 중간 점검에서 화면마다 여백·간격·스타일이 제각각인 걸 발견. 서로 화면을 공유하며 기준을 맞춰 발표 전까지 UI를 통일했습니다.We split screens to build in parallel; a mid-project check revealed each screen had inconsistent spacing and styling. We screen-shared to agree on a shared standard and unified the UI before the demo.

JavaScript · React

아카이브 · 이전 작업Archive · Earlier work

부트캠프Bootcamp 메이킹홈MakingHome 원룸 인테리어 웹 최적화 · 2인 팀 · 데스크톱 UI 재구성Web-optimized interior service · pair project · rebuilt for desktop

기술 문제 해결 사례Technical Case Study

동작하는 코드보다,
운영할 수 있는 구조를 고민합니다
I build for operability, not just functionality.

두나에서 실제로 부딪힌 인증 구조 문제 하나를, 어떻게 진단하고 어떤 대안을 검토해서 실제로 어떻게 설정했는지 정리했습니다.One real authentication problem I ran into building DoNa — how I diagnosed it, weighed the alternatives, and actually configured the fix.

JWT 인증 구조 개선 · localStorage → httpOnly CookieJWT Auth Hardening · localStorage → httpOnly Cookie

문제Problem
JWT를 localStorage에 저장하는 구조를 사용 중이었고, XSS가 발생하면 저장된 토큰이 그대로 노출될 수 있다는 것을 확인했습니다.The JWT was being stored in localStorage, and I confirmed that an XSS hit would expose the stored token directly.
후보안Candidate options
localStorage 유지 / sessionStorage로 이동 / httpOnly Cookie 전환, 세 가지를 놓고 비교했습니다. localStorage·sessionStorage는 구현은 간단하지만 XSS가 발생하면 토큰이 그대로 노출되고, httpOnly Cookie는 클라이언트 JavaScript가 아예 접근할 수 없어 노출 경로 자체를 없앨 수 있었습니다.Compared three options: keep localStorage, move to sessionStorage, or switch to an httpOnly cookie. localStorage and sessionStorage are simpler to implement but still expose the token directly under XSS; an httpOnly cookie is unreachable from client-side JavaScript entirely, removing that exposure path altogether.
선택 이유Reason for choice
SameSite·CSRF 위험과 실제 인증 요청 흐름을 함께 검토한 뒤에도 httpOnly Cookie가 XSS 노출 범위를 가장 줄일 수 있는 선택이라고 판단해 전환하기로 결정했습니다.Even after weighing the SameSite/CSRF trade-offs against the real authenticated request flow, an httpOnly cookie still cut the XSS exposure the most, so I decided to move to it.
실제 설정Actual configuration
response.cookies.set("auth", token, {
  httpOnly: true,
  secure: process.env.NODE_ENV === "production",
  sameSite: "lax",
  path: "/",
  maxAge: 60 * 60 * 24 * 365,
});
쿠키명은 auth, SameSite=Lax, 운영 환경에서만 Secure를 적용하고 유효기간은 1년으로 설정했습니다.Cookie name is auth, SameSite=Lax, Secure only in production, with a one-year maxAge.
결과Result
클라이언트 JavaScript에서 토큰에 직접 접근하는 경로를 제거했습니다.Removed the path for client-side JavaScript to access the token directly.

AI를 어떻게 활용하는가How I use AI

AI에 맡기는 것과 직접 판단해야 하는 것을 구분합니다I draw a line between what AI handles and what I decide myself

AI는 속도를 높이는 도구로 적극 활용하지만, 보안·데이터 구조·의존성·배포처럼 실제 서비스에 영향을 주는 결정은 공식 문서와 실행 결과를 기준으로 직접 검증합니다.I use AI to accelerate research, implementation, and debugging, while validating technical decisions through documentation, logs, tests, and runtime behavior.

01

리서치Research

AI로 문제 범위와 확인할 키워드를 먼저 좁히고, 공식 문서로 넘어갑니다.AI narrows the problem scope and keywords first, then I move to official docs.

02

개발Development

반복 코드·초안은 AI로 빠르게 만들고, 실제 코드베이스에 맞게 직접 수정합니다.AI drafts boilerplate fast; I edit it to fit the real codebase.

03

디버깅Debugging

에러 로그로 AI가 원인 가설을 세우면, 직접 재현해 검증합니다.AI hypothesizes causes from the error log; I reproduce and verify each one.

04

운영·콘텐츠Ops & content

피드백 정리·카피 초안 등 반복적인 운영 업무도 AI로 시간을 줄입니다.Repetitive ops — feedback summaries, copy drafts — also go faster with AI.

실제 사례 · 안드로이드 빌드 에러A real example · Android build error

빌드 에러 발생Build error occurs→ AI로 원인 후보 정리AI triages likely causes→ 패키지·공식 문서 직접 확인I check the package & docs myself→ 버전 호환성 확인Verify version compatibility→ 재빌드Rebuild→ 문제 해결Fixed

AI의 답변보다 실행 결과를 신뢰합니다.I trust execution results over AI's answers.

할 수 있는 일What I do

BUILDBUILD프론트엔드 · 백엔드 · DB 설계와 구현Frontend · backend · database design · SHIPSHIP결제 연동 · 배포 · 앱스토어 심사Payments · deployment · store review · OPERATEOPERATE모니터링 · 운영 · 지속 개선Monitoring · operations · iteration

경력Experience

지금까지 걸어온 길Where I've been

2025.08 — 현재Present

두나 (DoNa) · 개발 및 운영DoNa — Build & Run

데이트 코스 추천 서비스를 1인으로 기획·개발·운영합니다.Planning, building and running a date-course recommendation service, solo.

2026.09 — 현재Present

프리랜서 활동Freelance · Upwork · Wishket · Freemoa

웹·앱 개발 외주 플랫폼에서 프로필을 운영하며 첫 프로젝트를 준비하고 있습니다.Maintaining profiles on web and app development freelance platforms while preparing for my first project.

2024.07 — 2025.01

퀀텀에이아이 · 데이터 QA 프리랜서Quantum AI — Freelance Data QA

AI 학습 데이터 구축을 위한 이미지 내 텍스트 추출 및 검수, 추출 데이터 오류 확인 및 품질 관리를 수행했습니다.Extracted and proofed text from images for AI training data, and checked extracted data for errors and quality.

2023.12 — 2024.06

포스코×코딩온 K-Digital Training 11기POSCO×CodingOn K-Digital Training, Cohort 11

수료. 팀 프로젝트 1·2차 모두 최우수상을 받았습니다.Completed the program; won the top team award in both round-1 and round-2 team projects.

함께 제품을 만들 개발자를
찾고 계신가요?
Looking for a developer
to build with?

채용·협업 문의는 언제든 환영합니다.Open to roles and collaboration — reach out anytime.