스프링데이터 + JPA/웹 애플리케이션 개발

22. 회원 목록 조회

sdafdq 2023. 11. 10. 07:36

회원 목록 조회는 간단하다.

주문조회 처럼 따로 조건도 없고, 그냥 조회해 오는거다.

 

@GetMapping("/members")
public String list(Model model){
    List<Member> members = memberService.findMembers();
    model.addAttribute("members", members);

    return "members/memberList";
}

 

저렇게 list 넘기고

 

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header" />
<body>
<div class="container">
    <div th:replace="fragments/bodyHeader :: bodyHeader" />
    <div>
        <table class="table table-striped">
            <thead>
            <tr>
                <th>#</th>
                <th>이름</th>
                <th>도시</th>
                <th>주소</th>
                <th>우편번호</th>
            </tr>
            </thead>
            <tbody>
            <tr th:each="member : ${members}">
                <td th:text="${member.id}"></td>
                <td th:text="${member.name}"></td>
                <td th:text="${member.address?.city}"></td>
                <td th:text="${member.address?.street}"></td>
                <td th:text="${member.address?.zipcode}"></td>
            </tr>
            </tbody>
        </table>
    </div>
    <div th:replace="fragments/footer :: footer" />
</div> <!-- /container -->
</body>
</html>

이렇게 하면,

th:each는 반복문, forEach랑 같다.

${members}의 각각의 원소들을 member라는 이름으로

member.address?.city는

address가 있냐? 그러면 찍고

없으면 안 찍는다.

 

엔티티는 최대한 순수하게,

그러니까, 로직도 비즈니스로직만 가지고 있게.

 

사실 지금은 엔티티 그대로를 모델에 넣어서 뷰에 줬는데,

이건 간단해서 그렇지, 실무에서는 다를 수 있음.

Dto로 화면에 맞는 스펙으로 변환해서 넣으셈.

 

게다가,

RestAPI에서는 절대 엔티티 그대로를 넘기면 안된다.

먼저 보여지면 안되는 정보까지 가는 보안상의 문제가 있고,

엔티티를 변경하면 맞춰놨던 RestAPI의 스펙이 변한다.

 

지금은 SSR이라 템플릿을 내려주는거라서 템플릿에만 노출 안시키면 된다.

그래도 Dto 등으로 바꾸자.

그게 더 유지보수에 좋을 듯 하다.

 

 

'스프링데이터 + JPA > 웹 애플리케이션 개발' 카테고리의 다른 글

24. 상품 수정  (0) 2023.11.10
23. 상품 등록  (0) 2023.11.10
21. 회원 등록  (0) 2023.11.09
20. 웹 계층 개발  (0) 2023.11.09
19. 주문 검색 기능 개발  (0) 2023.11.09