아무나개발하자

스프링 MVC - 웹 페이지 만들기1 본문

Spring

스프링 MVC - 웹 페이지 만들기1

개발천재나천재 2022. 7. 21. 14:49

지금까지 김영한님의 강의를 들으면서 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