Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/workflows/cd-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,18 @@ jobs:

- name: Configure Docker for GCR
run: gcloud auth configure-docker

- name: Build Docker Image
run: |
docker build -t $IMAGE_NAME:$GITHUB_SHA \
-t $IMAGE_NAME:latest \
.

- name: Push Docker Image to GCR
run: |
docker push $IMAGE_NAME:$GITHUB_SHA
docker push $IMAGE_NAME:latest

- name: Deploy to Cloud Run
run: |
gcloud run deploy $SERVICE_NAME \
Expand All @@ -73,20 +73,20 @@ jobs:
--max-instances 10 \
--min-instances 0 \
--timeout=900 \
--startup-cpu-boost \
--cpu-boost \
--execution-environment gen2 \
--port=8080 \
--set-env-vars="SPRING_PROFILES_ACTIVE=prod,DB_NAME=${{ secrets.DB_NAME }},DB_USERNAME=cmall,SPRING_APPLICATION_NAME=feedshop,PORT=8080,SERVER_SSL_ENABLED=false,SERVER_ADDRESS=0.0.0.0" \
--update-secrets="DB_PASSWORD=shopchat-db-password:latest,MAILGUN_API_KEY=mailgun_api_key:latest,MAILGUN_DOMAIN=mailgun_domain:latest,MAILGUN_EMAIL=mailgun_email:latest,GCS_ID=gcs_id:latest,GCS_BUCKET=gcs_prod_bucket:latest,JWT_SECRET=feedshop-jwt-secret-key:latest,RECAPTCHA_SECRET_KEY=recaptcha_secret_key:latest,GOOGLE_CLIENT_ID=google_client_id:latest,GOOGLE_CLIENT_SECRET=google_client_secret:latest,KAKAO_CLIENT_ID=kakao_client_id:latest,KAKAO_CLIENT_SECRET=kakao_client_secret:latest,OPENAI_API_KEY=openAI_api_key:latest"

- name: Wait for deployment
run: |
echo "Waiting for deployment to complete..."
sleep 60

# 서비스 상태 확인
gcloud run services describe $SERVICE_NAME --region=$REGION --format="value(status.conditions[0].status,status.conditions[0].message)"

- name: Check deployment status and logs
if: failure()
run: |
Expand All @@ -100,13 +100,13 @@ jobs:

echo "=== Service Status ==="
gcloud run services describe $SERVICE_NAME --region=$REGION --format="yaml(status)"

- name: Get Service URL
run: |
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region=$REGION --format="value(status.url)")
echo "Service deployed at: $SERVICE_URL"
echo "SERVICE_URL=$SERVICE_URL" >> $GITHUB_ENV

- name: Health Check
run: |
echo "Waiting for service to be ready..."
Expand Down Expand Up @@ -147,4 +147,4 @@ jobs:
else
echo "❌ Deployment failed!"
exit 1
fi
fi
155 changes: 28 additions & 127 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
- [📖 API 문서](#-api-문서)
- [🧪 테스트](#-테스트)
- [🔧 개발 환경](#-개발-환경)
- [📈 CI/CD](#cicd)
- [📈 CI/CD](#-cicd)
- [🤝 기여 방법](#-기여-방법)
- [📝 라이선스](#-라이선스)

Expand All @@ -35,7 +35,6 @@
- **상품 관리**: 상품 등록, 수정, 삭제, 옵션 관리, 이미지 업로드
- **장바구니**: 상품 추가/삭제, 수량 변경, 선택 상품 관리
- **주문 시스템**: 주문 생성, 주문 내역 조회, 재고 관리, 포인트 사용
- **결제 연동**: 다양한 결제 수단 지원 (구현 예정)

### 👤 사용자 관리

Expand Down Expand Up @@ -67,97 +66,16 @@
### 🤖 AI 기능

- **상품 추천**: OpenAI 기반 개인화 상품 추천
- **AI 챗봇**: 상품 문의 및 고객 지원 (구현 예정)
- **스마트 검색**: AI 기반 상품 검색 및 필터링 (구현 예정)
- **스마트 검색**: AI 기반 상품 검색 및 필터링

---


## 🏗️ 아키텍처

### 전체 시스템 아키텍처
<img width="1172" height="747" alt="image" src="https://github.com/user-attachments/assets/e993975b-4e9e-40bf-8302-364e640c938e" />

```mermaid
graph TB
%% Frontend Layer
subgraph "Frontend (Vercel)"
FE["React Frontend<br/>🌐 www.feedshop.store"]
end

%% CDN & Storage
subgraph "Static Assets"
CDN["CDN<br/>📁 cdn-feedshop.store<br/>(Google Cloud Storage)"]
end

%% Backend Services
subgraph "GCP Backend Services"
subgraph "Development Environment"
DEV_APP["Development API<br/>🔧 Spring Boot<br/>(Local/Dev Server)"]
DEV_DB[(Development DB<br/>🗄️ MySQL<br/>Compute Engine + Docker)]
end

subgraph "Production Environment"
PROD_APP["Production API<br/>🚀 Spring Boot<br/>Cloud Run<br/>feedshop-springboot-561086069695.asia-northeast3.run.app"]
PROD_DB[(Production DB<br/>☁️ Cloud SQL MySQL<br/>feedshop-db)]
end
end

%% External Services
subgraph "External Services"
MAILGUN["Mailgun<br/>📧 Email Service"]
RECAPTCHA["Google reCAPTCHA<br/>🛡️ Bot Protection"]
SONAR["SonarCloud<br/>📊 Code Quality"]
OPENAI["OpenAI<br/>🤖 AI Services"]
OAUTH["OAuth2 Providers<br/>🔐 Google, Kakao"]
end

%% CI/CD Pipeline
subgraph "CI/CD Pipeline"
GITHUB["GitHub Repository<br/>📚 Source Code"]
GH_ACTIONS["GitHub Actions<br/>⚙️ CI/CD Pipeline"]
end

%% User Interactions
USER["👤 Users"]
DEV["👨‍💻 Developers"]

%% Frontend Connections
USER --> FE
FE --> PROD_APP
FE --> CDN

%% Development Flow
DEV --> GITHUB
DEV_APP --> DEV_DB

%% Production Flow
PROD_APP --> PROD_DB
PROD_APP --> CDN
PROD_APP --> MAILGUN
PROD_APP --> RECAPTCHA
PROD_APP --> OPENAI
PROD_APP --> OAUTH

%% CI/CD Flow
GITHUB --> GH_ACTIONS
GH_ACTIONS --> SONAR
GH_ACTIONS -->|Deploy to Main| PROD_APP
GH_ACTIONS -->|Build & Test| DEV_APP

%% Styling
classDef frontend fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef backend fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef database fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef external fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef cicd fill:#fff8e1,stroke:#ff6f00,stroke-width:2px
classDef user fill:#fce4ec,stroke:#880e4f,stroke-width:2px

class FE frontend
class DEV_APP,PROD_APP backend
class DEV_DB,PROD_DB database
class MAILGUN,RECAPTCHA,SONAR,OPENAI,OAUTH external
class GITHUB,GH_ACTIONS cicd
class USER,DEV user
```

### 인프라 구성 요소

Expand Down Expand Up @@ -217,7 +135,7 @@ src/main/java/com/cMall/feedShop/
| **Feed** | ✅ 완료 | 피드 작성, 조회, 좋아요, 댓글 | 높음 |
| **Event** | ✅ 완료 | 이벤트 관리, 검색, 필터링 | 높음 |
| **Store** | ✅ 완료 | 스토어 정보 관리 | 높음 |
| **AI** | 🔄 진행중 | OpenAI 기반 상품 추천 | 중간 |
| **AI** | ✅ 완료 | OpenAI 기반 상품 추천 | 높음 |

---

Expand All @@ -242,6 +160,7 @@ src/main/java/com/cMall/feedShop/
| **MySQL 8.0** | 메인 데이터베이스 |
| **H2** | 테스트용 인메모리 DB |
| **Google Cloud Storage** | 파일 저장소 |
| **Google Cloud SQL** | 클라우드 데이터베이스 |

### DevOps & Quality

Expand All @@ -259,7 +178,6 @@ src/main/java/com/cMall/feedShop/
| -------------------- | --------------------- |
| **Mailgun** | 이메일 발송 |
| **Google reCAPTCHA** | 봇 방지 |
| **Google Cloud SQL** | 클라우드 데이터베이스 |
| **OpenAI API** | AI 상품 추천 |
| **Google OAuth2** | 소셜 로그인 |
| **Kakao OAuth2** | 소셜 로그인 |
Expand All @@ -277,14 +195,8 @@ src/main/java/com/cMall/feedShop/

### 빠른 시작

1. **레포지토리 클론**

```bash
git clone https://github.com/ECommerceCommunity/FeedShop_Backend.git
cd FeedShop_Backend
```

2. **환경 설정**
1. **환경 설정**

```bash
# application.properties.example을 복사하여 설정 파일 생성
Expand All @@ -301,13 +213,13 @@ src/main/java/com/cMall/feedShop/
export KAKAO_CLIENT_SECRET=your_kakao_client_secret
```

3. **데이터베이스 설정**
2. **데이터베이스 설정**

```sql
CREATE DATABASE feedshop_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

4. **애플리케이션 실행**
3. **애플리케이션 실행**

```bash
# 개발 환경
Expand Down Expand Up @@ -421,14 +333,15 @@ logging:

### GitHub Actions 워크플로우

1. **CI Pipeline** (`.github/workflows/ci.yml`)
**CI Pipeline** (`.github/workflows/ci.yml`)

- Pull Request 시 자동 실행
- 빌드, 테스트, 코드 분석 수행
- SonarCloud 품질 게이트 검증
- Pull Request 시 자동 실행
- 빌드, 테스트, 코드 분석 수행
- SonarCloud 품질 게이트 검증
<img width="1908" height="1020" alt="ci build" src="https://github.com/user-attachments/assets/cff9a741-9485-4095-9120-5185b1d7fb94" />

<img width="1897" height="1065" alt="test" src="https://github.com/user-attachments/assets/fcec5d7d-e0af-41c0-9c3d-ddba4c44e984" />

2. **Jira 연동** (`.github/workflows/create-jira-issue.yml`)
- GitHub 이슈 생성 시 Jira 태스크 자동 생성

### 배포 환경

Expand All @@ -439,10 +352,12 @@ logging:
### 모니터링

- **애플리케이션 메트릭**: Spring Boot Actuator
- **로그 관리**: 구조화된 로깅
- **성능 모니터링**: APM 도구 연동 (구현 예정)
- **시각화 대시보드**: Grafana (구현 예정)
- **클라우드 모니터링**: Google Cloud Monitoring (구현 예정)
- **로그 관리**: 구조화된 로깅(Google Cloud Logging)
- **시각화 대시보드**: Grafana
- **클라우드 모니터링**: Google Cloud Monitoring
<img width="1277" height="872" alt="image" src="https://github.com/user-attachments/assets/cca37753-9f9d-4686-8975-3c891ba6ea5c" />



---

Expand All @@ -459,12 +374,12 @@ logging:
### 커밋 메시지 규칙

```
type(scope): description
MYCE-001 type/scope: description

feat(user): 사용자 회원가입 기능 추가
fix(order): 주문 생성 시 재고 검증 버그 수정
refactor(product): 상품 조회 로직 개선
docs(readme): API 문서 업데이트
feat/user: 사용자 회원가입 기능 추가
fix/order: 주문 생성 시 재고 검증 버그 수정
refactor/product: 상품 조회 로직 개선
docsreadme: API 문서 업데이트
```

### 코드 리뷰 체크리스트
Expand All @@ -477,24 +392,10 @@ docs(readme): API 문서 업데이트

---

## 📝 라이선스

이 프로젝트는 **MIT 라이선스**를 따릅니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참고하세요.

---

## 📞 문의 및 지원

- **이슈 리포트**: [GitHub Issues](https://github.com/ECommerceCommunity/FeedShop_Backend/issues)
- **기술 문서**: [Wiki](https://github.com/ECommerceCommunity/FeedShop_Backend/wiki)
- **개발자 가이드**: [개발 가이드 문서](docs/DEVELOPMENT.md)

---

<div align="center">

**FeedShop Backend Team** 🚀

_현대적인 이커머스 플랫폼을 위한 안정적이고 확장 가능한 백엔드 시스템_

</div>
</div>
6 changes: 4 additions & 2 deletions src/main/java/com/cMall/feedShop/config/DataInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

/**
* 애플리케이션 시작 시 초기 데이터를 설정하는 클래스
Expand Down Expand Up @@ -216,11 +217,12 @@ private void createTestUser(String email, String loginId, UserRole role) {
return;
}

String newPassword = UUID.randomUUID().toString();

try {
// 테스트 사용자 생성 - PasswordEncoder를 사용하여 비밀번호 암호화
User testUser = new User(
loginId,
passwordEncoder.encode("password123!"), // 실제 암호화
passwordEncoder.encode(newPassword),
email,
role
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@
public class EmailRequest {
@Schema(description = "이메일 주소", example = "user@example.com", required = true)
private String email;

public void setEmail(String email) {
this.email = email;
}
}
Loading
Loading