본문 바로가기
스프링 부트3

스프링 부트 3에서 CRUD 구현하기

by 굿센스굿 2024. 12. 5.
반응형

 

스프링 부트 3는 최신 Java 생태계와 완벽하게 통합되어 간단하고 효율적으로 애플리케이션을 개발할 수 있는 환경을 제공합니다. 이 글에서는 CRUD(Create, Read, Update, Delete) 기능을 구현하는 방법을 단계별로 설명합니다. 예제와 함께 스프링 부트 3의 핵심 개념을 활용해 데이터베이스와 상호작용하는 애플리케이션을 구축해 보겠습니다.


1. 프로젝트 생성

스프링 부트 3 애플리케이션을 생성하려면 Spring Initializr를 사용합니다. 다음 설정을 적용합니다:

  • 프로젝트: Maven
  • 언어: Java
  • 스프링 부트 버전: 3.x.x
  • 종속성: Spring Web, Spring Data JPA, H2 Database

생성이 완료되면 프로젝트를 열고 pom.xml을 확인하여 의존성이 올바르게 추가되었는지 확인합니다.


2. 데이터 모델 작성

CRUD는 데이터를 중심으로 동작합니다. 예제로 회원 관리 시스템을 구현한다고 가정하고, 회원 데이터를 위한 User 엔터티를 작성합니다.

package com.example.demo.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getter와 Setter
    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 String getEmail() {
        return email;
    }

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

3. 데이터 액세스 계층

스프링 데이터 JPA를 활용해 데이터베이스와 상호작용하는 레포지토리를 작성합니다.

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

이 인터페이스는 기본적인 CRUD 메서드를 자동으로 제공합니다.


4. 서비스 계층

서비스 계층은 비즈니스 로직을 처리하는 역할을 합니다.

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    private final UserRepository userRepository;

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

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

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
    }

    public User updateUser(Long id, User userDetails) {
        User user = getUserById(id);
        user.setName(userDetails.getName());
        user.setEmail(userDetails.getEmail());
        return userRepository.save(user);
    }

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

5. 컨트롤러 작성

컨트롤러는 클라이언트 요청을 처리하고 적절한 응답을 반환합니다.

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

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

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        return ResponseEntity.ok(userService.createUser(user));
    }

    @GetMapping
    public ResponseEntity<List<User>> getAllUsers() {
        return ResponseEntity.ok(userService.getAllUsers());
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }

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

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

6. 테스트 및 실행

  1. 애플리케이션을 실행합니다.
  2. H2 콘솔(http://localhost:8080/h2-console)을 열어 데이터베이스 상태를 확인합니다.
  3. Postman 또는 curl을 사용해 API를 테스트합니다.

예시 요청:

  • 사용자 생성:
  • POST /api/users { "name": "John Doe", "email": "john.doe@example.com" }
  • 사용자 조회:
  • GET /api/users/1

결론

스프링 부트 3에서 CRUD를 구현하는 과정은 간단하고 효율적입니다. 위 예제를 기반으로 더 복잡한 비즈니스 로직을 추가하거나, 스프링 시큐리티 및 유효성 검사를 통합하여 확장 가능성을 높일 수 있습니다. 스프링 부트의 강력한 기능을 활용하여 빠르게 프로덕션 수준의 애플리케이션을 구축해 보세요!

반응형