Skip to content

SeolKey/KeyboardSBA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⌨️ Keyboard SBA

키보드 커뮤니티 및 중고거래 플랫폼입니다. 키보드, 키캡 등 다양한 기계식 키보드 관련 제품을 판매하고, 경매 시스템을 통해 거래할 수 있으며, 커뮤니티 게시판을 통해 정보를 공유할 수 있는 통합 플랫폼입니다.

📋 목차

✨ 주요 기능

🔐 사용자 관리

  • 일반 회원가입 및 로그인
  • 카카오 소셜 로그인 연동
  • 사용자 프로필 관리
  • 관리자 권한 관리

🛒 상품 관리

  • 키보드, 키캡, 중고거래 상품 등록 및 관리
  • 상품 상세 정보 조회
  • 상품 수정 및 삭제
  • 이미지 업로드 지원

🔨 경매 시스템

  • 경매 참여 및 입찰
  • 경매 상품 등록 및 관리
  • 입찰 내역 조회
  • 낙찰 처리

💬 채팅 시스템

  • 경매 상품별 채팅 기능
  • 채팅 메시지 작성 및 전송
  • 채팅 내역 조회 (페이지 새로고침 필요)

📝 커뮤니티 게시판

  • 게시글 작성, 수정, 삭제
  • 게시글 목록 조회
  • 이미지 첨부 지원

🚨 신고 시스템

  • 부적절한 게시글/상품 신고 기능
  • 신고 내용 작성 및 이미지 첨부
  • 관리자 신고 목록 조회 및 처리

👨‍💼 관리자 기능

  • 사용자 관리
  • 게시글 관리
  • 상품 관리
  • 신고 관리

🛠 기술 스택

Backend

  • Java 17 - 프로그래밍 언어
  • Spring Boot 3.3.2 - 웹 애플리케이션 프레임워크
  • Spring Data JPA - 데이터베이스 ORM
  • MyBatis 3.0.3 - SQL 매퍼 프레임워크
  • MySQL - 관계형 데이터베이스
  • Thymeleaf - 서버 사이드 템플릿 엔진
  • Lombok - 보일러플레이트 코드 제거
  • Spring WebFlux - 비동기 웹 처리

Build & Deploy

  • Gradle - 빌드 도구
  • War - 웹 애플리케이션 패키징

Development Tools

  • p6spy - SQL 로깅 및 모니터링
  • Spring Boot DevTools - 개발 편의 도구

📁 프로젝트 구조

graph LR
    subgraph "Presentation Layer"
        A1[Controller<br/>View 반환]
        A2[RestController<br/>JSON 반환]
    end
    
    subgraph "Business Layer"
        B1[BO<br/>Business Object]
    end
    
    subgraph "Data Access Layer"
        C1[Mapper<br/>MyBatis]
        C2[Repository<br/>JPA]
    end
    
    subgraph "Domain Layer"
        D1[Entity<br/>Domain Object]
    end
    
    A1 --> B1
    A2 --> B1
    B1 --> C1
    B1 --> C2
    C1 --> D1
    C2 --> D1
    
    style A1 fill:#e1f5ff
    style A2 fill:#e1f5ff
    style B1 fill:#fff4e1
    style C1 fill:#ffe1f5
    style C2 fill:#ffe1f5
    style D1 fill:#e1ffe1
Loading

모듈 구조

graph TB
    A[keyboardSBA] --> B[Domain Modules]
    A --> C[Common Modules]
    A --> D[Infrastructure]
    
    B --> B1[admin<br/>관리자]
    B --> B2[alert<br/>신고]
    B --> B3[auction<br/>경매]
    B --> B4[chat<br/>채팅]
    B --> B5[item<br/>상품]
    B --> B6[kakao<br/>카카오 로그인]
    B --> B7[post<br/>게시판]
    B --> B8[user<br/>사용자]
    
    C --> C1[common<br/>공통 유틸리티]
    C --> C2[aop<br/>AOP]
    C --> C3[Interceptor<br/>인터셉터]
    C --> C4[config<br/>설정]
    
    D --> D1[resources<br/>설정/템플릿]
    
    style A fill:#e1f5ff
    style B fill:#ffe1f5
    style C fill:#fff4e1
    style D fill:#e1ffe1
Loading

각 모듈의 표준 구조

각 도메인 모듈(admin, alert, auction, chat, item, post, user)은 다음과 같은 구조를 따릅니다:

{module}/
├── {Module}Controller.java      # View 반환 컨트롤러
├── {Module}RestController.java   # JSON 반환 REST 컨트롤러
├── bo/
│   └── {Module}BO.java          # 비즈니스 로직
├── domain/
│   └── {Module}.java             # 도메인 객체
└── mapper/
    └── {Module}Mapper.java       # MyBatis 매퍼 인터페이스

디렉토리 구조

keyboardSBA/
├── src/main/java/com/keyboardsba/
│   ├── admin/          # 관리자 기능
│   ├── alert/          # 신고 기능
│   ├── auction/        # 경매 기능
│   ├── chat/           # 채팅 기능
│   ├── item/           # 상품 관리
│   ├── kakao/          # 카카오 로그인
│   ├── post/           # 게시판
│   ├── user/           # 사용자 관리
│   ├── common/         # 공통 유틸리티
│   ├── config/         # 설정 파일
│   ├── aop/            # AOP 설정
│   └── Interceptor/    # 인터셉터
├── src/main/resources/
│   ├── application.yml # 설정 파일
│   ├── mappers/        # MyBatis 매퍼 XML
│   ├── static/         # 정적 리소스 (CSS, 이미지)
│   └── templates/      # Thymeleaf 템플릿
├── build.gradle        # Gradle 빌드 설정
└── settings.gradle     # Gradle 프로젝트 설정

🗄 데이터베이스 설계

erDiagram
    USER ||--o{ ITEM : "등록"
    USER ||--o{ POST : "작성"
    USER ||--o{ AUCTION : "입찰"
    USER ||--o{ ALERT : "신고"
    ITEM ||--o{ AUCTION : "경매"
    ITEM ||--o{ CHAT : "채팅"
    
    USER {
        int id PK
        string loginId
        string password
        string name
        string email
        int admin
        string phoneNumber
        datetime createdAt
        datetime updatedAt
    }
    
    ITEM {
        int id PK
        int userId FK
        string loginId
        string title
        int price
        string status
        string type
        string content
        datetime time
        string imageUrl
        datetime createdAt
        datetime updatedAt
    }
    
    POST {
        int id PK
        int userId FK
        string subject
        string content
        string imageUrl
        datetime createdAt
        datetime updatedAt
    }
    
    AUCTION {
        int id PK
        int userId FK
        int itemId FK
        string loginId
        int paid
        datetime createdAt
        datetime updatedAt
    }
    
    CHAT {
        int id PK
        int itemId FK
        string loginId
        string content
        datetime createdAt
        datetime updatedAt
    }
    
    ALERT {
        int id PK
        int userId FK
        string subject
        string content
        datetime createdAt
        datetime updatedAt
    }
Loading

테이블 설명

USER (사용자)

  • 사용자 정보를 저장하는 테이블
  • 일반 회원가입 및 카카오 로그인 사용자 모두 포함
  • admin 필드로 관리자 권한 관리

ITEM (상품)

  • 판매 상품 정보를 저장하는 테이블
  • type 필드로 키보드(keyboard), 키캡(keycap), 중고거래(trade), 경매(auction) 구분
  • status 필드로 판매 상태 관리

POST (게시글)

  • 커뮤니티 게시글 정보를 저장하는 테이블
  • 이미지 첨부 지원

AUCTION (경매)

  • 경매 입찰 정보를 저장하는 테이블
  • paid 필드로 입찰 금액 관리

CHAT (채팅)

  • 경매 상품별 채팅 메시지를 저장하는 테이블
  • 상품별로 채팅방 구분

ALERT (신고)

  • 사용자 신고 정보를 저장하는 테이블
  • 부적절한 게시글, 상품 등에 대한 신고 내용 저장

🏗 시스템 아키텍처

graph LR
    A[사용자] -->|HTTP Request| B[Spring Boot Application]
    B --> C{Controller Layer}
    C -->|비즈니스 로직| D[BO Layer]
    D -->|데이터 접근| E[Mapper/Repository Layer]
    E -->|SQL Query| F[(MySQL Database)]
    
    B --> G[Thymeleaf Template Engine]
    G -->|HTML Response| A
    
    B --> H[Kakao OAuth2]
    H -->|인증| I[Kakao API]
    
    B --> J[File Manager Service]
    J -->|파일 저장| K[Static Resources]
    
    B --> L[AOP]
    L -->|성능 모니터링| M[TimeTraceAop]
    
    B --> N[Interceptor]
    N -->|권한 체크| O[PermissionInterceptor]
    
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style F fill:#ffe1f5
    style I fill:#e1ffe1
Loading

레이어 구조

graph TB
    subgraph "Presentation Layer"
        A1[Controller]
        A2[RestController]
    end
    
    subgraph "Business Layer"
        B1[BO - Business Object]
    end
    
    subgraph "Data Access Layer"
        C1[Mapper - MyBatis]
        C2[Repository - JPA]
    end
    
    subgraph "Domain Layer"
        D1[Entity]
        D2[Domain Object]
    end
    
    A1 --> B1
    A2 --> B1
    B1 --> C1
    B1 --> C2
    C1 --> D2
    C2 --> D1
    
    style A1 fill:#e1f5ff
    style A2 fill:#e1f5ff
    style B1 fill:#fff4e1
    style C1 fill:#ffe1f5
    style C2 fill:#ffe1f5
    style D1 fill:#e1ffe1
    style D2 fill:#e1ffe1
Loading

🚀 설치 및 실행

필수 요구사항

  • Java 17 이상
  • MySQL 8.0 이상
  • Gradle 7.0 이상

설치 단계

  1. 저장소 클론
git clone https://github.com/your-username/keyboardSBA.git
cd keyboardSBA
  1. 데이터베이스 설정

    • MySQL 데이터베이스 생성
    CREATE DATABASE keyboard_sba CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    • src/main/resources/application.yml 파일에서 데이터베이스 연결 정보 수정
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/keyboard_sba?characterEncoding=UTF-8
        username: your_username
        password: your_password
  2. 카카오 OAuth 설정 (선택사항)

    • 카카오 개발자 콘솔에서 애플리케이션 등록
    • application.yml 파일에서 카카오 OAuth 정보 수정
    spring:
      security:
        oauth2:
          client:
            registration:
              kakao:
                client-id: your_client_id
                client-secret: your_client_secret
                redirect-uri: http://localhost:80/kakao/callback
  3. 프로젝트 빌드

# Windows
gradlew.bat build

# Linux/Mac
./gradlew build
  1. 애플리케이션 실행
# Windows
gradlew.bat bootRun

# Linux/Mac
./gradlew bootRun
  1. 브라우저에서 접속

개발 환경 설정

  • IDE: IntelliJ IDEA 또는 Eclipse 권장
  • Lombok 플러그인 설치 필수
  • Spring Boot DevTools로 자동 재시작 활성화

📡 주요 API 엔드포인트

사용자 관련

GET  /user/sign-up-view          # 회원가입 페이지
GET  /user/sign-in-view          # 로그인 페이지
POST /user/sign-up               # 회원가입 처리
POST /user/sign-in               # 로그인 처리
GET  /user/sign-out              # 로그아웃
GET  /kakao/callback             # 카카오 로그인 콜백

상품 관련

GET  /item/item-list-view        # 상품 목록 페이지
GET  /item/item-keyboard-view    # 키보드 목록 페이지
GET  /item/item-keycap-view      # 키캡 목록 페이지
GET  /item/item-trade-view       # 중고거래 목록 페이지
GET  /item/item-create-view      # 상품 등록 페이지
GET  /item/item-detail-view      # 상품 상세 페이지
GET  /item/item-update-view      # 상품 수정 페이지
POST /item/create                # 상품 등록 처리
POST /item/update                # 상품 수정 처리
POST /item/delete                # 상품 삭제 처리

경매 관련

GET  /auction/auction-list-view  # 경매 목록 페이지
GET  /auction/auction-create-view # 경매 등록 페이지
GET  /auction/auction-detail-view # 경매 상세 페이지
GET  /auction/auction-update-view # 경매 수정 페이지
GET  /auction/chat               # 경매 채팅 페이지
GET  /auction/paid               # 낙찰 내역 페이지
POST /auction/create             # 경매 등록 처리
POST /auction/bid                # 입찰 처리

게시판 관련

GET  /post/post-list-view        # 게시글 목록 페이지
GET  /post/post-create-view      # 게시글 작성 페이지
GET  /post/post-detail-view      # 게시글 상세 페이지
POST /post/create                # 게시글 작성 처리
POST /post/update                # 게시글 수정 처리
POST /post/delete                # 게시글 삭제 처리

채팅 관련

GET  /chat/list                  # 채팅 목록 조회
POST /chat/create                # 채팅 메시지 전송

신고 관련

GET  /alert/alert-detail-view    # 신고 작성 페이지
POST /alert/create               # 신고 등록 처리
DELETE /alert/delete             # 신고 삭제 처리

관리자 관련

GET  /admin/admin-list-view      # 관리자 메인 페이지
GET  /admin/user                 # 사용자 관리 페이지
GET  /admin/post                 # 게시글 관리 페이지
GET  /admin/item                 # 상품 관리 페이지
GET  /admin/alert                # 신고 관리 페이지

📖 기능 상세 설명

1. 사용자 인증 시스템

일반 회원가입/로그인

  • 아이디, 비밀번호, 이름, 이메일, 전화번호를 통한 회원가입
  • 비밀번호 암호화 저장 (EncryptUtils 사용)
  • 세션 기반 인증 관리

카카오 소셜 로그인

  • OAuth 2.0 기반 카카오 로그인 연동
  • 카카오 계정 정보를 통한 자동 회원가입
  • 이메일 및 닉네임 정보 자동 수집

2. 상품 관리 시스템

상품 분류

  • 키보드 (keyboard): 기계식 키보드 판매
  • 키캡 (keycap): 키캡 세트 판매
  • 중고거래 (trade): 중고 상품 거래
  • 경매 (auction): 경매 상품

상품 기능

  • 상품 등록 시 이미지 업로드 지원 (최대 5MB)
  • 상품 수정 및 삭제 (판매자만 가능)
  • 상품 상태 관리 (판매중, 판매완료 등)
  • 가격 정보 관리

3. 경매 시스템

경매 프로세스

sequenceDiagram
    participant U as 사용자
    participant S as 서버
    participant D as 데이터베이스
    
    U->>S: 경매 상품 등록
    S->>D: 상품 정보 저장
    D-->>S: 저장 완료
    
    U->>S: 입찰 요청
    S->>D: 입찰 정보 저장
    D-->>S: 저장 완료
    S-->>U: 입찰 성공
    
    U->>S: 채팅 메시지 전송
    S->>D: 채팅 정보 저장
    D-->>S: 저장 완료
    
    U->>S: 낙찰 처리
    S->>D: 경매 상태 업데이트
    D-->>S: 업데이트 완료
Loading

경매 기능

  • 입찰 시스템
  • 입찰 내역 조회
  • 경매 상품별 채팅 기능
  • 낙찰 처리 및 결제 정보 관리

4. 채팅 시스템

  • 경매 상품별 독립적인 채팅방
  • 채팅 메시지 작성 및 전송
  • 채팅 내역 조회 (페이지 새로고침 시 최신 메시지 표시)
  • 채팅 내역 저장 및 관리

5. 커뮤니티 게시판

  • 게시글 작성, 수정, 삭제
  • 이미지 첨부 지원
  • 게시글 목록 조회 및 검색
  • 작성자 정보 표시

6. 신고 시스템

  • 부적절한 게시글, 상품 등에 대한 신고 기능
  • 신고 내용 작성 및 이미지 첨부 지원
  • 관리자 신고 목록 조회 및 삭제 처리
  • 신고된 내용에 대한 관리자 검토 및 조치

7. 관리자 기능

  • 사용자 관리 (조회, 권한 관리)
  • 게시글 관리 (조회, 삭제)
  • 상품 관리 (조회, 삭제)
  • 알림 발송 및 관리

🔒 보안 기능

인터셉터 기반 권한 관리

  • PermissionInterceptor를 통한 접근 권한 제어
  • 관리자 페이지 접근 제한
  • 로그인 필요 페이지 자동 리다이렉트

AOP 기반 성능 모니터링

  • TimeTraceAop를 통한 메서드 실행 시간 측정
  • 성능 최적화를 위한 로깅

파일 업로드 보안

  • 파일 크기 제한 (최대 5MB)
  • 파일 타입 검증
  • 안전한 파일 저장 경로 관리

🧪 테스트

# 전체 테스트 실행
./gradlew test

# 특정 테스트 클래스 실행
./gradlew test --tests KeyboardSbaApplicationTests

📝 라이선스

이 프로젝트는 개인 프로젝트입니다.

👥 기여자

  • 프로젝트 개발자

📞 문의

프로젝트 관련 문의사항이 있으시면 이슈를 등록해주세요.


Keyboard SBA - 키보드 커뮤니티와 중고거래를 한 곳에서! ⌨️

About

키보드 경매 사이트입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors