html
의form
으로 넘어오는값들을 받는 역할
을 하는객체
Entity 직접 사용
Form
으로 넘어오는 값이Entity
와 일치하지 않거나값 검증
을 해야하면Entity 내부
에처리 로직
이 늘어난다
-->Entity
가화면에 종속적
으로 변함
-->유지보수 힘듬
Form 객체 사용
화면 계층
과서비스 계층
을 명확하게분리 가능
@NotEmpty
처럼검증하는 로직
이Entity
에 영향을 주지X
- 정리
Form
을 받기 위한 객체를 생성해야하는귀찮음
을 감수해서라도안전
하게Entity
를 관리하기 위해Form 객체를 사용하자
회원
회원 등록
회원 목록 조회
상품
상품 등록
상품 목록 조회
상품 목록 수정
주문
주문 등록
주문 목록 조회 (+검색)
[ MemberForm ]
회원 등록 Form
에서 정보를 받는Form 객체
javax.validation
에 있는@NotEmpty
를 사용해서 넘어오는 데이터의필수속성
을 지정
(지정한필드
가 넘어오지 않으면오류를 발생
시킴!)
[ MemberController ]
( 회원 등록 )
- 설명
GET /members/new
:회원 등록 폼
으로 보내는 것
(/resources/templates/members/createMemberForm.html
에 매칭)POST /members/new
: 입력받은 회원 정보를 저장하는 것
BindingResult
로예외가 발생
했을 때검증
하고대처
할 수 있음Entity
에Setter
를 개방하는 것은위험
-->생성자
로 대체
(수정
이 일어나는 부분을추적
하기어려워짐
)
( 회원 목록 조회 )
- 설명
GET /members
:모든 회원 목록을
조회
해서View
로 보내준다
- 주의
- 실무에서는
Entity
를 반환하지 않고DTO
를생성한 후에 반환
한다
-->Entity
에 있는모든 데이터
가 필요한 것이 아니며,보안상 위험
함
[ BookForm ]
- Item들중 예시를 간단하게 하기 위해서
Book만 사용하는 Form
을 제작상품 수정
을 위해서Form
에id
값이 있어야 함
[ ItemController ]
( 상품 등록 & 조회 )
- 설명
GET /items/new
:상품 등록 Form
이 있는View
로 보냄POST /items/new
:입력받은 상품의 정보
를form
을 통해 받아서 저장GET /items
:모든 상품
을조회
해서 리스트를View
에 반환
(역시실무
에서는Entity 반환
이 아닌DTO를 사용
해야 함)
( 상품 수정 )
- 설명
GET /items/{itemId}/edit
:itemId
에 해당하는수정 View
로 보내줌
(수정 View
니까기존 값
을조회
)
(Spring
에서는Params
를@PathVariable("이름")
으로 가져옴)POST /items/{itemId}/edit
:itemId
에 대한 값을입력받은 값
으로수정
- 주의
Entity
어설프게 사용
X
:form에서 받은 정보
를 저장할 때Entity
를 만들어서 저장하는 것 보다는
DTO
를 따로 만들어서 전달하거나,필요한 데이터만 받는 메서드
를생성
해서 넘기자
(Entity
의Setter
는닫힌채로 설계
하는 것이 좋기 때문)수정을 위해 생성한 객체
는 현재영속성 컨텍스트
가관리하지 않는
준영속 객체
--> 즉,변경감지(Dirty Checking)
이 수행되지 X
--> 변경할식별자 값
을 통해조회(findOne)
한 후에값을 수정
하면변경감지
일어남
[ OrderController ]
(주문 등록)
- 설명
GET /order
:주문 등록 View
에서 필요한members
와items
조회 후 View로 이동POST /order
:입력받은 주문 내용
으로주문을 생성
하는 것
(주문 목록 조회+검색 / 상태 변경)
- 설명
GET /orders
: 사용자의 검색에 따라order
들을 처리하는 로직POST /orders/{orderId}/cancel
:orderId
에 해당하는주문을 삭제처리
하는 로직
OrderSearch
객체 필드쿼리스트링
매칭
:OrderSearch
를 통해 검색에 필요한name
,orderstatus
를 매핑해서쿼리스트링
으로 값을 넘겨준다