강의 노트 위주로 작성
가격이 정해지지 않은 경우, 0보다는 null값이 더 적절하다. => Integer를 사용한다.
@Data 는 핵심 도메인 모델에 사용하기에는 위험하다
실무에서는 ConcurrentHashMap 을 사용해야 한다.
@RequiredArgsConstructor
final 이 붙은 멤버변수만을 사용해서 생성자를 자동으로 만들어준다.
@PostConstruct
해당 빈의 의존관계가 모두 주입되고 나면 초기화 용도로 호출
상품 수정의 경우 상품 상세로 redirect 처리를 했음
상품 등록의 경우 새로고침을 하게되면 같은 상품이 계속 중복되어 등록되는 문제가 발생

상품 등록의 경우, 단순히 뷰 템플릿을 보여주고 끝난다.
새로고침을 하면 마지막에 한 행위가 계속 요청이 된다.
해결 방안 - 리다이렉트
리다이렉트는 url이 바뀌면서 새로운 요청을 하게 된다.
새로고침을 하더라도 POST 요청이 아닌 상품상세 페이지 요청을 하게 된다.
=> PRG 패턴
redirect 주소에서 item.getId()는 괜찮지만 item.getName()을 사용하는 경우가 있다면 인코딩이 안될 위험이 있다.
RedirectAttributes를 사용하여 해결
status=true를 추가하여, 뷰 템플릿에 값이 있으면 메시지 출력