BE Setup - PIC-2-team/PIC-2-team-project GitHub Wiki

BE μ„ΈνŒ… κ°€μ΄λ“œ (Spring Boot + springdoc-openapi)

1. build.gradle μ˜μ‘΄μ„± μΆ”κ°€

dependencies {
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.1.0'
}

Spring Boot 3.x μ‚¬μš©μœΌλ‘œ springdoc 3.x 적용 (Spring Boot 2.x라면 springdoc 2.6.0 μ‚¬μš©)

2. application.yml μ„€μ •

springdoc:
  api-docs:
    path: /api-docs
  swagger-ui:
    path: /swagger-ui

3. 곡톡 응닡 클래슀

// ApiResponse.java
@Schema(description = "곡톡 성곡 응닡")
public record ApiResponse<T>(boolean success, T data) {
    public static <T> ApiResponse<T> ok(T data) {
        return new ApiResponse<>(true, data);
    }
}

// ApiError.java
public record ApiError(String code, String message) {}

// ApiErrorResponse.java
@Schema(description = "곡톡 μ—λŸ¬ 응닡")
public record ApiErrorResponse(boolean success, ApiError error) {
    public static ApiErrorResponse of(String code, String message) {
        return new ApiErrorResponse(false, new ApiError(code, message));
    }
}

4. 컨트둀러 μ‚¬μš© μ˜ˆμ‹œ

@RestController
@RequestMapping("/api/example")
@Tag(name = "Example", description = "μ˜ˆμ‹œ API")
public class ExampleController {

    @GetMapping("/{id}")
    @Operation(summary = "단건 쑰회")
    public ResponseEntity<ApiResponse<ExampleDto>> getOne(@PathVariable Long id) {
        return ResponseEntity.ok(ApiResponse.ok(/* service 호좜 */));
    }

    @PostMapping
    @Operation(summary = "생성")
    public ResponseEntity<ApiResponse<ExampleDto>> create(@RequestBody ExampleRequest request) {
        return ResponseEntity.status(201).body(ApiResponse.ok(/* service 호좜 */));
    }
}

5. 확인

μ„œλ²„ μ‹€ν–‰ ν›„:

  • Swagger UI: http://localhost:8080/swagger-ui
  • OpenAPI JSON: http://localhost:8080/api-docs

FE νƒ€μž… μžλ™ 생성 (BE μ„œλ²„ 뜨면)

cd frontend
npm run generate:api   # src/types/api.ts μžλ™ 생성

API 응닡 포맷 μ»¨λ²€μ…˜μ€ API-Response-Convention μ°Έκ³ 

⚠️ **GitHub.com Fallback** ⚠️