[Spring Boot] 7. Response 객체

김건우's avatar
Mar 25, 2025
[Spring Boot] 7. Response 객체
💡
Response 객체는 클라이언트에게 데이터를 응답하는 역할을 합니다.
Controller → Service → Repository 순으로 데이터를 처리하고, 최종적으로 Response 객체를 통해 필요한 데이터만 반환합니다.
주로 DTO (Data Transfer Object) 형태로 사용되며, API 응답 시 특정 데이터를 가공하여 제공할 때 활용됩니다.

LogResponse.java

package com.metacoding.storev1.log; import lombok.AllArgsConstructor; import lombok.Data; // DTO : Data Transfer Object - 화면에 필요한 데이터만 있는 오브젝트 public class LogResponse { @AllArgsConstructor // 모든 필드에 대한 생성자 자동 생성 @Data // getter, setter, toString 자동 생성 public static class ListPage { private int id; // 주문 번호 private String name; // 상품명 private int qty; // 구매 개수 private int totalPrice; // 총 가격 (qty * price) private String buyer; // 구매자 이름 } }

LogResponse의 동작 방식

🔹 데이터 흐름

  1. Controller → LogService.구매목록() 호출
  1. Service → LogRepository.findAllJoinStore() 실행하여 DB 조회
  1. Repository → DB에서 가져온 데이터를 LogResponse.ListPage 객체로 변환
  1. Controller → 최종적으로 List<LogResponse.ListPage> 형태로 뷰(view)에 전달
  1. Mustache 뷰 템플릿에서 models를 반복하여 화면에 출력

LogRepository에서 Response 객체로 변환

@Repository public class LogRepository { private EntityManager em; public LogRepository(EntityManager em) { this.em = em; } public List<LogResponse.ListPage> findAllJoinStore() { List<LogResponse.ListPage> logList = new ArrayList<>(); // SQL 실행 (상품명 조인 포함) String q = "SELECT lt.id, st.name, lt.qty, lt.total_price, lt.buyer " + "FROM log_tb lt INNER JOIN store_tb st ON lt.store_id = st.id ORDER BY lt.id DESC"; Query query = em.createNativeQuery(q); // 결과 리스트 조회 List<Object[]> obsList = (List<Object[]>) query.getResultList(); // Object[] -> ROW // Object[]를 DTO로 변환 for (Object[] obs : obsList) { LogResponse.ListPage log = new LogResponse.ListPage( (int) obs[0], // id (String) obs[1], // name (int) obs[2], // qty (int) obs[3], // totalPrice (String) obs[4] // buyer ); logList.add(log); } return logList; } }

LogController에서 Response 객체 반환

💡
컨트롤러에서는 LogResponse.ListPage를 사용하여 뷰에 필요한 데이터만 전달
@Controller public class LogController { private LogService logService; public LogController(LogService logService) { this.logService = logService; } @GetMapping("/log") public String list(HttpServletRequest request) { List<LogResponse.ListPage> listPage = logService.구매목록(); request.setAttribute("models", listPage); return "log/list"; } }
Share article

gunwoo