일반적인 웹 애플리케이션 계층 구조 다시한번 상기하기 위해서..!
Controller -> Service -> Repository -> DB
* 개발 순서 :
1) 엔티티 개발
2) 리포지토리 개발
3) 서비스 개발
4) 테스트
5) 컨트롤러 개발
6) 웹 계층 적용
1. Domain
- Item.java
- Book.java
Item 은 추상화 객체이며,
해당 프로젝트에서만 Book 만 사용하는것으로 개발.
2. Repository
- ItemRepository.java
@Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환
@PersistenceContext : 엔티티 메니저( EntityManager ) 주입
@PersistenceUnit : 엔티티 메니터 팩토리( EntityManagerFactory ) 주입
* 기능
1) 저장 : save
2) 단건 조회 : findOne(Long id)
3) 다건 조회 : findAll()
3. Service
1.
ItemRepository 를 주입받는다. -> private final ItemRepository itemRepository
- 생성자 주입 방식을 권장 -> why? 변경 불가능한 안전한 객체 생성 가능
- 생성자가 하나면, @Autowired 를 생략할 수 있다.
- final 키워드를 추가하면 컴파일 시점에 ItemRepository 를 설정하지 않는 오류를 체크할 수 있다. (보통 기본 생성자를 추가할 때 발견)
2. 기능
- 먼저 개발한 ItemRepository 를 주입받아 사용한다.
1) 등록 : saveItem - Repository.save 사용
2) 단건 조회 : findOne - repository.findOne 사용
3) 다건 조회 : findItems - Repository.findAll 사용
3. 웹 계층 & Controller
1. 폼 객체 : bookForm.java
2. 웹계층 : createItemForm.html
아래 내용을 주의하여 컨트롤러와 해당 부분을 맞춰줘야 한다.
- action: /items/new
- object : form
- method : post
3. 컨트롤러 : ItemController
* GetMapping ("/items/new") -> 해당 url 조회할때 : GetMapping
- localhost:8080/item/new 의 입력값을 받으면 아래 내용이 작동한다는 의미.
- attributeName : form은 html에서 받을 object 명과 동일해야 한다.
- return 값은 동작이 끝나면 어떤 웹 화면으로 갈지를 알려주는 내용.
*PostMapping("/Item/new") -> 해당 url에서 무엇인가를 전송할때 : PostMapping
- localhost:8080/item/new 화면에서 전송하는(post) 하는 동작이있을때 어떤 작업을 할지
- 컨트롤러에서는 서비스의 메서드를 사용하여 동작. (Service.saveItem.. )
* 상품조회하는 웹 계층 : itemList.html
-특이점: 수정
하는 부분이 있다.
- /items/{id}/edit
* 컨트롤러에 수정하는 부분 추가.
- {itemId} 가 어떤 값을 의미하는지 @PathVariable 을 사용해서 지정해준다.
- item 값들을 form에 지정해주고 뿌려준다.
- return : updateItemForm
'Spring > 실전! 스프링부트와 JPA 활용1' 카테고리의 다른 글
웹계층 개발 - Home (0) | 2022.03.18 |
---|---|
주문 도메인 개발 (0) | 2022.03.16 |
회원 도메인 개발 (0) | 2022.03.09 |
애플리케이션 아키텍처 (0) | 2022.03.08 |
2.요구사항 분석 설계 (0) | 2022.03.08 |