반응형
스프링 부트에서는 Controller → Service → Repository 계층 구조를 통해
비즈니스 로직과 데이터 접근을 분리하여,
코드의 유지보수성과 확장성을 높일 수 있습니다.
이번 강의에서는 질문(Question) 목록을 서비스로부터 받아
뷰(HTML 화면)에 데이터를 전달하는 전체 흐름을 다룹니다.
📌 예제 코드
QuestionController.java
package com.mysite.sbb.question;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import lombok.RequiredArgsConstructor;
@Controller
@RequiredArgsConstructor
public class QuestionController {
private final QuestionService questionService;
@GetMapping("/question/list")
public String list(Model model) {
List<Question> questionList = this.questionService.getList();
model.addAttribute("questionList", questionList);
return "question_list";
}
}
QuestionService.java
package com.mysite.sbb.question;
import java.util.List;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class QuestionService {
private final QuestionRepository questionRepository;
public List<Question> getList(){
return this.questionRepository.findAll();
}
}
💬 코드 설명
- @Service, @Controller
- @Service는 비즈니스 로직을 담당하는 클래스임을 표시합니다.
- @Controller는 웹 요청을 받아 처리하는 컨트롤러임을 나타냅니다.
- @RequiredArgsConstructor
- final로 선언된 필드에 대해 생성자를 자동으로 만들어줍니다.
- DI(의존성 주입)를 더욱 간결하게 할 수 있습니다.
- QuestionController의 역할
- /question/list URL 요청이 들어오면,
QuestionService로부터 질문 목록을 받아 모델(Model)에 담아
뷰 파일("question_list")에 전달합니다.
- /question/list URL 요청이 들어오면,
- QuestionService의 역할
- 데이터베이스에서 모든 Question 데이터를 가져오는 역할만 담당합니다.
- 실제 데이터 조회는 QuestionRepository에서 처리합니다.
- model.addAttribute("questionList", questionList);
- 뷰(HTML)에서 사용할 데이터(질문 목록)를 "questionList"라는 이름으로 전달합니다.
- return "question_list";
- 실제로 렌더링될 HTML 파일(템플릿 엔진 사용, 예: Thymeleaf)의 이름입니다.
- resources/templates/question_list.html 파일이 필요합니다.
💡포인트 정리
- Controller → Service → Repository 구조는
각 역할을 명확히 분리해 코드 관리가 쉬워진다. - @RequiredArgsConstructor로 생성자 주입을 자동화할 수 있다.
- Model을 활용해 데이터를 뷰 파일에 전달하면,
동적 화면 구성이 가능하다.
📌정리하자면, 서비스 계층을 통해 데이터를 조회하고,
컨트롤러에서 뷰(템플릿)로 데이터를 전달하는
스프링 부트의 기본적인 웹 MVC 구조를 실습해봤습니다.
이런 계층 분리를 잘 익혀두면,
더 복잡하고 견고한 웹 서비스를 만들 때 큰 도움이 됩니다.
'Spring > 실습 정리' 카테고리의 다른 글
Spring Boot 12강 - 상세 페이지에서 질문 내용 출력과 답글 작성 폼 만들기 (0) | 2025.07.02 |
---|---|
Spring Boot 11강 - 상세 페이지 구현과 NotFound 예외 처리 (0) | 2025.07.02 |
Spring Boot 10강 - Thymeleaf로 질문 목록 테이블 출력하기 (0) | 2025.07.02 |
Spring Boot 8강 - JPA 리포지토리와 메서드 쿼리로 데이터 조회하기 (0) | 2025.07.02 |
Spring Boot 7강 - JPA 엔티티와 관계 매핑(Question & Answer 예제) (2) | 2025.06.30 |
Spring Boot 6강 - JPA & H2 데이터베이스 연동을 위한 dependencies 추가와 application.properties 설정 (0) | 2025.06.30 |