[Spring] MVC 패턴 웹 페이지 2 - 상품 도메인, 저장소 구현

2025. 6. 24. 21:49·Project/Web

지난번에 이어 이번에는 상품 도메인을 개발해본다.

 

[Spring] MVC 패턴을 적용한 간단한 웹 페이지 만들기 - 1

상품을 관리할 수 있는 간단한 서비스를 구현 해보자 !이번에는 요구 사항을 분석하고, 어떤 흐름으로 개발할지를 먼저 살펴 본다.요구 사항 분석상품 도메인 모델상품은 다음 필드를 가져야 한

bdisappointed.tistory.com

 


상품 도메인 개발

상품 객체 - Item

package hello.itemservice.domain.item;

import lombok.Data;

@Data
public class Item {

    private Long id;
    private String itemName;
    private Integer price; // price 가 없을 수도 있다는 가정 -> Integer
    private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }


}

 

상품 저장소

편의상 여기선 메모리 저장소를 사용하겠다.

package hello.itemservice.domain.item;

import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Repository
public class ItemRepository {

    private static Map<Long, Item> store = new HashMap<>(); // static
    private static long sequence = 0L;

    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();
    }
}

 

상품 저장소 테스트 코드 작성

package hello.itemservice.domain.item;

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 savedItem = itemRepository.save(item);

        // then
        Item findItem = itemRepository.findById(item.getId());
        assertThat(savedItem).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("item1", 10000, 10);

        Item savedItem = itemRepository.save(item);
        Long itemId = savedItem.getId();
        // when
        Item updateParam = new Item("item2", 20000, 30);
        itemRepository.update(itemId, updateParam);

        Item findItem = itemRepository.findById(itemId);

        // then
        assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
        assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
        assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
    }
}

생성, 조회, 수정 테스트를 구현 했다. 결과는 모두 성공 !


 

'Project > Web' 카테고리의 다른 글

[Spring] MVC 패턴 웹 페이지 6 - 상품 등록 처리하기 @ModelAttribute  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 5 - 상품 등록 폼  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 Thymeleaf  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 1 - 요구사항 분석  (0) 2025.06.24
'Project/Web' 카테고리의 다른 글
  • [Spring] MVC 패턴 웹 페이지 5 - 상품 등록 폼
  • [Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지
  • [Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 Thymeleaf
  • [Spring] MVC 패턴 웹 페이지 1 - 요구사항 분석
xuv2
xuv2
집에 가고 싶다
  • xuv2
    xuvlog
    xuv2
  • 전체
    오늘
    어제
    • 전체 글 모아보기 (171)
      • 잡담 (9)
      • 도전 , 자격증 (2)
      • Error (5)
      • Java (23)
      • Spring (40)
        • Core (10)
        • MVC (21)
        • Thymeleaf (9)
      • DataBase (6)
        • Database Modeling (4)
        • SQL (2)
      • HTTP (11)
      • Network (17)
      • Software Engineering (3)
      • Operating System (3)
      • Algorithm (16)
      • Project (18)
        • Web (9)
        • iOS (8)
        • Python (1)
      • A.I (13)
      • Linux (5)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
xuv2
[Spring] MVC 패턴 웹 페이지 2 - 상품 도메인, 저장소 구현
상단으로

티스토리툴바