로컬에서 서버 PostgreSQL DB에 접속하는 방법: 1. SSH 터널 열기 ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 2. 다른 터미널에서 Web/Admin 앱 실행 - Web: dotnet run -p TaxBaik.Web - Admin: dotnet run -p TaxBaik.Admin 3. 마이그레이션 자동 실행 (앱 시작 시) - schema_migrations 테이블 확인 - 미실행 마이그레이션 순서대로 실행 개발 워크플로우: - 터미널 1: SSH 터널 유지 - 터미널 2: Web (http://localhost:5001/taxbaik) - 터미널 3: Admin (https://localhost:5002, admin/admin123) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -49,9 +49,120 @@ TaxBaik.Admin ASP.NET Core 앱 (Blazor Server, port 5002)
|
||||
|
||||
---
|
||||
|
||||
## 3. 서버 & 배포
|
||||
## 3. 로컬 개발 환경 설정
|
||||
|
||||
### 3.1 SSH 접속
|
||||
### 3.1 SSH 터널링으로 서버 DB 접속
|
||||
|
||||
**목적**: 로컬에서 개발/테스트 시 서버의 PostgreSQL에 접속
|
||||
|
||||
#### 단계 1: SSH 터널 구성 (PowerShell / Bash)
|
||||
|
||||
```bash
|
||||
# 터널 열기 (백그라운드 유지)
|
||||
ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7
|
||||
|
||||
# 터널이 열린 상태에서 다른 터미널에서 개발
|
||||
```
|
||||
|
||||
또는 **영구 설정** (`~/.ssh/config`):
|
||||
```
|
||||
Host taxbaik-tunnel
|
||||
HostName 178.104.200.7
|
||||
User kjh2064
|
||||
LocalForward 5432 127.0.0.1:5432
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
그 후:
|
||||
```bash
|
||||
ssh taxbaik-tunnel # 터널 유지
|
||||
```
|
||||
|
||||
#### 단계 2: 연결 확인
|
||||
|
||||
```bash
|
||||
# 로컬에서 PostgreSQL 연결 테스트
|
||||
psql -h localhost -U taxbaik -d taxbaikdb -c "\dt"
|
||||
|
||||
# 또는 .NET 앱 실행 (자동으로 마이그레이션 실행)
|
||||
dotnet run -p TaxBaik.Web
|
||||
```
|
||||
|
||||
#### 단계 3: 개발 워크플로우
|
||||
|
||||
```bash
|
||||
# 터미널 1: SSH 터널 유지
|
||||
ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7
|
||||
|
||||
# 터미널 2: Web 사이트 (Razor Pages)
|
||||
cd TaxBaik.Web
|
||||
dotnet run
|
||||
# 접속: http://localhost:5001/taxbaik
|
||||
|
||||
# 터미널 3: Admin 앱 (Blazor)
|
||||
cd TaxBaik.Admin
|
||||
dotnet run
|
||||
# 접속: https://localhost:5002
|
||||
# 로그인: admin / admin123
|
||||
```
|
||||
|
||||
### 3.2 appsettings.json (로컬)
|
||||
|
||||
```json
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"Default": "Host=localhost;Database=taxbaikdb;Username=taxbaik;Password=XXXXXXXX"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**중요**: 로컬 appsettings.json은 버전 관리에서 제외 또는 .local suffix 사용
|
||||
|
||||
```bash
|
||||
# 로컬 오버라이드
|
||||
appsettings.Development.json # gitignore에 추가
|
||||
```
|
||||
|
||||
### 3.3 데이터베이스 마이그레이션
|
||||
|
||||
앱 시작 시 자동 실행:
|
||||
1. `db/migrations/` 폴더에서 V001, V002, V003... 순서대로 읽음
|
||||
2. `schema_migrations` 테이블에서 실행 여부 확인
|
||||
3. 미실행 마이그레이션만 실행
|
||||
|
||||
**마이그레이션 추가**:
|
||||
```bash
|
||||
# 파일명: db/migrations/V004__새기능설명.sql
|
||||
# 예시
|
||||
CREATE TABLE IF NOT EXISTS new_table (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL
|
||||
);
|
||||
```
|
||||
|
||||
### 3.4 블로그 & 문의 테스트 데이터
|
||||
|
||||
마이그레이션 V003에서 자동 생성:
|
||||
- 테스트 관리자: `admin` / `admin123`
|
||||
- 테스트 블로그 포스트 5개
|
||||
- 테스트 카테고리 5개
|
||||
|
||||
수동 추가:
|
||||
```sql
|
||||
-- Admin 추가
|
||||
INSERT INTO admin_users (username, password_hash, created_at)
|
||||
VALUES ('newadmin', '$2a$11$...bcrypt_hash...', NOW());
|
||||
|
||||
-- 블로그 포스트 추가
|
||||
INSERT INTO blog_posts (title, content, slug, category_id, is_published, created_at)
|
||||
VALUES ('제목', '내용', 'slug-text', 1, true, NOW());
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 서버 & 배포
|
||||
|
||||
### 4.1 SSH 접속
|
||||
```bash
|
||||
ssh kjh2064@178.104.200.7
|
||||
```
|
||||
@@ -118,7 +229,7 @@ KillMode=mixed # SIGTERM → 30초 대기 → SIGKILL
|
||||
/etc/systemd/system/taxbaik-admin.service ← Admin
|
||||
```
|
||||
|
||||
### 3.5 배포 디렉토리 구조 (서버)
|
||||
### 5.5 배포 디렉토리 구조 (서버)
|
||||
```
|
||||
/home/kjh2064/
|
||||
├── taxbaik_active → ./deployments/taxbaik_20260626_150000/
|
||||
@@ -132,7 +243,7 @@ KillMode=mixed # SIGTERM → 30초 대기 → SIGKILL
|
||||
|
||||
---
|
||||
|
||||
## 4. Nginx 라우팅
|
||||
## 6. Nginx 라우팅
|
||||
|
||||
기존 Gitea (`/`)와 QuantEngine (`/quant/`)을 유지하면서 TaxBaik 추가:
|
||||
|
||||
@@ -166,9 +277,9 @@ location /taxbaik/admin {
|
||||
|
||||
---
|
||||
|
||||
## 5. 데이터베이스
|
||||
## 6. 데이터베이스
|
||||
|
||||
### 5.1 연결 설정
|
||||
### 4.1 연결 설정
|
||||
|
||||
**환경 변수** (systemd unit file에 설정):
|
||||
```ini
|
||||
@@ -177,7 +288,7 @@ Environment=ConnectionStrings__Default=Host=localhost;Database=taxbaikdb;Usernam
|
||||
|
||||
**절대 appsettings.Production.json에 비밀값을 하드코딩하지 말 것.**
|
||||
|
||||
### 5.2 Dapper 사용 패턴
|
||||
### 3.2 Dapper 사용 패턴
|
||||
|
||||
**DbConnectionFactory.cs**:
|
||||
```csharp
|
||||
@@ -209,7 +320,7 @@ public async Task<BlogPost?> GetBySlugAsync(string slug, CancellationToken ct)
|
||||
- 절대 문자열 연결 금지
|
||||
- 대소문자 구분 안 함 (Dapper가 매핑)
|
||||
|
||||
### 5.3 마이그레이션
|
||||
### 3.3 마이그레이션
|
||||
|
||||
마이그레이션 파일: `db/migrations/V{number}__{description}.sql`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user