OPEN HYPER STEP
← 목록으로 (stack-analysis)
STACK-ANALYSIS · 80 / 90
stack-analysis
CHAPTER 80 / 90
읽기 약 2
FUNCTION

이커머스 종합: 완성된 쇼핑몰 구조


핵심 개념

Medusa·Saleor·자체 구축 비교·MVP 1주 출시 — 한국 쇼핑몰 표준.

본문

이커머스 솔루션 비교

📋 코드 (13줄)
| 솔루션 | 형태 | 비용 | 커스터마이징 | 한국 PG |
|---|---|---|---|---|
| Cafe24 | SaaS | 월 $30~ | 낮음 | ⭐⭐⭐⭐⭐ |
| Shopify | SaaS | 월 $39~ | 중 | ⭐⭐ (해외 위주) |
| Medusa | OSS | 무료 | 매우 높음 | 직접 구현 |
| Saleor | OSS | 무료 | 매우 높음 | 직접 구현 |
| 자체 구축 | 직접 | 시간 | 무제한 | 직접 |


결론:
- MVP·소규모: Cafe24 또는 Shopify
- 성장·중간: Shopify Plus 또는 Medusa
- 대규모·차별화: 자체 구축

Medusa (오픈소스 권장)

BASH📋 코드 (7줄)
# 설치
pnpm dlx create-medusa-app@latest

# 자동 셋업:
# - Backend: Express + TypeScript + Postgres + Redis
# - Storefront: Next.js 16
# - Admin: React (별도 앱)
📋 코드 (12줄)
포함 기능:
✅ 상품·카테고리·재고
✅ 카트·체크아웃
✅ 결제 (Stripe·PayPal·자체 추가 가능)
✅ 다중 통화·다중 창고
✅ 쿠폰·할인
✅ 주문 상태 머신
✅ 환불·반품
✅ 관리자 대시보드


→ 80% 기능 무료 + 한국 PG는 plugin 추가

자체 구축 - 추천 스택

📋 코드 (36줄)
[Frontend Storefront]
- Next.js 16 + App Router
- Tailwind + shadcn
- TanStack Query
- Cart: Zustand + persist

[Backend]
- Express 또는 Next.js API
- PostgreSQL (Prisma)
- Redis (캐시·큐)
- BullMQ (이메일·이미지 처리)

[Admin]
- 별도 Next.js 앱
- TanStack Table
- 또는 Refine (admin framework)

[결제]
- 토스페이먼츠 (한국)
- Stripe (글로벌)

[검색]
- Meilisearch
- 또는 PostgreSQL FTS

[Storage]
- Cloudflare R2 (S3 호환)
- 이미지 처리: sharp + Cloudflare Image Resizing

[배송]
- 스마트택배 API (운송장 추적)
- 또는 도착 알림 앱

[이메일]
- Resend (트랜잭션)
- 채널톡 (CS)

1주 출시 일정 (1인)

📋 코드 (34줄)
Day 1: 셋업
- Medusa 또는 자체 셋업
- 도메인 + Vercel + Supabase

Day 2: 상품 등록
- 카테고리 트리
- 상품 10~50개
- 이미지 + 변형

Day 3: 결제 + 배송
- 토스페이먼츠 연동
- 배송지·배송비 정책
- 쿠폰 1~2개

Day 4: 디자인
- 랜딩 페이지
- 상품 페이지
- 체크아웃 흐름

Day 5: 관리자
- 주문 관리
- 재고 관리
- CS 채널톡

Day 6: 테스트
- 결제 테스트 (PG 테스트 카드)
- 모바일 UX
- 속도 최적화

Day 7: 출시
- SEO 메타데이터
- Naver Search Console
- Google Analytics
- 첫 광고 캠페인

핵심 schema.prisma (압축)

PRISMA📋 코드 (126줄)
model Product {
  id           String   @id @default(cuid())
  name         String
  description  String?
  categoryId   String?
  basePrice    Decimal
  status       String   @default("draft")
  attributes   Json     @default("{}")
  variants     ProductVariant[]
  category     Category? @relation(fields: [categoryId], references: [id])
  reviews      Review[]
  avgRating    Decimal  @default(0)
  reviewsCount Int      @default(0)
  createdAt    DateTime @default(now())

  @@index([categoryId])
  @@index([status, createdAt(sort: Desc)])
}

model ProductVariant {
  id            String   @id @default(cuid())
  productId     String
  sku           String   @unique
  name          String
  attributes    Json
  price         Decimal
  stockQuantity Int      @default(0)
  reserved      Int      @default(0)
  imageUrl      String?
  product       Product  @relation(fields: [productId], references: [id])
}

model Order {
  id              String   @id @default(cuid())
  orderNumber     String   @unique
  userId          String
  status          String
  subtotal        Decimal
  shippingFee     Decimal  @default(0)
  discount        Decimal  @default(0)
  total           Decimal
  shippingAddress Json
  items           OrderItem[]
  payment         Payment?
  shipment        Shipment?
  createdAt       DateTime @default(now())
  paidAt          DateTime?

  @@index([userId, createdAt(sort: Desc)])
  @@index([status])
}

model OrderItem {
  id           String   @id @default(cuid())
  orderId      String
  variantId    String
  productName  String   // 스냅샷
  variantName  String
  unitPrice    Decimal  // 스냅샷
  quantity     Int
  subtotal     Decimal
  order        Order    @relation(fields: [orderId], references: [id])
}

model Payment {
  id              String   @id @default(cuid())
  orderId         String   @unique
  pgProvider      String
  pgTransactionId String?
  amount          Decimal
  status          String
  paidAt          DateTime?
  rawData         Json?
  order           Order    @relation(fields: [orderId], references: [id])
}

model Cart {
  id        String     @id @default(cuid())
  userId    String?    @unique
  sessionId String?    @unique
  items     CartItem[]
  expiresAt DateTime?
  createdAt DateTime   @default(now())
}

model CartItem {
  id        String @id @default(cuid())
  cartId    String
  variantId String
  quantity  Int
  cart      Cart   @relation(fields: [cartId], references: [id])

  @@unique([cartId, variantId])
}

model Coupon {
  id              String   @id @default(cuid())
  code            String   @unique
  type            String
  value           Decimal
  minOrderAmount  Decimal?
  maxDiscount     Decimal?
  usageLimit      Int?
  usagePerUser    Int      @default(1)
  conditions      Json?
  expiresAt       DateTime?
  redemptions     CouponRedemption[]
}

model Review {
  id               String   @id @default(cuid())
  productId        String
  userId           String
  orderId          String?
  rating           Int
  title            String?
  content          String
  images           String[]
  verifiedPurchase Boolean  @default(false)
  helpfulCount     Int      @default(0)
  status           String   @default("pending")
  createdAt        DateTime @default(now())
  product          Product  @relation(fields: [productId], references: [id])

  @@unique([productId, userId, orderId])
}

출시 체크리스트 (한국 이커머스)

📋 코드 (32줄)
[법률]
☐ 사업자 등록 + 통신판매업 신고
☐ 약관 + 개인정보처리방침
☐ 환불·반품 정책 명시
☐ KISA SSL 인증

[결제]
☐ 토스페이먼츠 또는 카카오페이 연동
☐ 무통장 입금 옵션
☐ 무이자 할부 설정

[배송]
☐ 택배사 계약 (CJ대한통운·로젠 등)
☐ 운송장 자동 생성 (스마트택배)
☐ 도서산간 배송비 정책

[CS]
☐ 채널톡 또는 Crisp 설치
☐ FAQ 페이지
☐ 1:1 문의

[마케팅]
☐ 네이버 쇼핑 입점
☐ Google Search Console
☐ Naver Search Console
☐ 카카오톡 채널
☐ 인스타그램 + 광고

[운영]
☐ 일별 매출 모니터링
☐ 재고 부족 알림
☐ CS 응답 시간 < 1일

다음 모듈

CH.81~90 "커뮤니티/소셜 해부".


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 프로젝트의 이커머스 종합 부분을 분석해서
실전 분석 + 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

이커머스 종합 관련 실제 서비스 5개를
비교 분석해서 패턴 추출를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스에서 이커머스 종합
최적화 가능 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 풀스택 시장의
이커머스 종합 트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
이커머스 종합: 완성된 쇼핑몰 구조 이 3가지만 확실히 잡으세요
1.MVP는 Cafe24/Shopify/Medusa — 자체 구축은 차별화 필요할 때
2.1주 출시 가능 — Day별 명확한 작업 분배
3.한국 이커머스는 토스페이먼츠 + 스마트택배 + 채널톡 표준 조합


공유하기
진행도 80 / 90