이번에는 쇼핑몰의 상품관리에 관련된 업무를 구현해보았다. 이전까지 구현했던 게시판, 파일업로드와 크게 다른 점은 없지만 구현하면서 새롭게 알게되는 내용을 위주로 복습 정리해볼 계획이다.
1. DB(Oracle) 상품 테이블 생성 및 레코드 입력 SQL
상품 테이블 생성, 상품 번호 기본키 설정
상품 레코드 입력
2. View - 상품 전체 목록 및 상품 상세보기 화면
productList.jsp(상품 전체 목록)
상품 목록 화면에서 상품ID번호, 상품 이미지, 상품명, 가격을 리스트로 출력
<fmt:formatNumber value="${row.productPrice}" pattern="###,###,###"/>
- JSTL
fmt
태그를 사용하여 숫자 포맷을 변경해주었다. 상품가격의 가독성을 높이기 위해 숫자3자리마다 콤마(,)를 찍어주도록 처리
<a href="${path}/shop/product/detail/${row.productId}">
- 상품이미지와 상품명을 클릭하면 해당 상품의 상세 화면으로 이동할 수 있도록
<a href>
태그로 링크
프로젝트의 디렉토리에 존재하는 이미지 파일을 view에 출력해주기 위해서는 servlet-context.xml
에 아래와 같은 설정이 필요하다. 실제 리소스가 저장된 경로를 링크할 수 도 있지만 외부에 리소스가 실제로 저장된 경로를 감추기 위해서이다.
productDetail.jsp(상품 상세보기)
<fmt:formatNumber value="${vo.productPrice}" pattern="###,###,###"/>
- JSTL
fmt
태그를 사용하여 숫자 포맷을 변경해주었다. 상품가격의 가독성을 높이기 위해 숫자3자리마다 콤마(,)를 찍어주도록 처리
<a href="${path}/shop/product/list.do">상품목록</a>
: 상품목록으로 이동그 외에 내용은 장바구니 기능구현 포스팅에서 설명
3. MybatisMapper
productMapper : 상품 페이지 관련 mapper
상품 전체 목록 select쿼리
- DB의 칼럼명과 java에서 처리하는 변수명이 일치하지 않기 때문에
alias
로 매칭시켜주었다.- 전체 목록을 상품명 오름차순으로 정렬
상품 상세보기 select쿼리
- 전체목록과 동일하게
alias
로 변수명과 칼럼값을 매칭시켜주고,WHERE
조건절로 해당상품명만 조회할 수 있게 처리
4. DTO/VO
ProductVO : 상품 관련VO
상품관련 VO
5. Controller(흐름제어)
ProductController : 상품 관련 페이지 매핑
@RequestMapping("/list.do")
: 상품 전체 목록 페이지 매핑
- 리턴타입을
ModelAndView
로 설정하여 view의 이름과 Service에서 가져온 리스트 객체를 리턴
@RequestMapping("/detail/{productId}")
: 상품 상세보기 페이지 매핑
- 페이지 맵핑은 하나의 URL이 하나의 고유한 리소스를 대표(Rest)할 수 있도록 처리해
- 리턴타입을
ModelAndView
로 설정하여 view의 이름과 service에서 가져온 상품 객체를 리턴
6. Service(비지니스 로직, DB연동 이외의 핵심업무처리)
ProductServiceImpl : ProductService인터페이스를 구현한 클래스
listProduct()
: 상품관련DAO(ProductDAO
)의 목록 메서드 호출
detailProduct(int productId)
: 상품관련DAO(ProductDAO
)의 상세보기 메서드 호출
7. DAO(비지니스로직, DB연동 작업처리)
ProductDAOImpl - ProductDAO인터페이스를 구현한 클래스
전체 상품 목록을 select조회한 결과를 리턴
상품상세 정보를 select조회한 결과를 리턴