Back-End/Spring

[Spring MVC][웹 페이지 만들기] - 2. 상품 도메인 개발과 HTML

얄루몬 2022. 4. 4. 19:25

💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com


[상품 도메인 개발]

[Item class]

package hello.itemservice.domain.item;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

//@Getter @Setter를 사용하는 것이 안전함
@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;
    }
}
  • @Data
    • Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value 의 기능을 가짐
    • 그러나 안전하지 않기에 @Getter @Setter 사용하는 것이 안전하다.
    • DTO(단순히 데이터를 옮기는)의 경우엔 사용해도 되지만 이것도 경우에 따라 달라진다.
  • @Getter @Setter
    • 데이터의 보호를 위해서 사용한다
    • getter 은 인스턴스 변수를 반환한다.
    • setter 은 인스턴스 변수를 대입하거나 수정한다.

[itemRepository]

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 {
    //실무 멀티쓰레드 환경에서는 HashMap이나 long 타입이 아닌 다른 타입을 사용한다 ~
    private static final Map<Long, Item> store = new HashMap<>(); //실제로는 HashMap 사용 X
    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());
    }

    //실제로 프로젝트를 진행할 때 id를 사용하지 않기 때문에 id를 제외한 나머지 DTO를 만드는 게 설계상 명확한 것이 낫다.
    public void updateItem(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();
    }
}
  • 실무에서는 HashMap이나 Long 타입은 쓰지 않는다고 한다. 이를 주의해서 보도록 하자...
  • @Repository가 붙은 클래스의 경우에는 Component Scan의 대상이 된다.

[Repository와 Service 패키지?]

  • Repository 패키지
    • DB에 접근하는 모든 코드가 모여 있는 패키지이다.
  • Service 패키지?
    • DB에 접근하는 코드는 Repository에 위임하고 비지니스 로직을 수행하는 코드를 Service 패키지에 넣어준다.

[Test 진행]

  • 코드가 잘 돌아가는지 확인을 위한 Test 진행을 해준다.

[상품 HTML]

  • HTML과 CSS를 사용해 정적 페이지를 생성한다.
    • 서버 주소를 사용한 확인 방법
    • 절대 경로 -> 탐색기를 사용한 정적 페이지 확인 방법

정적 리소스 공개는 별로기 때문에 이를 막으려면 다른 방법을 사용해야한다 다음 포스팅을 통해 알아보자.