당니의 개발자 스토리

상품 등록 본문

스프링/실전! 스프링 부트와 JPA 활용1

상품 등록

clainy 2024. 5. 14. 01:35

상품 등록

자 이번 시간에는 상품 등록을 한번 해보겠습니다.

상품 기능에 있는 상품 등록에 딱 들어가면,

items/new 뭔가 이전에 했던거랑 비슷하죠. 이제 Member가 아니라 Item 인 거예요. 그럼 이제 화면에 넘기기 위한 BookForm을 만들어야 되는 거죠.

앞에서 말씀드린 것처럼 상품은 딱 책만 할 거에요.

자 @Getter, @Setter 딱 만들어 놓고 상품 폼에다가는 일단 id를 받을 거에요. 왜냐? 상품 수정이 있거든요. 그래서 id 값이 있어야 돼요.

그 다음에 name, price, stockQantity 넣고 저자랑 isbn까지 넣어줄게요.

여기까지는 상품의 공통속성이고,

여기는 책과 관련된 특별한 속성이죠. 이게 BookForm 입니다. 이제 Form 만들었으니까 컨트롤러를 만들어야 되겠죠.

ItemController 라고 하겠습니다.

여기까지는 딱 빠르게 세팅해야죠.

이제 @GetMapping 으로 items에 있는 new 라고 해서, get으로 만들고 이따가 얘를 또 post로도 하나 만들어야 되겠죠. 메서드는 createForm이라 할게요.

model.addAttribute 해가지고 form을 넘기는데 form은 new BookForm()으로 방금 만든 걸 넘깁니다. 그리고 return 하고 items/createItemForm 라고 할게요.

자 Post도 한 번에 가겠습니다.

여러분 여기서부턴 validation 안 하겠습니다. 강의의 핵심이 validation 하는 Spring MVC 강의가 아니기 때문에.

우선 book을 생성을 하고 차례대로 세팅을 해줄게요.

자 이렇게 해서 책 오브젝트를 만든 다음에 어떻게 합니까?

itemService.saveItem으로 book을 넣어 주시면 책이 저장이 됩니다.

자 그 다음에 return은 redirect를 어디로 할 거냐면,

items, 즉 저장된 책 목록으로 바로 가버릴 거에요. 책목록은 지금 없는데 다음에 만들 때 한번 보여드릴게요.

그런데 지금 코드를 보면 set이 너무 많죠. 그래서 createBook 이라는 메서드를 만들어서 Parameter를 넘기는 식으로 설계하는 게 더 나은 설계에요. 그래서 createBook 메서드를 Book 엔티티 안에 만들거나, 우리가 전에 봤던 static 생성자 메서드를 가지고 의도에 맞게 생성하도록 사용하게 하는 게 가장 베스트입니다. 그렇게 하면 여기 있는 Setter를 다 날릴 수가 있거든요. 그게 제일 깔끔한 설계인데 저는 그냥 예제니까 Setter를 열어놔야 편하게 할 수 있는 것들이 많아서 그냥 열어 놨습니다.

그러면 이제 이 form을 만들면 되겠죠.

이렇게 디렉토리를 만들고 html 만들어서 복사 붙이기 할게요.

자 여기 보면 item이 안 맞네요.

이래서 new BookForm()을 쓰는 겁니다.

그러니까 이런 식으로 눌러서 추적할 수가 있어요. 이거 추적할 수 있는 이유가 뭐냐면,

이러한 빈 form을 넘겨줬기 때문에 추적할 수 있는 거예요. 이렇게 안 넘겨주면 추적할 수 있는 근거가 없겠죠. 실제 컴파일 타임에 실제 돌려보면 방금 item 오류처럼 오류를 다 내줘요. 그래서 훨씬 유지 보수하기가 좋아집니다.

제대로 고쳤고, 상품 등록 View 코드에 대해서는 크게 설명 드릴 건 없겠네요.

자 이제 돌려보면 되겠죠. 상품 등록에 들어가면,

이제 뜨는 거죠.

이렇게 대충 적고 submit 하면 저장이 된 거 거든요. DB에 가보시면,

이렇게 잘 나와있습니다. Dtype은 B, 저희가 이전에 Book의 앞글자를 따서 B라고 세팅했던 거 기억나시죠? 그리고 지금 전략 자체가 싱글 테이블 전략이기 때문에 actor, director, artist에 대한 이런 정보들은 다 null로 들어가는 게 맞습니다.

 

이렇게 해서 상품 등록을 알아봤고요. 다음 시간에는 상품 목록을 조회해 보겠습니다.

'스프링 > 실전! 스프링 부트와 JPA 활용1' 카테고리의 다른 글

상품 수정  (0) 2024.05.15
상품 목록  (0) 2024.05.14
회원 목록 조회  (0) 2024.05.14
회원 등록  (0) 2024.05.13
홈 화면과 레이아웃  (0) 2024.05.12