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의 동작 방식
🔹 데이터 흐름
- Controller → LogService.구매목록() 호출
- Service → LogRepository.findAllJoinStore() 실행하여 DB 조회
- Repository → DB에서 가져온 데이터를 LogResponse.ListPage 객체로 변환
- Controller → 최종적으로 List<LogResponse.ListPage> 형태로 뷰(view)에 전달
- 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