Spring Boot 3에서 Swagger와 H2 Database 사용하기

2025. 2. 20. 18:17·프레임워크/Spring
728x90
반응형


1. 들어가며

Spring Boot 3.x 프로젝트에서 Swagger를 이용한 API 문서화와 H2 Database를 활용해서 간단한 회원 관리 시스템 예시로 구현해보겠습니다. 이 글에서는 다음 내용을 다룰 예정입니다.

  • Gradle을 이용한 프로젝트 설정
  • Swagger UI 설정 및 사용법
  • H2 Database 설정 및 JPA를 이용한 자동 테이블 생성
  • 회원 관리 기능 (등록, 수정, 삭제) 구현

본 설명에서 사용하는 주요 기술 스택은 다음과 같습니다.

  • Java 버전: 17
  • Spring Boot 버전: 3.4.2
  • Gradle 버전: 8.x (8.4 이상)
  • H2 Database
  • Swagger

2. 프로젝트 설정

먼저 build.gradle 파일을 다음과 같이 설정합니다.

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.4.2'
	id 'io.spring.dependency-management' version '1.1.7'
}

group = 'me.junu'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.4.0'
	runtimeOnly 'com.h2database:h2'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

3. Swagger 설정

Swagger UI를 설정하기 위해 SwaggerConfig 클래스를 생성합니다.

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
            .info(new Info()
                .title("사용자 관리 API")
                .version("1.0")
                .description("Spring Boot 3.x (Springdoc) 사용자 관리 API"));
    }
}

3. H2 Database 설정

'application.yml' 파일에 H2 Database 설정을 추가합니다.

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  h2:
    console:
      enabled: true
      path: /h2-console
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop
    show-sql: true

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

3. 엔티티 클래스 생성

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

import jakarta.persistence.*;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String email;

    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

5. 리포지토리 인터페이스 생성

import me.junu.auth.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUsername(String username);
}

6. 서비스 클래스 구현

import me.junu.auth.user.entity.User;
import me.junu.auth.user.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User registerUser(User user) {
        return userRepository.save(user);
    }

    public User updateUser(Long id, User userDetails) {
        User user = userRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("User not found"));
        user.setUsername(userDetails.getUsername());
        user.setEmail(userDetails.getEmail());
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }

    public User loginUser(String username, String password) {
        User user = userRepository.findByUsername(username)
                .orElseThrow(() -> new RuntimeException("User not found"));
        // TODO: Add password verification
        return user;
    }
}

7. 컨트롤러 클래스 구현

import me.junu.auth.user.entity.User;
import me.junu.auth.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("/register")
    public ResponseEntity<User> registerUser(@RequestBody User user) {
        User registeredUser = userService.registerUser(user);
        return ResponseEntity.ok(registeredUser);
    }

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {
        User updatedUser = userService.updateUser(id, userDetails);
        return ResponseEntity.ok(updatedUser);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<?> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.ok().build();
    }
}

8. 애플리케이션 실행 및 테스트

  1. 애플리케이션을 실행합니다.
  2. Swagger UI (http://localhost:8080/swagger-ui.html)에 접속하여 API를 테스트합니다.
  3. H2 Console (http://localhost:8080/h2-console)에 접속하여 데이터베이스를 확인합니다.


9. 마무리

이렇게 Spring Boot 3.x, Gradle, Swagger, H2 Database를 사용하여 간단한 회원 관리 API를 구현해보았습니다. 이 예제를 바탕으로 더 복잡한 기능을 추가하거나 실제 프로젝트에 적용해볼 수 있습니다. 주의할 점은 이 예제에서는 보안 처리나 예외 처리 등이 생략되어 있으므로, 실제 프로덕션 환경에서는 이러한 부분들을 반드시 고려해야 합니다.


auth.zip
0.17MB


728x90
반응형

'프레임워크 > Spring' 카테고리의 다른 글

Spring의 Argument Resolver 이해하기  (0) 2025.02.18
스프링 Filter, Interceptor, AOP 정리  (2) 2024.09.15
'프레임워크/Spring' 카테고리의 다른 글
  • Spring의 Argument Resolver 이해하기
  • 스프링 Filter, Interceptor, AOP 정리
키큰난쟁이
키큰난쟁이
개발 블로그
    반응형
    250x250
  • 키큰난쟁이
    키큰난쟁이의 놀이터
    키큰난쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (38)
      • AI (1)
        • AI 응용 (1)
      • 프로그래밍 언어 (5)
        • Java (3)
        • PHP (1)
        • JavaScript (1)
      • 프레임워크 (3)
        • Spring (3)
      • 서버 (8)
        • Web Server (2)
        • WAS (2)
        • Hypervisor (4)
      • 데이터베이스 (5)
        • MySQL•MariaDB (2)
        • Oracle (1)
        • Cubrid (2)
      • 운영체제 (4)
        • Linux (4)
      • 클라우드 (1)
        • Ncloud (1)
      • 데브옵스 (7)
        • VCS (2)
        • CICD (3)
        • Docker (2)
      • 지식 (2)
        • Web (2)
      • 기타 (2)
        • 일상 (2)
  • 블로그 메뉴

    • 일상
  • 링크

    • Instagram
    • github
  • 공지사항

    • 라이믹스 → 티스토리 이사
  • 인기 글

  • 태그

    마리아디비
    프록시모스
    GitHub
    mariadb
    docker
    java
    우분투
    젠킨스
    PROXMOX
    db
    DBMS
    jenkins
    devops
    Apple Silicon
    CI/CD
    리눅스
    자바
    도커
    애플실리콘
    깃허브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
키큰난쟁이
Spring Boot 3에서 Swagger와 H2 Database 사용하기
상단으로

티스토리툴바