MySQL 전환 기록 - 2026-06-06
전환 결정
Supabase 기반 MVP 진행을 멈추고 자체 서버에서 Next.js + MySQL 구조로 전환한다.
운영 기준:
- 도메인:
https://contract.noriter.co.kr - 앱 서버: Docker 컨테이너
real-estate-saas - 리버스 프록시/인증서: Docker 컨테이너
real-estate-caddy - DB: Docker 컨테이너
real-estate-mysql
코드 변경
@supabase/supabase-js제거mysql2추가src/lib/supabase-admin.ts삭제src/lib/mysql.ts추가src/app/api/admin/dashboard/route.ts를 MySQL 쿼리로 전환src/app/api/admin/offices/route.ts를 MySQL 연결로 전환src/lib/admin-offices.ts를 MySQL 트랜잭션 기반 등록/수정/조회로 전환.env.example을DATABASE_URL기준으로 변경docs/mysql-schema.sql추가Dockerfile,.dockerignore추가
서버 변경
/home/ubuntu/real-estate-contract-saas에 최신 코드 동기화real-estate-mysql컨테이너 생성- MySQL 데이터 볼륨
real_estate_mysql_data생성 - 서버 전용
.env.mysql,.env.local생성 docs/mysql-schema.sql실행real-estate-saas이미지 재빌드 및 재시작
검증 결과
- 로컬
npm run lint통과 - 로컬
npm run build통과 - 서버 Docker build 통과
GET https://contract.noriter.co.kr/api/admin/officessource: "mysql"configured: true- 부동산 3건 반환
GET https://contract.noriter.co.kr/api/admin/dashboardsource: "mysql"configured: true- 등록 부동산 3곳, 사용자 6명 반환
- HTTPS 응답 정상
문자셋 보정
- MySQL 연결은
utf8mb4charset을 명시한다. docs/mysql-schema.sql은set names utf8mb4와 DB 기본 문자셋 설정을 먼저 실행한다.- 초기 seed 데이터 한글 깨짐은 seed update 구문으로 복구했다.
GET /api/admin/dashboard와GET /api/admin/offices에서 한글 응답 정상 확인.
다음 우선순위
- MySQL 기반 로그인/권한 테이블 확정
- 본사관리자 부동산 오너 계정 생성
- 부동산 오너 관리자 사용자 등록 기능
- 계약하기 저장 API와 계약서 원본 데이터 구조 연결
- 계약관리, 고객관리, 매물관리 리스트 연결
- 과금 계산 로직 정식화
- PDF 저장/인쇄 구현