ABOUT ME

Today
Yesterday
Total
  • [스프링MVC - 1편] 스프링 MVC - 웹 페이지 만들기 (1)
    스프링&스프링부트 2025. 1. 30. 12:14

    서비스 흐름

     

     

     

    상품 도메인 개발

    1. Item - 상품객체

    @Data
    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;
        }
    }

     

     

     

    2. ItemRepository - 상품 저장소

    @Repository
    public class ItemRepository {
        private static final Map<Long, Item> store = new HashMap<>();
        // 멀티스레드 환경에서 여러개가 store 접근하는 경우 hashMap 사용하면 안됨 > ConcurrentHashMap<>() 사용
        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();
        }
    }

     

     

     

    3. 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("item1", 10000, 10);
            Item item2 = new Item("item2", 20000, 5);
    
            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 update() {
            // given
            Item item = new Item("item1", 10000, 10);
    
            Item savedItem = itemRepository.save(item);
            Long itemId = savedItem.getId();
    
            // when
            Item updateParam = new Item("item2", 20000, 20);
            itemRepository.update(itemId, updateParam);
    
            // then
            Item findItem = itemRepository.findById(itemId);
            assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
            assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
        }
    }

     

     

     

    상품 서비스 HTML

    부트스트랩

    https://getbootstrap.com/docs/5.0/getting-started/download/

    다운로드 후 css파일 속 bootstrap.min.css 복사 후 해당 경로에 붙여 넣기

     

     

    intelliJ 재실행 후 해당 주소로 정상작동 확인

     

     

     

    HTML, css 파일 추가

    • /resources/static/html/items.html
    • /resources/static/html/item.html
    • /resources/static/html/addForm.html
    • /resources/static/html/editForm.html

     

     

     

    - 참고

    이렇게 정적 리소스가 공개되는 /resources/static 폴더에 HTML 넣어두면, 실제 서비스에서도 공개된다 

    서비스를 운영한다면 지금처럼 공개할 필요없는 HTML 두는 것은 주의

    728x90
Designed by Tistory.