Preloader image
DDD

자바

spring-boot swagger java crud 예제

작성자 관리자 (admin)
조회수 1,707
입력일 2024-12-18 07:26:45

Spring Boot와 Swagger를 사용하여 간단한 CRUD 예제를 만드는 방법을 설명하겠습니다. 이 예제는 Java 언어를 사용하여 구현되며 Swagger를 통해 API 문서를 자동으로 생성합니다.

1. 프로젝트 설정

Maven 프로젝트의 pom.xml에 의존성 추가

Spring Boot와 Swagger를 사용하기 위해 아래의 의존성을 추가합니다.

xml

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- Swagger (SpringFox) -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>

    <!-- H2 Database (In-Memory) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
 

2. 애플리케이션 설정

application.properties 설정 파일

H2 데이터베이스를 사용하기 위한 설정입니다.

properties

# H2 데이터베이스 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# Swagger 설정
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
 

3. 엔티티 생성

Product 엔티티 클래스를 생성합니다.

java

import javax.persistence.*;

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private Double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

 

4. Repository 생성

ProductRepository 인터페이스를 생성합니다.

java

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
}

 

5. Controller 생성

ProductController를 생성하여 CRUD API를 구현합니다.

java

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/products")
@Api(tags = "Product Management")
public class ProductController {

    @Autowired
    private ProductRepository productRepository;

    @ApiOperation("Get all products")
    @Tag(name = "Response Estimate", description = "Response Estimate API")
    @GetMapping
    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    @ApiOperation("Get a product by ID")
    @Tag(name = "Response Estimate", description = "Response Estimate API")
    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable Long id) {
        return productRepository.findById(id)
                .map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }

    @ApiOperation("Create a new product")
    @Tag(name = "Response Estimate", description = "Response Estimate API")
    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productRepository.save(product);
    }

    @ApiOperation("Update an existing product")
    @Tag(name = "Response Estimate", description = "Response Estimate API")
    @PutMapping("/{id}")
    public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product updatedProduct) {
        return productRepository.findById(id)
                .map(existingProduct -> {
                    existingProduct.setName(updatedProduct.getName());
                    existingProduct.setPrice(updatedProduct.getPrice());
                    productRepository.save(existingProduct);
                    return ResponseEntity.ok(existingProduct);
                }).orElse(ResponseEntity.notFound().build());
    }

    @ApiOperation("Delete a product by ID")
    @Tag(name = "Response Estimate", description = "Response Estimate API")
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
        return productRepository.findById(id)
                .map(product -> {
                    productRepository.delete(product);
                    return ResponseEntity.noContent().build();
                }).orElse(ResponseEntity.notFound().build());
    }

}

6. Swagger 설정

Swagger를 활성화하기 위해 설정 클래스를 추가합니다.

java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo"))
                .paths(PathSelectors.any())
                .build();
    }
}

 

7. 실행 및 Swagger 확인

  1. 애플리케이션 실행
    Spring Boot 애플리케이션을 실행합니다.

  2. Swagger UI 접속
    브라우저에서 다음 URL로 Swagger UI에 접속합니다.

    bash

    http://localhost:8080/swagger-ui/

    Swagger UI를 통해 구현된 CRUD API를 확인하고 테스트할 수 있습니다.

API 테스트 예시

Swagger를 사용하면 UI에서 바로 API를 테스트할 수 있습니다.

POST 요청 예시 (Create Product)

json

{
    "name": "Laptop",
    "price": 1200.0
}

PUT 요청 예시 (Update Product)

json

{
    "name": "Updated Laptop",
    "price": 1500.0
}

이제 Spring Boot와 Swagger를 사용하여 CRUD API를 성공적으로 구현하고 테스트할 수 있습니다!