Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Split
- 크기가 작은 부분 문자열
- TCP/IP
- Queue
- CPU
- port
- green thread
- dns
- 문자열
- 십진수 이진수 전환
- stack
- Spring
- frontPattern
- IO bound
- 프로그래머스
- 가장 가까운 단어
- http
- annotation
- deque
- springMVC
- 문자열 내마음대로 정렬하기
- java
- reflection
- 동시성문제
- process
- 코딩테스트
- DICTIONARY
- 2차원 배열 출력
- URL
- CPU bound
Archives
- Today
- Total
아무나개발하자
스프링 MVC - 웹 페이지 만들기1 본문
지금까지 김영한님의 강의를 들으면서 spring mvc구조의 탄생 배경에 대해 배워봤다, 이제는 직접 spring mvc를 사용하여 웹페이지를 개발해 보겠다.
요구사항 분석
- 상품을 관리할 수 있는 Admin웹 서비스를 만들어 보자
상품 도메인 모델(item)
- 상품id, 상품명, 가격, 수량이 들어간다.
상품관리 기능
- 상품목록, 상품 상세, 상품 등록, 상품 수정
서비스 제공의 흐름도
서비스 제공의 흐름도이다.
상품 도메인을 개발해보자
1. Item - 상품 객체
package hello.itemservice.domain.item;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class Item {
private Long id;
private String itemName;
private Integer price;
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
- Item 객체 정보로 id, itemName, price, quantity가 들어간다, 객체를 생성할때 itemName, price, quantity값을 지정할 수있게 생성자를 하나 만들어준다.
2. ItemRepository - 상품 저장소
package hello.itemservice.domain.item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Repository
public class ItemRepository {
private static final Map<Long, Item> store = new HashMap<>(); //static로 선언
private static long sequence = 0L; //static로 선언
public Item save(Item item){
item.setId(++sequence);
store.put(item.getId(), item);
return item;
}
public Item findById(Long id){
return store.get(id);
}
public List<Item> findAll(){
return new ArrayList<>(store.values());
}
public void update(Long id, Item updateParam){
Item findItem = findById(id);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
public void clearStore(){
store.clear();
}
}
- 비즈니스 로직은 앞서 공부한 내용과 일치함으로 생략한다. 앞서서 얘기했던 상품의 관리 기능으로 상품목록, 상품 상세, 상품 등록, 상품 수정 기능을 만들었다.
3. ItemRepositoryTest - 상품 저장소 테스트
package hello.itemservice.domain.Item;
import hello.itemservice.domain.item.Item;
import hello.itemservice.domain.item.ItemRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
class ItemRepositoryTest {
ItemRepository itemRepository = new ItemRepository();
@AfterEach
void afterEach(){
itemRepository.clearStore();
}
@Test
void save(){
//given
Item item = new Item("ItemA", 10000, 10);
//when
Item saveItem = itemRepository.save(item);
//then
Item findItem = itemRepository.findById(item.getId());
assertThat(saveItem).isEqualTo(findItem);
}
@Test
void findAll(){
//given
Item item1 = new Item("ItemA", 10000, 10);
Item item2 = new Item("ItemB", 20000, 20);
itemRepository.save(item1);
itemRepository.save(item2);
//when
List<Item> result = itemRepository.findAll();
//then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(item1, item2);
}
@Test
void updateItem(){
//given
Item item = new Item("ItemA", 10000, 10);
Item saveItem = itemRepository.save(item);
Long itemId = saveItem.getId();
//when
Item updateParam = new Item("ItemB", 20000, 20);
itemRepository.update(itemId, updateParam);
//then
Item findItem = itemRepository.findById(itemId);
assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
}
}
- 앞서서 만든 상품 관리기능인 비즈니스 로직이 잘 작동하는지 test코드를 짜본 결과이다. given, when, then으로 (~이 주어졌고, ~할때 , ~해야한다.)로 비즈니스 로직을 확인했다.
참고자료 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
'Spring' 카테고리의 다른 글
스프링 MVC - 웹 페이지 만들기2 (0) | 2022.07.22 |
---|---|
HTTP 메시지 컨버터2 (0) | 2022.07.16 |
HTTP 메시지 컨버터 (0) | 2022.07.14 |
프론트 컨트롤러 패턴 소개4 (0) | 2022.07.10 |
프론트 컨트롤러 패턴 소개3 (0) | 2022.07.09 |