Skip to content

SHDS-SOLPick/sol-pick-be

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

95 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SolPick Logo

๐Ÿ’ณ SOL Pick Backend

SOL Pick ํ”„๋กœ์ ํŠธ์˜ ๋ฐฑ์—”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ ๋ฐ ๊ณตํ†ต ๋ฌธ์„œ๋Š” ๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ โ€ข ๐Ÿ— ์•„ํ‚คํ…์ฒ˜ โ€ข โœจ ์ฃผ์š” ๊ธฐ๋Šฅ โ€ข ๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ โ€ข ๐Ÿ“„ API ๋ฌธ์„œ โ€ข ๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ โ€ข ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํŒ€ ์†Œ๊ฐœ


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿ’ก ์ฃผ์ œ

SOL Pick Backend - ์Šค๋งˆํŠธ ์‹์ƒํ™œ ๊ด€๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ReciPICK X ์‹ ํ•œ์นด๋“œ ์ œํœด ์นด๋“œ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ

๐Ÿ“ ๊ฐœ์š”

  • SOL Pick Backend๋Š” ์Šค๋งˆํŠธํ•œ ์‹์ƒํ™œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ข…ํ•ฉ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • Spring Boot์™€ JPA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ฒฌ๊ณ ํ•œ REST API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ReciPICK๊ณผ์˜ ์›ํ™œํ•œ ์—ฐ๋™์„ ์œ„ํ•œ ํ†ตํ•ฉ ์ธ์ฆ ๋ฐ API ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • JWT ๊ธฐ๋ฐ˜ ๋ณด์•ˆ, ์Šค์ผ€์ค„๋ง, ์™ธ๋ถ€ API ์—ฐ๋™ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

โฑ๏ธ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

2025.02 ~ 2025.03


๐Ÿ— ์•„ํ‚คํ…์ฒ˜

๐Ÿ“Š ์‹œ์Šคํ…œ ๊ตฌ์กฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   SOL Pick FE   โ”‚    โ”‚  ReciPICK API   โ”‚    โ”‚   External APIs โ”‚
โ”‚    (React)      โ”‚    โ”‚                 โ”‚    โ”‚  (OpenAI, GCP)  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚                       โ”‚                       โ”‚
         โ”‚ REST API              โ”‚ HTTP Client           โ”‚ API Calls
         โ–ผ                       โ–ผ                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    SOL Pick Backend                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
โ”‚  โ”‚ Controller  โ”‚ โ”‚   Service   โ”‚ โ”‚ Repository  โ”‚ โ”‚   Entity    โ”‚โ”‚
โ”‚  โ”‚    Layer    โ”‚ โ”‚    Layer    โ”‚ โ”‚    Layer    โ”‚ โ”‚    Layer    โ”‚โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
โ”‚  โ”‚   Security  โ”‚ โ”‚ Scheduling  โ”‚ โ”‚   OCR/AI    โ”‚ โ”‚  External   โ”‚โ”‚
โ”‚  โ”‚   (JWT)     โ”‚ โ”‚  Service    โ”‚ โ”‚   Service   โ”‚ โ”‚   Client    โ”‚โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚     MariaDB     โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๐Ÿ” ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ

  • JWT ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ ์ธ์ฆ ์‹œ์Šคํ…œ
  • ReciPICK๊ณผ์˜ ์—ฐ๋™ ๋กœ๊ทธ์ธ
  • Spring Security๋ฅผ ํ™œ์šฉํ•œ ์—”๋“œํฌ์ธํŠธ ๋ณด์•ˆ
  • ํ† ํฐ ๊ฒ€์ฆ ๋ฐ ๊ฐฑ์‹ 
@RestController
@RequestMapping("/auth")
public class AuthController {
    @PostMapping("/login")
    public ResponseEntity<AuthResponseDTO> login(@RequestBody AuthRequestDTO loginRequest) {
        AuthResponseDTO response = authService.login(loginRequest);
        return ResponseEntity.ok(response);
    }
}

2. ๐ŸงŠ ์Šค๋งˆํŠธ ๋ƒ‰์žฅ๊ณ  ๊ด€๋ฆฌ

  • ์‹์žฌ๋ฃŒ CRUD ๊ธฐ๋Šฅ
  • ์˜์ˆ˜์ฆ OCR ์ฒ˜๋ฆฌ (Google Cloud Vision API)
  • ์œ ํ†ต๊ธฐํ•œ ์•Œ๋ฆผ ์Šค์ผ€์ค„๋ง
  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์‹์žฌ๋ฃŒ ๋ถ„๋ฅ˜ ๋ฐ ๊ฒ€์ƒ‰
@Scheduled(cron = "0 30 9 * * ?", zone = "Asia/Seoul")
@Transactional
public void checkExpirationDates() {
    // ๋งค์ผ ์˜ค์ „ 9์‹œ 30๋ถ„ ์œ ํ†ต๊ธฐํ•œ ๊ฒ€์‚ฌ ๋ฐ ์•Œ๋ฆผ ์ƒ์„ฑ
}

3. ๐Ÿ’ณ ์นด๋“œ ์„œ๋น„์Šค

  • SOL Pick ์นด๋“œ ๋ฐœ๊ธ‰ ์‹œ์Šคํ…œ
  • ์ปค์Šคํ…€ ์นด๋“œ ๋””์ž์ธ ๊ด€๋ฆฌ
  • ํฌ์ธํŠธ ์ ๋ฆฝ ๋ฐ ์‚ฌ์šฉ ์ฒ˜๋ฆฌ
  • ์นด๋“œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
@PostMapping("/issue-card")
public ResponseEntity<CardResponseDTO> issueCard(@RequestBody CardIssueRequestDTO requestDTO) {
    CardResponseDTO response = cardDesignService.issueCard(requestDTO);
    return ResponseEntity.ok(response);
}

4. ๐ŸŽฎ ๋ฏธ๋‹ˆ๊ฒŒ์ž„ ์‹œ์Šคํ…œ

  • ํ‘ธ๋””์บฃ ๊ฒŒ์ž„ ์ƒํƒœ ๊ด€๋ฆฌ
  • ๋ ˆ์‹œํ”ผ ์„ ํƒ ๋ฐ ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ 
  • ์‹์žฌ๋ฃŒ ๋ฐœ๊ฒฌ ์‹œ์Šคํ…œ
  • ๊ฒŒ์ž„ ์™„๋ฃŒ ์‹œ ํฌ์ธํŠธ ์ ๋ฆฝ
@PostMapping("/discover-ingredient")
public ResponseEntity<DiscoveryResultDTO> discoverIngredient(@RequestBody DiscoverIngredientRequestDTO request) {
    DiscoveryResultDTO result = gameService.discoverIngredient(
        request.getUserId(), request.getRecipeId(), request.getIngredientName(), request.getRecipePoints());
    return ResponseEntity.ok(result);
}

5. ๐Ÿค– AI ๊ธฐ๋ฐ˜ ๋ ˆ์‹œํ”ผ ์ถ”์ฒœ

  • OpenAI GPT-4 ์—ฐ๋™
  • ์•Œ๋Ÿฌ์ง€ ์ •๋ณด ๊ธฐ๋ฐ˜ ๋งž์ถค ์ถ”์ฒœ
  • ๋ณด์œ  ์‹์žฌ๋ฃŒ ๊ธฐ๋ฐ˜ ๋ ˆ์‹œํ”ผ ์ƒ์„ฑ
  • ์ผ์ฃผ์ผ ์‹๋‹จ ๊ณ„ํš ์ˆ˜๋ฆฝ
@GetMapping("/recommend/{userId}")
public Map<String, Object> getRecipeRecommendation(@PathVariable Integer userId) {
    List<RefrigeratorIng> ingredients = refrigeratorIngService.getIngredientsByUserId(userId);
    List<String> allergies = userAllergyService.getUserAllergies(userId);
    return openAiService.getRecipeRecommendation(ingredientNames, allergies);
}

6. ๐Ÿ”— ์™ธ๋ถ€ API ์—ฐ๋™

  • ReciPICK API ํ†ตํ•ฉ
  • ์ฃผ๋ฌธ ๋‚ด์—ญ ๋™๊ธฐํ™”
  • ํฌ์ธํŠธ ์‹œ์Šคํ…œ ์—ฐ๋™
  • ๊ฒฐ์ œ ๊ฒ€์ฆ ์‹œ์Šคํ…œ

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿ–ฅ Backend Framework

๐Ÿ”’ Security & Authentication

๐Ÿ—ƒ Database & ORM

๐Ÿ“ก External APIs

๐Ÿ›  Development Tools


๐Ÿ“„ API ๋ฌธ์„œ

๐Ÿ” Authentication

POST /auth/login
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "password123"
}

๐ŸงŠ Refrigerator Management

# ์‹์žฌ๋ฃŒ ๋ชฉ๋ก ์กฐํšŒ
GET /api/solpick/refrigerator/ingredients/list/{userId}?sortType=latest

# ์‹์žฌ๋ฃŒ ๋“ฑ๋ก
POST /api/solpick/refrigerator/ingredients
Content-Type: application/json

{
  "userId": 1,
  "name": "ํ† ๋งˆํ† ",
  "quantity": 3,
  "expiryDate": "2025-03-15T00:00:00"
}

๐Ÿ’ณ Card Service

# ์นด๋“œ ๋ฐœ๊ธ‰
POST /solpick/api/card-design/issue-card
Content-Type: application/json

{
  "userId": 1,
  "designId": 1,
  "lastName": "KIM",
  "firstName": "JEONGRAN"
}

๐ŸŽฎ Mini Game

# ๊ฒŒ์ž„ ์ƒํƒœ ์กฐํšŒ
GET /solpick/api/game/state/{userId}

# ์‹์žฌ๋ฃŒ ๋ฐœ๊ฒฌ ์ฒ˜๋ฆฌ
POST /solpick/api/game/discover-ingredient
Content-Type: application/json

{
  "userId": 1,
  "recipeId": 1,
  "ingredientName": "ํ† ๋งˆํ† ",
  "recipePoints": 5000
}

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

๐Ÿ“‹ ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Java 11 ์ด์ƒ
  • Maven 3.6 ์ด์ƒ
  • MariaDB 10.5 ์ด์ƒ

๐Ÿ”ง ํ™˜๊ฒฝ ์„ค์ •

  1. Repository ํด๋ก 
git clone https://github.com/SHDS-SOLPick/sol-pick-be.git
cd sol-pick-be
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
CREATE DATABASE solpick;
  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (application-secret.properties)
# Database
spring.datasource.url=jdbc:mariadb://localhost:3306/solpick
spring.datasource.username=your_username
spring.datasource.password=your_password

# JWT
jwt.secret.key=your_jwt_secret_key

# ReciPICK API
recipick.api.key=your_recipick_api_key

# OpenAI API
openai.api.key=your_openai_api_key

# SOL Pick API
solpick.api.key=your_solpick_api_key
  1. Google Cloud Vision API ์„ค์ •
# google-credentials.json ํŒŒ์ผ์„ src/main/resources/์— ๋ฐฐ์น˜

โ–ถ๏ธ ์‹คํ–‰ ๋ฐฉ๋ฒ•

# Maven์„ ์‚ฌ์šฉํ•œ ์‹คํ–‰
mvn spring-boot:run

# ๋˜๋Š” JAR ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์‹คํ–‰
mvn clean package
java -jar target/sol-pick-be-1.0.0.jar

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ main/
โ”‚   โ”œโ”€โ”€ java/kr/co/solpick/
โ”‚   โ”‚   โ”œโ”€โ”€ auth/                 # ์ธ์ฆ ๊ด€๋ จ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ security/         # JWT, Security ์„ค์ •
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”œโ”€โ”€ refrigerator/         # ๋ƒ‰์žฅ๊ณ  ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ repository/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ entity/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”œโ”€โ”€ card/                 # ์นด๋“œ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ repository/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ entity/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”œโ”€โ”€ game/                 # ๋ฏธ๋‹ˆ๊ฒŒ์ž„
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ repository/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ entity/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ dto/
โ”‚   โ”‚   โ”œโ”€โ”€ point/                # ํฌ์ธํŠธ ์‹œ์Šคํ…œ
โ”‚   โ”‚   โ”œโ”€โ”€ member/               # ํšŒ์› ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ external/             # ์™ธ๋ถ€ API ์—ฐ๋™
โ”‚   โ”‚   โ””โ”€โ”€ config/               # ์„ค์ • ํŒŒ์ผ๋“ค
โ”‚   โ””โ”€โ”€ resources/
โ”‚       โ”œโ”€โ”€ application.properties
โ”‚       โ””โ”€โ”€ google-credentials.json
โ””โ”€โ”€ test/                         # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Team





๊น€์ •๋ž€
๊ณ ์€์ง€
์–‘์ง„์˜
์ž„์•„์˜
ํŒ€์žฅ / Backend
์นด๋“œ ๊ด€๋ จ ์„œ๋น„์Šค, ๋ฏธ๋‹ˆ๊ฒŒ์ž„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
๊ฒŒ์ž„ ๋กœ์ง ๊ตฌํ˜„
ํŒ€์› / Backend
์ธ์ฆ ์‹œ์Šคํ…œ, ์™ธ๋ถ€ API ์—ฐ๋™
ReciPICK ํ†ตํ•ฉ, ๋ ˆ์‹œํ”ผ ์„œ๋น„์Šค
ํŒ€์› / Backend
AI ๋ ˆ์‹œํ”ผ ์ถ”์ฒœ ์‹œ์Šคํ…œ
OpenAI API ์—ฐ๋™, ์‹๋‹จ ์ถ”์ฒœ
ํŒ€์› / Backend
๋ƒ‰์žฅ๊ณ  CRUD, ์œ ํ†ต๊ธฐํ•œ ์•Œ๋ฆผ
OCR ์„œ๋น„์Šค, ์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ
GitHub GitHub GitHub GitHub

๐Ÿ“š ๊ด€๋ จ ๋ฌธ์„œ


โ“’ 2025 SOL Pick Backend Team. All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages