프로젝트명 변경: choco-admin -> chocoadmin

This commit is contained in:
2026-06-11 11:22:01 +09:00
parent 976fe42a2a
commit d82f39c2f6
11 changed files with 38 additions and 40 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ export default async function AdminLayout({
<aside className="fixed inset-y-0 left-0 hidden w-64 border-r bg-background md:block"> <aside className="fixed inset-y-0 left-0 hidden w-64 border-r bg-background md:block">
<div className="flex h-16 items-center border-b px-5"> <div className="flex h-16 items-center border-b px-5">
<Link className="text-lg font-semibold" href="/"> <Link className="text-lg font-semibold" href="/">
choco-admin chocoadmin
</Link> </Link>
</div> </div>
<nav className="space-y-1 p-3"> <nav className="space-y-1 p-3">
+1 -3
View File
@@ -27,9 +27,7 @@ export default async function LoginPage({ searchParams }: LoginPageProps) {
<main className="flex min-h-screen items-center justify-center bg-muted px-6 py-10"> <main className="flex min-h-screen items-center justify-center bg-muted px-6 py-10">
<section className="w-full max-w-md rounded-lg border bg-background p-8 shadow-sm"> <section className="w-full max-w-md rounded-lg border bg-background p-8 shadow-sm">
<div className="mb-8"> <div className="mb-8">
<h1 className="text-2xl font-semibold tracking-normal"> <h1 className="text-2xl font-semibold tracking-normal">chocoadmin</h1>
choco-admin
</h1>
<p className="mt-2 text-sm text-muted-foreground"> </p> <p className="mt-2 text-sm text-muted-foreground"> </p>
</div> </div>
+1 -1
View File
@@ -2,7 +2,7 @@ import type { Metadata } from "next";
import "./globals.css"; import "./globals.css";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "choco-admin", title: "chocoadmin",
description: "Chocomae admin service", description: "Chocomae admin service",
}; };
+3 -3
View File
@@ -1,10 +1,10 @@
services: services:
choco-admin: chocoadmin:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
image: choco-admin:latest image: chocoadmin:latest
container_name: choco-admin container_name: chocoadmin
ports: ports:
- "3001:3000" - "3001:3000"
env_file: env_file:
+3 -3
View File
@@ -4,7 +4,7 @@
## 1. 개요 ## 1. 개요
이 문서는 기존 `mouse-typing` 관리자 기능을 조사해 신규 `choco-admin`에서 재현해야 할 비즈니스 규칙을 정리한 것이다. 이 문서는 기존 `mouse-typing` 관리자 기능을 조사해 신규 `chocoadmin`에서 재현해야 할 비즈니스 규칙을 정리한 것이다.
조사 대상: 조사 대상:
@@ -25,7 +25,7 @@
## 2. 기존 관리자 파일 맵 ## 2. 기존 관리자 파일 맵
| 기존 화면 | 서버 파일 | 역할 | 신규 `choco-admin` 매핑 | | 기존 화면 | 서버 파일 | 역할 | 신규 `chocoadmin` 매핑 |
|---|---|---|---| |---|---|---|---|
| `admin/login.html` | `server/admin/login.php` | 관리자 로그인 | `/login`, NextAuth Credentials Provider | | `admin/login.html` | `server/admin/login.php` | 관리자 로그인 | `/login`, NextAuth Credentials Provider |
| `admin/admin_all_list.html` | `server/admin/maestro_all_list.php` | 전체 마에스트로 목록 조회 | `/maestros`, `GET /api/maestros` | | `admin/admin_all_list.html` | `server/admin/maestro_all_list.php` | 전체 마에스트로 목록 조회 | `/maestros`, `GET /api/maestros` |
@@ -331,7 +331,7 @@ VALUES (?, ?, NOW(), ?)
- 로그 시간은 DB 서버의 `NOW()`를 사용한다. - 로그 시간은 DB 서버의 `NOW()`를 사용한다.
- `Remark` 컬럼은 `char(100)`이므로 신규 구현에서도 길이 초과에 주의한다. - `Remark` 컬럼은 `char(100)`이므로 신규 구현에서도 길이 초과에 주의한다.
## 11. 신규 `choco-admin` 구현 시 반드시 지켜야 할 규칙 ## 11. 신규 `chocoadmin` 구현 시 반드시 지켜야 할 규칙
- 운영 DB 스키마는 변경하지 않는다. - 운영 DB 스키마는 변경하지 않는다.
- 관리자 로그인은 기존 `admin.Name``admin.Password = PASSWORD(?)` 호환 검증을 지원한다. - 관리자 로그인은 기존 `admin.Name``admin.Password = PASSWORD(?)` 호환 검증을 지원한다.
+4 -4
View File
@@ -1,4 +1,4 @@
# choco-admin Deployment # chocoadmin Deployment
## 1. Production Environment ## 1. Production Environment
@@ -45,7 +45,7 @@ Allow MariaDB only from the Synology NAS public IP.
- Protocol: `TCP` - Protocol: `TCP`
- Port: `3306` - Port: `3306`
- Source: `NAS_PUBLIC_IP/32` - Source: `NAS_PUBLIC_IP/32`
- Description: `choco-admin Synology NAS` - Description: `chocoadmin Synology NAS`
Do not open `3306` to `0.0.0.0/0`. Do not open `3306` to `0.0.0.0/0`.
@@ -57,7 +57,7 @@ Before enabling approval/rejection operations against production DB:
2. Set `DATABASE_URL` in `.env.production` to that read-only account. 2. Set `DATABASE_URL` in `.env.production` to that read-only account.
3. Start the container. 3. Start the container.
4. Verify login, maestro list, extension request list, and upgrade request list. 4. Verify login, maestro list, extension request list, and upgrade request list.
5. Switch to the production write-capable choco-admin DB account only after read screens work. 5. Switch to the production write-capable chocoadmin DB account only after read screens work.
## 5. Smoke Checks ## 5. Smoke Checks
@@ -65,7 +65,7 @@ After container start:
```bash ```bash
docker compose ps docker compose ps
docker compose logs -f choco-admin docker compose logs -f chocoadmin
``` ```
Verify these routes in the browser: Verify these routes in the browser:
+3 -3
View File
@@ -4,7 +4,7 @@
`docs/plan/project-plan.md``9. 개발 단계 계획 > Phase 0. 기존 관리자 코드 조사`를 수행하기 위한 실행 계획이다. `docs/plan/project-plan.md``9. 개발 단계 계획 > Phase 0. 기존 관리자 코드 조사`를 수행하기 위한 실행 계획이다.
Phase 0의 목표는 기존 `mouse-typing` 관리자 기능의 비즈니스 규칙을 확인하고, 신규 `choco-admin`에서 동일하게 재현해야 할 규칙을 `docs/business-rules.md`에 문서화하는 것이다. Phase 0의 목표는 기존 `mouse-typing` 관리자 기능의 비즈니스 규칙을 확인하고, 신규 `chocoadmin`에서 동일하게 재현해야 할 규칙을 `docs/business-rules.md`에 문서화하는 것이다.
## 2. 조사 대상 ## 2. 조사 대상
@@ -45,7 +45,7 @@ Phase 0의 목표는 기존 `mouse-typing` 관리자 기능의 비즈니스 규
- 관리자 화면별 HTML 파일과 서버 PHP 파일의 호출 관계를 확인한다. - 관리자 화면별 HTML 파일과 서버 PHP 파일의 호출 관계를 확인한다.
- 각 화면의 목록 조회 조건, 검색 조건, 정렬 기준, 상태 필터를 확인한다. - 각 화면의 목록 조회 조건, 검색 조건, 정렬 기준, 상태 필터를 확인한다.
- 신규 `choco-admin`의 화면/API 구조와 직접 매핑 가능한 기능 목록을 정리한다. - 신규 `chocoadmin`의 화면/API 구조와 직접 매핑 가능한 기능 목록을 정리한다.
산출물: 산출물:
@@ -204,7 +204,7 @@ Phase 0의 목표는 기존 `mouse-typing` 관리자 기능의 비즈니스 규
- 연장 신청 조회/승인/취소 규칙 - 연장 신청 조회/승인/취소 규칙
- 업그레이드 신청 조회/승인/거절 규칙 - 업그레이드 신청 조회/승인/거절 규칙
- `maestro_log` 기록 규칙 - `maestro_log` 기록 규칙
- 신규 `choco-admin` 구현 시 반드시 지켜야 할 규칙 - 신규 `chocoadmin` 구현 시 반드시 지켜야 할 규칙
- 기존 코드에는 없지만 신규 구현에서 보완할 사항 - 기존 코드에는 없지만 신규 구현에서 보완할 사항
완료 기준: 완료 기준:
+5 -5
View File
@@ -1,13 +1,13 @@
# choco-admin 프로젝트 계획서 # chocoadmin 프로젝트 계획서
## 1. 프로젝트 개요 ## 1. 프로젝트 개요
| 항목 | 내용 | | 항목 | 내용 |
|---|---| |---|---|
| 서비스명 | choco-admin | | 서비스명 | chocoadmin |
| 목적 | chocomae 웹 서비스(mouse-typing)의 관리자 기능을 독립 웹 서비스로 분리 | | 목적 | chocomae 웹 서비스(mouse-typing)의 관리자 기능을 독립 웹 서비스로 분리 |
| 기존 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/mouse-typing` | | 기존 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/mouse-typing` |
| 신규 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/choco-admin` | | 신규 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/chocoadmin` |
| 사용 DB | 기존 chocomae DB (MariaDB 10.11.13) 그대로 사용 | | 사용 DB | 기존 chocomae DB (MariaDB 10.11.13) 그대로 사용 |
--- ---
@@ -111,7 +111,7 @@
```yaml ```yaml
# docker-compose.yml (개발용) # docker-compose.yml (개발용)
services: services:
choco-admin: chocoadmin:
build: . build: .
ports: ports:
- "3001:3000" - "3001:3000"
@@ -296,7 +296,7 @@ app/
## 9. 디렉토리 구조 (목표) ## 9. 디렉토리 구조 (목표)
``` ```
choco-admin/ chocoadmin/
├── app/ ├── app/
│ ├── (auth)/ │ ├── (auth)/
│ │ └── login/ │ │ └── login/
+9 -9
View File
@@ -1,13 +1,13 @@
# choco-admin 개발 작업 계획 # chocoadmin 개발 작업 계획
## 1. 프로젝트 개요 ## 1. 프로젝트 개요
`choco-admin`은 기존 `chocomae` 웹 서비스의 관리자 페이지와 관리자 기능만 독립 분리하는 신규 관리자 웹 서비스이다. `chocoadmin`은 기존 `chocomae` 웹 서비스의 관리자 페이지와 관리자 기능만 독립 분리하는 신규 관리자 웹 서비스이다.
- 기존 서비스명: `chocomae` - 기존 서비스명: `chocomae`
- 기존 서비스 개발 디렉토리: `/Users/jisangs/work/jinaju/git/web/mouse-typing` - 기존 서비스 개발 디렉토리: `/Users/jisangs/work/jinaju/git/web/mouse-typing`
- 신규 서비스명: `choco-admin` - 신규 서비스명: `chocoadmin`
- 신규 서비스 개발 디렉토리: `/Users/jisangs/work/jinaju/git/web/choco-admin` - 신규 서비스 개발 디렉토리: `/Users/jisangs/work/jinaju/git/web/chocoadmin`
- 개발 목표: 기존 `mouse-typing` 서비스의 관리자 기능을 Next.js 기반 독립 서비스로 재구성 - 개발 목표: 기존 `mouse-typing` 서비스의 관리자 기능을 Next.js 기반 독립 서비스로 재구성
- 기존 운영 환경: AWS EC2 `t3a.medium` 인스턴스 1개 - 기존 운영 환경: AWS EC2 `t3a.medium` 인스턴스 1개
- 신규 개발/운영 플랫폼: Synology NAS Docker - 신규 개발/운영 플랫폼: Synology NAS Docker
@@ -56,7 +56,7 @@
- 장점: Next.js와 궁합이 좋고, 관리자 화면에 필요한 버튼, 입력, 다이얼로그, 탭, 폼 구성이 빠름 - 장점: Next.js와 궁합이 좋고, 관리자 화면에 필요한 버튼, 입력, 다이얼로그, 탭, 폼 구성이 빠름
- 장점: 컴포넌트 코드를 프로젝트 안에서 직접 소유하므로 장기 유지보수에 유리함 - 장점: 컴포넌트 코드를 프로젝트 안에서 직접 소유하므로 장기 유지보수에 유리함
- 단점: Tailwind 클래스에 익숙해지는 시간이 필요함 - 단점: Tailwind 클래스에 익숙해지는 시간이 필요함
- 추천 이유: `choco-admin`처럼 작은 팀/개인 프로젝트에서 빠르게 만들고 나중에 고치기 좋음 - 추천 이유: `chocoadmin`처럼 작은 팀/개인 프로젝트에서 빠르게 만들고 나중에 고치기 좋음
### 2순위: Mantine ### 2순위: Mantine
@@ -84,7 +84,7 @@
- 장점: 서버 사이드 페이지네이션, 정렬, 필터링을 구현하기 좋음 - 장점: 서버 사이드 페이지네이션, 정렬, 필터링을 구현하기 좋음
- 장점: shadcn/ui의 Data Table 패턴과 잘 맞음 - 장점: shadcn/ui의 Data Table 패턴과 잘 맞음
- 단점: 직접 조립해야 하는 부분이 있어 초기 구현량이 있음 - 단점: 직접 조립해야 하는 부분이 있어 초기 구현량이 있음
- 추천 이유: 관리자 기능이 늘어날 가능성이 높은 `choco-admin`에 가장 유연함 - 추천 이유: 관리자 기능이 늘어날 가능성이 높은 `chocoadmin`에 가장 유연함
### 2순위: AG Grid Community ### 2순위: AG Grid Community
@@ -104,7 +104,7 @@
## 6. DB 기준 관리자 대상 테이블 ## 6. DB 기준 관리자 대상 테이블
스키마 파일: `/Users/jisangs/work/jinaju/git/web/choco-admin/docs/db-reference/schema.sql` 스키마 파일: `/Users/jisangs/work/jinaju/git/web/chocoadmin/docs/db-reference/schema.sql`
### 주요 테이블 ### 주요 테이블
@@ -269,7 +269,7 @@
## 8. 애플리케이션 구조 제안 ## 8. 애플리케이션 구조 제안
```text ```text
choco-admin/ chocoadmin/
app/ app/
login/ login/
maestros/ maestros/
@@ -313,7 +313,7 @@ choco-admin/
### 운영 환경 ### 운영 환경
- Synology NAS Docker에서 `choco-admin` 컨테이너 실행 - Synology NAS Docker에서 `chocoadmin` 컨테이너 실행
- 운영 DB는 기존 AWS EC2 MariaDB에 접속 - 운영 DB는 기존 AWS EC2 MariaDB에 접속
- AWS 보안 그룹에서 Synology NAS 공인 IP만 MariaDB 접속 허용 - AWS 보안 그룹에서 Synology NAS 공인 IP만 MariaDB 접속 허용
- DB 계정은 관리자 서비스 전용 계정으로 분리 - DB 계정은 관리자 서비스 전용 계정으로 분리
+7 -7
View File
@@ -1,13 +1,13 @@
# choco-admin 프로젝트 계획서 # chocoadmin 프로젝트 계획서
## 1. 프로젝트 개요 ## 1. 프로젝트 개요
| 항목 | 내용 | | 항목 | 내용 |
|---|---| |---|---|
| 서비스명 | choco-admin | | 서비스명 | chocoadmin |
| 목적 | chocomae 웹 서비스(mouse-typing)의 관리자 기능을 독립 웹 서비스로 분리 | | 목적 | chocomae 웹 서비스(mouse-typing)의 관리자 기능을 독립 웹 서비스로 분리 |
| 기존 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/mouse-typing` | | 기존 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/mouse-typing` |
| 신규 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/choco-admin` | | 신규 서비스 경로 | `/Users/jisangs/work/jinaju/git/web/chocoadmin` |
| 기존 운영 환경 | AWS EC2 t3a.medium 인스턴스 1개 | | 기존 운영 환경 | AWS EC2 t3a.medium 인스턴스 1개 |
| 사용 DB | 기존 chocomae DB (MariaDB 10.11.13) 그대로 사용 | | 사용 DB | 기존 chocomae DB (MariaDB 10.11.13) 그대로 사용 |
@@ -70,7 +70,7 @@
| 실행 방법 | Synology Container Manager (`docker compose up`) | | 실행 방법 | Synology Container Manager (`docker compose up`) |
| DB (서비스) | AWS EC2 MariaDB (chocomae 서비스와 동일 인스턴스) | | DB (서비스) | AWS EC2 MariaDB (chocomae 서비스와 동일 인스턴스) |
| DB 접근 | AWS 보안그룹에서 NAS 외부 IP만 3306 포트 허용 | | DB 접근 | AWS 보안그룹에서 NAS 외부 IP만 3306 포트 허용 |
| DB 계정 | choco-admin 전용 최소 권한 계정으로 분리 | | DB 계정 | chocoadmin 전용 최소 권한 계정으로 분리 |
| 환경변수 | `.env.production` 또는 Container Manager 환경변수 설정 | | 환경변수 | `.env.production` 또는 Container Manager 환경변수 설정 |
### 4-3. Dockerfile / docker-compose (배포용) ### 4-3. Dockerfile / docker-compose (배포용)
@@ -90,7 +90,7 @@ CMD ["pnpm", "start"]
```yaml ```yaml
# docker-compose.yml # docker-compose.yml
services: services:
choco-admin: chocoadmin:
build: . build: .
ports: ports:
- "3001:3000" - "3001:3000"
@@ -151,7 +151,7 @@ services:
## 6. 애플리케이션 구조 ## 6. 애플리케이션 구조
``` ```
choco-admin/ chocoadmin/
├── app/ ├── app/
│ ├── (auth)/ │ ├── (auth)/
│ │ └── login/ │ │ └── login/
@@ -277,7 +277,7 @@ choco-admin/
2. 기존 `admin.Password` 저장 방식(평문/해시/자체 암호화)을 먼저 확인한 뒤 동일 방식 또는 해시 업그레이드를 결정한다. 2. 기존 `admin.Password` 저장 방식(평문/해시/자체 암호화)을 먼저 확인한 뒤 동일 방식 또는 해시 업그레이드를 결정한다.
3. 승인·취소·거절 액션은 Next.js Server Action 또는 API Route에서 CSRF 보호를 적용한다. 3. 승인·취소·거절 액션은 Next.js Server Action 또는 API Route에서 CSRF 보호를 적용한다.
4. DB 연결 정보는 `.env` 파일로 관리하며 Git에 커밋하지 않는다. 4. DB 연결 정보는 `.env` 파일로 관리하며 Git에 커밋하지 않는다.
5. 배포 DB 계정은 choco-admin 전용 계정으로 분리하고 최소 권한(SELECT + 필요한 테이블만 UPDATE)을 적용한다. 5. 배포 DB 계정은 chocoadmin 전용 계정으로 분리하고 최소 권한(SELECT + 필요한 테이블만 UPDATE)을 적용한다.
6. AWS EC2 보안그룹에서 MariaDB 포트(3306)를 NAS 외부 IP로만 허용한다. 6. AWS EC2 보안그룹에서 MariaDB 포트(3306)를 NAS 외부 IP로만 허용한다.
7. 관리자 전용 서비스이므로 외부에 직접 노출하지 않고 VPN 또는 NAS 내부 포트로 접근하는 방식을 권장한다. 7. 관리자 전용 서비스이므로 외부에 직접 노출하지 않고 VPN 또는 NAS 내부 포트로 접근하는 방식을 권장한다.
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"name": "choco-admin", "name": "chocoadmin",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"packageManager": "pnpm@10.29.3", "packageManager": "pnpm@10.29.3",