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 โ
โโโโโโโโโโโโโโโโโโโ
- 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);
}
}- ์์ฌ๋ฃ CRUD ๊ธฐ๋ฅ
- ์์์ฆ OCR ์ฒ๋ฆฌ (Google Cloud Vision API)
- ์ ํต๊ธฐํ ์๋ฆผ ์ค์ผ์ค๋ง
- ์นดํ ๊ณ ๋ฆฌ๋ณ ์์ฌ๋ฃ ๋ถ๋ฅ ๋ฐ ๊ฒ์
@Scheduled(cron = "0 30 9 * * ?", zone = "Asia/Seoul")
@Transactional
public void checkExpirationDates() {
// ๋งค์ผ ์ค์ 9์ 30๋ถ ์ ํต๊ธฐํ ๊ฒ์ฌ ๋ฐ ์๋ฆผ ์์ฑ
}- SOL Pick ์นด๋ ๋ฐ๊ธ ์์คํ
- ์ปค์คํ ์นด๋ ๋์์ธ ๊ด๋ฆฌ
- ํฌ์ธํธ ์ ๋ฆฝ ๋ฐ ์ฌ์ฉ ์ฒ๋ฆฌ
- ์นด๋ ์ ํจ์ฑ ๊ฒ์ฆ
@PostMapping("/issue-card")
public ResponseEntity<CardResponseDTO> issueCard(@RequestBody CardIssueRequestDTO requestDTO) {
CardResponseDTO response = cardDesignService.issueCard(requestDTO);
return ResponseEntity.ok(response);
}- ํธ๋์บฃ ๊ฒ์ ์ํ ๊ด๋ฆฌ
- ๋ ์ํผ ์ ํ ๋ฐ ์งํ ์ํฉ ์ถ์
- ์์ฌ๋ฃ ๋ฐ๊ฒฌ ์์คํ
- ๊ฒ์ ์๋ฃ ์ ํฌ์ธํธ ์ ๋ฆฝ
@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);
}- 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);
}- ReciPICK API ํตํฉ
- ์ฃผ๋ฌธ ๋ด์ญ ๋๊ธฐํ
- ํฌ์ธํธ ์์คํ ์ฐ๋
- ๊ฒฐ์ ๊ฒ์ฆ ์์คํ
POST /auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}# ์์ฌ๋ฃ ๋ชฉ๋ก ์กฐํ
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"
}# ์นด๋ ๋ฐ๊ธ
POST /solpick/api/card-design/issue-card
Content-Type: application/json
{
"userId": 1,
"designId": 1,
"lastName": "KIM",
"firstName": "JEONGRAN"
}# ๊ฒ์ ์ํ ์กฐํ
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 ์ด์
- Repository ํด๋ก
git clone https://github.com/SHDS-SOLPick/sol-pick-be.git
cd sol-pick-be- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
CREATE DATABASE solpick;- ํ๊ฒฝ ๋ณ์ ์ค์ (
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- 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.jarsrc/
โโโ 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/ # ํ
์คํธ ์ฝ๋
![]() |
![]() |
![]() |
![]() |
| ๊น์ ๋ |
๊ณ ์์ง |
์์ง์ |
์์์ |
| ํ์ฅ / Backend ์นด๋ ๊ด๋ จ ์๋น์ค, ๋ฏธ๋๊ฒ์ ๋ฐฑ์๋ ๊ฐ๋ฐ ๊ฒ์ ๋ก์ง ๊ตฌํ |
ํ์ / Backend ์ธ์ฆ ์์คํ , ์ธ๋ถ API ์ฐ๋ ReciPICK ํตํฉ, ๋ ์ํผ ์๋น์ค |
ํ์ / Backend AI ๋ ์ํผ ์ถ์ฒ ์์คํ OpenAI API ์ฐ๋, ์๋จ ์ถ์ฒ |
ํ์ / Backend ๋์ฅ๊ณ CRUD, ์ ํต๊ธฐํ ์๋ฆผ OCR ์๋น์ค, ์ค์ผ์ค๋ง ์์คํ |
| GitHub | GitHub | GitHub | GitHub |
- ๐ ERD ์ค๊ณ๋
- ๐ ๊ธฐ๋ฅ ๋ช ์ธ์
- ๐ API ๋ช ์ธ์
- ๐ ํ ํ๋ก์ ํธ ๋ ธ์
โ 2025 SOL Pick Backend Team. All rights reserved.



