|
| 1 | +# 기숙상점 Backend Server |
| 2 | + |
| 3 | +Spring Boot 기반의 학교 기숙사 상품 공동구매 서비스 백엔드입니다. |
| 4 | +</br> |
| 5 | +사용자 인증, 이메일 인증, 상품 등록/조회/참여, 학교 위치 기반 조회, 이미지 업로드( AWS S3 )와 같은 기능을 제공합니다. |
| 6 | + |
| 7 | +## 1. 프로젝트 개요 |
| 8 | + |
| 9 | +경제적 부담을 느끼는 기숙사생들이 재학생 인증과 실명제를 통해 신뢰할 수 있는 공동구매 플랫폼 |
| 10 | +</br> |
| 11 | +함께 필요한 물품을 저렴하게 구매할 수 있도록 제공합니다. |
| 12 | + |
| 13 | +이 프로젝트는 다음과 같은 기능을 제공하는 백엔드 서버입니다. |
| 14 | + |
| 15 | +- 사용자 로그인/회원 정보 저장 (Kakao OAuth 기반) |
| 16 | +- 이메일 인증 코드 발송 및 인증 처리 |
| 17 | +- 상품 등록, 조회, 최근 상품 확인, 사용자 관련 상품 조회 |
| 18 | +- 상품 참여(예약) 기능 |
| 19 | +- 위치 기반 학교 조회 |
| 20 | +- AWS S3 파일 업로드 연동 |
| 21 | +- Redis 기반 인증/세션 관련 설정 |
| 22 | + |
| 23 | +## 2. 기술 스택 |
| 24 | + |
| 25 | +- Java 17 |
| 26 | +- Spring Boot 3.3.5 |
| 27 | +- Spring Web / Spring Data JPA |
| 28 | +- MySQL |
| 29 | +- Redis |
| 30 | +- Kafka/카카오 로그인 연동을 위한 WebClient |
| 31 | +- SMTP 메일 인증 |
| 32 | +- AWS S3 |
| 33 | +- Gradle |
| 34 | +- Lombok |
| 35 | + |
| 36 | +## 3. 프로젝트 구조 |
| 37 | + |
| 38 | +```text |
| 39 | +src/main/java/com/goormthon3/team49 |
| 40 | +├── common/ # 공통 설정, 예외 처리, 인증/보안 관련 공통 코드 |
| 41 | +├── domain/ |
| 42 | +│ ├── awsS3/ # S3 업로드 관련 컨트롤러/서비스 |
| 43 | +│ ├── comment/ # 댓글 도메인 |
| 44 | +│ ├── email/ # 이메일 인증 도메인 |
| 45 | +│ ├── product/ # 상품 등록/조회/참여 도메인 |
| 46 | +│ ├── school/ # 학교 위치 검색 도메인 |
| 47 | +│ └── user/ # 사용자 로그인/회원 관리 도메인 |
| 48 | +└── Team49Application.java |
| 49 | +``` |
| 50 | + |
| 51 | +## 4. 주요 기능 |
| 52 | + |
| 53 | +### 사용자 인증 |
| 54 | +- Kakao OAuth 인증 코드 교환 |
| 55 | +- Access Token 기반 사용자 정보 조회 |
| 56 | +- 사용자 정보 저장/갱신 |
| 57 | + |
| 58 | +### 이메일 인증 |
| 59 | +- 인증 메일 전송 |
| 60 | +- 인증 코드 검증 |
| 61 | +- 인증 성공 시 이메일 정보 갱신 |
| 62 | + |
| 63 | +### 상품 기능 |
| 64 | +- 전체 상품 조회 |
| 65 | +- 최근 등록 상품 조회 |
| 66 | +- 특정 사용자 관련 상품 조회 |
| 67 | +- 상품 상세 조회 |
| 68 | +- 상품 참여자 조회 |
| 69 | +- 상품 등록 |
| 70 | +- 상품 참여(예약) |
| 71 | + |
| 72 | +### 학교 조회 |
| 73 | +- 위도/경도 기반 가까운 학교 조회 |
| 74 | + |
| 75 | +### 파일 업로드 |
| 76 | +- Amazon S3 기반 업로드 설정 및 연동 구조 포함 |
| 77 | + |
| 78 | +## 5. 도메인별 API 엔드포인트 |
| 79 | + |
| 80 | +### 1) 상품 도메인 (/products) |
| 81 | + |
| 82 | +| Method | Endpoint | 설명 | |
| 83 | +|---|---|---| |
| 84 | +| GET | /products | 전체 상품 목록 조회 | |
| 85 | +| GET | /products/recent | 최근 등록된 상품 목록 조회 | |
| 86 | +| GET | /products/{userId}/recent | 특정 사용자가 관련된 최근 상품 조회 | |
| 87 | +| GET | /products/{productId} | 상품 상세 정보 조회 | |
| 88 | +| GET | /products/{productId}/participant | 특정 상품 참여자 목록 조회 | |
| 89 | +| POST | /products/{userId}/leadCreate | 상품 등록 | |
| 90 | +| POST | /products/participantCreate | 상품 참여(예약) | |
| 91 | + |
| 92 | +### 2) 학교 도메인 (/schools) |
| 93 | + |
| 94 | +| Method | Endpoint | 설명 | |
| 95 | +|---|---|---| |
| 96 | +| GET | /schools?latitude=...&longitude=... | 사용자의 위치 기준으로 가장 가까운 학교 조회 | |
| 97 | + |
| 98 | +### 3) 인증 도메인 (/api/auth) |
| 99 | + |
| 100 | +| Method | Endpoint | 설명 | |
| 101 | +|---|---|---| |
| 102 | +| POST | /api/auth/email | 이메일 인증 코드 발송 | |
| 103 | +| POST | /api/auth/email/verify | 인증 코드 검증 및 이메일 갱신 | |
| 104 | +| GET | /api/auth/callback | Kakao OAuth callback 처리 | |
| 105 | +| POST | /api/auth/code/kakao | 인가 코드로 Kakao access token 요청 | |
| 106 | +| GET | /api/auth/token | Access token 기반 사용자 정보 조회 | |
| 107 | +| POST | /api/auth/token/save | 사용자 정보 저장 | |
| 108 | +| GET | /api/auth/kakao-user-id | Access token 기반 Kakao 사용자 ID 조회 | |
| 109 | + |
| 110 | +### 4) S3 업로드 도메인 |
| 111 | + |
| 112 | +| Method | Endpoint | 설명 | |
| 113 | +|---|---|---| |
| 114 | +| POST | /s3/upload | 이미지 업로드 요청 | |
| 115 | +| GET | /s3/list | 업로드된 파일 목록 조회 | |
| 116 | + |
| 117 | +## 6. 연락처 |
| 118 | + |
| 119 | +프로젝트에 대한 질문이나 피드백이 있으면: |
| 120 | + |
| 121 | +- **Email**: lilloo04@naver.com |
| 122 | +- **Issues**: GitHub Issues 탭에서 이슈 생성 |
| 123 | +- **Discussions**: GitHub Discussions 탭에서 토론 |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +**마지막 업데이트**: 2026년 7월 |
0 commit comments