Spring Boot: Form 데이터 처리

2024. 11. 19. 23:28·SpringBoot

웹 애플리케이션 개발에서 사용자 입력 폼을 처리하는 것은 중요한 기능입니다. 스프링 MVC는 간단한 어노테이션과 데이터 바인딩 기능을 통해 폼 데이터를 처리하고, 서버 측에서 필요한 로직을 적용하는 과정을 손쉽게 지원합니다. 여기서는 @ModelAttribute와 @RequestParam을 활용한 폼 데이터 처리 방법을 다룹니다.


1. 사용자 입력 폼과 데이터 바인딩

스프링 MVC는 사용자로부터 입력받은 데이터를 컨트롤러의 메서드로 전달하여 처리할 수 있도록 자동으로 데이터 바인딩을 수행합니다.

기본 흐름

  1. 사용자 입력: HTML 폼을 통해 데이터를 입력받습니다.
  2. 데이터 바인딩: 입력 데이터를 컨트롤러 메서드의 파라미터에 매핑합니다.
  3. 비즈니스 로직 실행: 매핑된 데이터를 활용하여 필요한 처리를 수행합니다.
  4. 결과 반환: 처리 결과를 View로 전달하거나 JSON 형태로 응답합니다.

2. @ModelAttribute를 활용한 데이터 바인딩

@ModelAttribute는 사용자 입력 데이터를 객체로 바인딩할 때 사용됩니다. 주로 폼 데이터를 처리하거나 View에 데이터를 전달하는 데 유용합니다.

사용 예제: 회원 가입 폼 처리

HTML Form:

<form action="/register" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username">

    <label for="email">Email:</label>
    <input type="email" id="email" name="email">

    <button type="submit">Submit</button>
</form>

Controller:

@Controller
@RequestMapping("/register")
public class RegistrationController {

    @GetMapping
    public String showRegistrationForm(Model model) {
        model.addAttribute("user", new UserForm());
        return "register"; // HTML 폼 View
    }

    @PostMapping
    public String processRegistration(@ModelAttribute UserForm userForm, Model model) {
        // userForm 객체에 폼 데이터가 자동으로 바인딩됩니다.
        model.addAttribute("user", userForm);
        return "registrationResult"; // 결과 View
    }
}

UserForm 객체:

public class UserForm {
    private String username;
    private String email;

    // Getters and Setters
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }

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

설명:

  • @ModelAttribute는 폼 데이터의 키-값 쌍을 UserForm 객체의 필드로 자동 매핑합니다.
  • Model 객체를 통해 바인딩된 데이터를 View로 전달할 수 있습니다.

3. @RequestParam을 활용한 단일 데이터 처리

@RequestParam은 URL의 쿼리 파라미터나 폼 필드의 단일 데이터를 컨트롤러 메서드로 바인딩할 때 사용됩니다.

사용 예제: 검색 기능

HTML Form:

<form action="/search" method="get">
    <label for="keyword">Search:</label>
    <input type="text" id="keyword" name="keyword">
    <button type="submit">Search</button>
</form>

Controller:

@RestController
@RequestMapping("/search")
public class SearchController {

    @GetMapping
    public String search(@RequestParam String keyword) {
        return "Searching for: " + keyword;
    }
}

설명:

  • @RequestParam은 단일 요청 파라미터를 메서드의 매개변수로 바인딩합니다.
  • 기본값(defaultValue) 설정이나 필수 여부(required)를 지정할 수도 있습니다.
@GetMapping
public String search(@RequestParam(defaultValue = "default") String keyword) {
    return "Searching for: " + keyword;
}

4. @ModelAttribute와 @RequestParam의 비교

특징 @ModelAttribute @RequestParam
사용 목적 복합 데이터 객체로 바인딩 단일 파라미터 값 처리
대상 클래스 객체 기본 데이터 타입(String, int 등)
적용 상황 여러 필드가 있는 폼 데이터 처리 단일 입력값이나 쿼리 파라미터 처리
자동 View 전달 객체를 자동으로 View에 전달 가능 수동으로 View에 전달 필요

5. 데이터 검증 및 오류 처리

폼 데이터를 처리할 때는 데이터 유효성 검증이 필수적입니다. 스프링 MVC는 @Valid 또는 @Validated 어노테이션을 통해 검증을 지원하며, 검증 실패 시 BindingResult를 활용하여 에러를 처리할 수 있습니다.

사용 예제: 폼 데이터 검증

UserForm 클래스:

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;

public class UserForm {
    @NotEmpty(message = "사용자명을 입력하세요.")
    private String username;

    @Email(message = "유효하지 않은 이메일 주소입니다.")
    private String email;

    // Getters and Setters
}

Controller:

@Controller
@RequestMapping("/register")
public class RegistrationController {

    @PostMapping
    public String processRegistration(@Valid @ModelAttribute UserForm userForm, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()) {
            return "register"; // 에러가 있을 경우 다시 폼 페이지로
        }
        model.addAttribute("user", userForm);
        return "registrationResult";
    }
}

6. 주요 개념 요약

  1. @ModelAttribute를 사용해 사용자 입력 폼 데이터를 객체로 바인딩합니다.
  2. @RequestParam은 단일 데이터를 처리할 때 유용합니다.
  3. 데이터 유효성 검증은 @Valid와 BindingResult를 활용해 처리합니다.

결론

스프링 MVC는 간단한 어노테이션을 통해 폼 데이터와 요청 파라미터를 효율적으로 처리할 수 있습니다. @ModelAttribute와 @RequestParam의 적절한 사용과 유효성 검증을 통해 사용자 입력 데이터를 안전하고 효과적으로 관리할 수 있습니다.

'SpringBoot' 카테고리의 다른 글

Spring Boot: 로깅(Logging) 구현하기  (1) 2024.11.21
Spring Boot: @ExceptionHandler와 @ControllerAdvice를 활용한 예외처리  (0) 2024.11.20
Spring Boot: 스프링 MVC 패턴  (0) 2024.11.18
Spring Boot: CRUD 기능 구현  (1) 2024.11.17
Spring Boot: 데이터베이스 연동  (0) 2024.11.16
'SpringBoot' 카테고리의 다른 글
  • Spring Boot: 로깅(Logging) 구현하기
  • Spring Boot: @ExceptionHandler와 @ControllerAdvice를 활용한 예외처리
  • Spring Boot: 스프링 MVC 패턴
  • Spring Boot: CRUD 기능 구현
moodone
moodone
  • moodone
    무던하게
    moodone
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • Java (7)
      • SpringBoot (24)
      • JavaScript (0)
      • Database (1)
      • Python (0)
      • Git (1)
      • IDE (0)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    Repository
    git bash
    티스토리챌린지
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
moodone
Spring Boot: Form 데이터 처리
상단으로

티스토리툴바