프로젝트 생성
스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io
- 프로젝트 선택
- Project: Gradle Project
- Language: Java
- Spring Boot: 2.6.x
- Project Metadata
- Group: hello
- Artifact: item-service
- Name: item-service
- Package name: hello.itemservice (package name에는 특수문자 x)
- Packaging: Jar (주의!)
- Java: 11
요구사항 분석
상품을 관리할 수 있는 서비스를 만들어보자.
- 상품 도메인 모델
- 상품 ID
- 상품명
- 가격
- 수량
- 상품 관리 기능
- 상품 목록
- 상품 상세
- 상품 등록
- 상품 수정
요구사항이 정리되고 디자이너, 웹 퍼블리셔, 백엔드 개발자가 업무를 나누어 진행한다.
- 디자이너: 요구사항에 맞도록 디자인하고, 디자인 결과물을 웹 퍼블리셔에게 넘겨준다.
- 웹 퍼블리셔: 다자이너에서 받은 디자인을 기반으로 HTML, CSS를 만들어 개발자에게 제공한다.
- 백엔드 개발자: 디자이너, 웹 퍼블리셔를 통해서 HTML 화면이 나오기 전까지 시스템을 설계하고, 핵심 비즈니스 모델을 개발한다. 이후 HTML이 나오면 이 HTML을 뷰 템플릿으로 변환해서 동적으로 화면을 그리고, 또 웹 화면의 흐름을 제어한다.
상품 도메인 개발
Item - 상품 객체
@Data
public class Item {
private Long id;
private String itemName;
private Integer price; //int가 아닌 Integer인 이유는 NULL 값이 들어갈수도 있어서
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
ItemRepository - 상품 저장소
@Repository
public class ItemRepository {
private static final Map<Long, Item> store = new HashMap<>(); //static, 실무에서는 ConcurrentHashMap 사용해야함
private static long sequence = 0L; //static, 실무에서는 atomic long 사용해야함
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 itemId, Item updateParam) {
Item findItem = findById(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
public void clearStore() {
store.clear();
}
}
ItemRepositoryTest - 상품 저장소 테스트
class ItemRepositoryTest {
ItemRepository itemRepository = new ItemRepository();
@AfterEach
void afterEach() {
itemRepository.clearStore();
}
@Test
void save() {
//given
Item item = new Item("itemA", 10000, 10);
//when
Item savedItem = itemRepository.save(item);
//then
Item findItem = itemRepository.findById(item.getId());
assertThat(findItem).isEqualTo(savedItem);
}
@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 savedItem = itemRepository.save(item);
Long itemId = savedItem.getId();
//when
Item updateParam = new Item("item2", 20000, 30);
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());
}
}
인프런 김영한님의 스프링 MVC 1편을 듣고 작성한 글입니다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -
www.inflearn.com
'Spring' 카테고리의 다른 글
스프링 MVC - 웹페이지 만들기(3) (0) | 2022.04.16 |
---|---|
스프링 MVC - 웹페이지 만들기(2) (0) | 2022.04.16 |
스프링 MVC - HTTP 응답 3가지 방법 (0) | 2022.04.13 |
스프링 MVC - HTTP 요청 메시지 (0) | 2022.04.11 |
스프링 MVC - 요청 매핑 ( API 예시) (0) | 2022.04.09 |
댓글