← All selected work대표 작업 전체
CASE 02 / Polyhop

Tutoring bookings, credits and Stripe payments과외 플랫폼의 예약·크레딧·Stripe 결제

A NestJS and TypeScript backend for a tutoring platform. My work connected teacher and student accounts, lesson bookings, credits, payments and calendar integrations.과외 플랫폼을 위한 NestJS·TypeScript 백엔드입니다. 강사·학생 계정부터 수업 예약, 크레딧, 결제, 캘린더 연동까지 구현했습니다.

My role담당 역할
Backend Developer백엔드 개발
Project context프로젝트 구분
Project work · 2025프로젝트 수행 · 2025
Focus핵심 구현
Teacher and student account APIs강사·학생 계정 API

Product context제품과 사용자

Polyhop is a tutoring platform with teacher and student accounts, lesson bookings, credits and payments. During the February–December 2025 project, I developed its NestJS/TypeScript backend and external-service integrations.Polyhop은 강사·학생 계정, 수업 예약, 크레딧, 결제를 갖춘 과외 플랫폼입니다. 2025년 2–12월 프로젝트에서 NestJS·TypeScript 백엔드와 외부 서비스 연동을 개발했습니다.

Who it serves사용자Teachers and students using account, booking and payment workflows; my scope was the backend that connects those workflows.계정·예약·결제 기능을 이용하는 강사와 학생을 위한 플랫폼이며, 저는 이 흐름을 연결하는 백엔드를 담당했습니다.

Keep booking and credit accounting together while coordinating payments, lesson meetings and confirmation messages.예약과 크레딧 처리를 함께 관리하면서 결제, 수업 미팅, 확인 메시지를 연결하는 것이 핵심 과제였습니다.

System flow시스템 흐름

  1. Authenticate the account계정 인증

    JWT, role-based access and Google OAuth support the teacher and student account APIs.강사·학생 계정 API에 JWT, 역할별 접근 제어, Google OAuth를 적용했습니다.

  2. Connect payment to credits결제와 크레딧 연결

    Stripe Checkout and signature-verified payment webhooks connect a completed payment with credit activation.Stripe Checkout과 서명 검증 결제 웹훅을 통해 결제 완료를 크레딧 활성화로 연결했습니다.

  3. Commit the booking예약 처리

    Reservation records and lesson-credit consumption are committed together in a transaction.예약 기록과 수업 크레딧 차감을 하나의 트랜잭션에서 함께 처리했습니다.

  4. Coordinate the lesson수업 후속 연동

    Background tasks handle Google Calendar/Meet creation and confirmation emails, with task status, attempt and error records.백그라운드 태스크가 Google Calendar·Meet 생성과 확인 이메일을 처리하며, 상태·시도·오류 기록을 남기도록 구성했습니다.

Engineering decisions설계에서 내린 선택

Organize around business modules업무 단위로 모듈 구성

Why이유
Accounts, reservations, credits and payments are related workflows with different responsibilities.계정·예약·크레딧·결제는 서로 연결되지만 각기 다른 책임을 가진 업무입니다.
Implementation구현
I organized authentication, users, lessons, bookings, credits, payments, calendars and notifications into NestJS modules.인증·사용자·수업·예약·크레딧·결제·캘린더·알림을 NestJS 모듈로 구성했습니다.

Separate core state from follow-up work핵심 데이터 처리와 후속 작업 분리

Why이유
Booking and credit accounting need to stay coordinated while external calendar and email work has its own lifecycle.예약과 크레딧은 함께 처리해야 하고, 외부 캘린더·이메일 작업은 별도의 처리 흐름이 필요했습니다.
Implementation구현
Transactional booking/credit updates were followed by queue-backed tasks, with an API Lambda and a separate SQS worker in the AWS architecture.예약·크레딧은 트랜잭션으로 처리하고 후속 작업은 큐로 분리했습니다. AWS 구성에는 API Lambda와 별도의 SQS 워커를 두었습니다.

Confirm payment on the backend백엔드에서 결제 확인

Why이유
Payment-to-credit activation needs a server-side confirmation step.결제를 크레딧으로 반영하려면 서버에서 결제를 확인하는 단계가 필요했습니다.
Implementation구현
I implemented the Stripe integration end to end: Checkout, signature-verified webhooks and credit activation.Checkout부터 서명 검증 웹훅, 크레딧 활성화까지 Stripe 결제 연동을 처음부터 끝까지 구현했습니다.

Implementation scope담당 구현 범위

Modular backend APIs모듈형 백엔드 API

Teacher/student accounts, authentication, lesson products, reservations, credits and payments in NestJS and TypeScript.NestJS·TypeScript로 강사·학생 계정, 인증, 수업 상품, 예약, 크레딧, 결제 API를 개발했습니다.

Payment and scheduling integrations결제·일정 연동

End-to-end Stripe payments plus Google Calendar/Meet and email follow-up tasks.전체 Stripe 결제 흐름과 Google Calendar·Meet·이메일 후속 작업을 구현했습니다.

AWS deployment configurationAWS 배포 구성

Lambda/API Gateway and SQS components, with GitHub Actions, Docker/ECR and Serverless Framework deployment tooling.Lambda·API Gateway·SQS 구성과 GitHub Actions, Docker·ECR, Serverless Framework 배포 도구를 다뤘습니다.

Project materials프로젝트 자료

View my project work on UpworkUpwork 프로젝트 자료 보기
A project in mind?함께 만들 프로젝트가 있나요?

Let’s connect the pieces.필요한 흐름을 함께 만듭니다.

Tell me what the product needs to do. We can start with the core workflow and a clear scope.제품이 해야 할 일을 알려주세요. 핵심 흐름과 명확한 작업 범위부터 함께 정리합니다.

Discuss a project프로젝트 문의