stack-analysis
CHAPTER 80 / 90
읽기 약 2분
FUNCTION
이커머스 종합: 완성된 쇼핑몰 구조
핵심 개념
Medusa·Saleor·자체 구축 비교·MVP 1주 출시 — 한국 쇼핑몰 표준.
본문
이커머스 솔루션 비교
| 솔루션 | 형태 | 비용 | 커스터마이징 | 한국 PG |
|---|---|---|---|---|
| Cafe24 | SaaS | 월 $30~ | 낮음 | ⭐⭐⭐⭐⭐ |
| Shopify | SaaS | 월 $39~ | 중 | ⭐⭐ (해외 위주) |
| Medusa | OSS | 무료 | 매우 높음 | 직접 구현 |
| Saleor | OSS | 무료 | 매우 높음 | 직접 구현 |
| 자체 구축 | 직접 | 시간 | 무제한 | 직접 |
결론:
- MVP·소규모: Cafe24 또는 Shopify
- 성장·중간: Shopify Plus 또는 Medusa
- 대규모·차별화: 자체 구축Medusa (오픈소스 권장)
# 설치
pnpm dlx create-medusa-app@latest
# 자동 셋업:
# - Backend: Express + TypeScript + Postgres + Redis
# - Storefront: Next.js 16
# - Admin: React (별도 앱)포함 기능:
✅ 상품·카테고리·재고
✅ 카트·체크아웃
✅ 결제 (Stripe·PayPal·자체 추가 가능)
✅ 다중 통화·다중 창고
✅ 쿠폰·할인
✅ 주문 상태 머신
✅ 환불·반품
✅ 관리자 대시보드
→ 80% 기능 무료 + 한국 PG는 plugin 추가자체 구축 - 추천 스택
[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인)
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 (압축)
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])
}출시 체크리스트 (한국 이커머스)
[법률]
☐ 사업자 등록 + 통신판매업 신고
☐ 약관 + 개인정보처리방침
☐ 환불·반품 정책 명시
☐ 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