Spring/실습 정리

Spring Boot 13강 - 답변 등록 로직 구현하기

코딩하는냥이 2025. 7. 2. 14:14
반응형

상세 페이지에서 입력한 답변(댓글)을
실제로 데이터베이스에 저장하려면
컨트롤러와 서비스 계층에서 로직을 구현해야 합니다.
답글이 등록되면 해당 질문의 상세 페이지로 바로 이동시키는 것이 일반적입니다.


📌 예제 코드

AnswerController.java

package com.mysite.sbb.answer;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.mysite.sbb.question.Question;
import com.mysite.sbb.question.QuestionService;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@RequestMapping("/answer")
@Controller
public class AnswerController {
    private final QuestionService questionService;
    private final AnswerService answerService;
    
    public String createAnswer(Model model, @PathVariable("id") Integer id, @RequestParam("content") String content) {
        Question question = this.questionService.getQuestion(id);
        this.answerService.create(question, content);
        return String.format("redirect:/question/detail/%s", id);
    }
}

AnswerService.java

package com.mysite.sbb.answer;

import java.time.LocalDateTime;

import org.springframework.stereotype.Service;

import com.mysite.sbb.question.Question;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class AnswerService {
    private final AnswerRepository answerRepository;
    
    public void create(Question question, String content) {
        Answer answer = new Answer();
        answer.setContent(content);
        answer.setCreateDate(LocalDateTime.now());
        answer.setQuestion(question);
        this.answerRepository.save(answer);
    }
}

💬 코드 설명

  • AnswerController
    • /answer로 시작하는 요청을 처리합니다.
    • createAnswer 메서드는
      • 폼에서 받은 질문 id(@PathVariable("id"))와 답글 내용(@RequestParam("content"))을 받아
      • 해당 질문을 조회하고
      • AnswerService를 통해 답변을 생성합니다.
      • 등록이 완료되면 해당 질문의 상세 페이지로 리다이렉트합니다.
    • 실제 운영 시에는
      @PostMapping("/create/{id}")
      같은 애너테이션을 추가하는 것이 일반적입니다.
      (생략된 경우 꼭 추가해 주세요!)
  • AnswerService
    • 실제 답변 객체를 만들어 저장하는 역할만 담당합니다.
    • 답변의 작성일, 본문, 연결된 질문 정보를 세팅한 뒤 저장합니다.

💡포인트 정리

  • 폼 입력값은 @RequestParam으로 받는다.
  • 질문 id는 @PathVariable로 URL 경로에서 추출한다.
  • 서비스 계층에서 객체 생성 및 저장 로직을 담당한다.
  • 답변 등록 후, 다시 질문 상세 페이지로 리다이렉트하여
    방금 쓴 답글을 바로 확인할 수 있다.

📌정리하자면, 답글 등록 요청을 받아, 실제로 데이터베이스에 저장하고
사용자가 자연스럽게 상세 페이지로 이동하도록
컨트롤러와 서비스 계층을 구현했습니다.
이제 실전 게시판에서
댓글(답변) 기능의 기본 뼈대가 갖춰졌습니다.