Spring Framework를 사용한 쇼핑몰 웹 프로젝트입니다.
http://54.180.88.148:8080/ 로 접속하실 수 있습니다.(2021.07.03 AWS 비용 문제로 서버를 내렸습니다)
- 2020년 12월 20일 ~ 2021년 4월 6일
- 2인 1조 팀 프로젝트
- Java 8
- Spring Framework 5.0.2
- Maven 2.5.1
- MyBatis 3.4.1
- MySQL
- Spring Security 5.0.6
- JQuery 3.1.1
- Bootstrap 템플릿 Subas을 수정하여 사용
- AWS EC2 (Amazon linux 2)
- AWS RDS (MySQL)
- AWS S3
-
회원가입
회원가입 설명 펼치기:pushpin:
[ 기능 설명 ]
: 회원 가입을 할 수 있습니다.
: 로그인 이후, 회원 정보 수정을 할 수 있습니다.[ 상세 구조 ]
-
UserService
: UserService.java - UserServiceImpl.java의 구조를 가집니다. -
UserMapper
: UserMapper.java - UserMapper.xml의 구조를 가집니다.
-
로그인
로그인 설명 펼치기:pushpin:
[ 기능 설명 ]
: Spring Security를 사용하여 로그인을 할 수 있습니다.
: Spring Security Handler를 이용하여 로그인 성공, 실패, 접근제한을 처리합니다.[ 상세 구조 ]
-
AuthenticaionProvider
: 실제 인증 작업을 진행합니다. 사용자가 인증 요청한 정보와 DB의 사용자 정보가 일치하는지를 확인합니다. -
PasswordEncoder
: 패스워드를 암호화합니다.
: 암호화되지 않은 실제 패스워드를 저장하는 일은 위험하기 때문에 암호화된 패스워드로 저장하고, 사용자가 패스워드를 입력하면 이를 암호화해서 저장된 패스워드와 비교합니다. -
BCyptPasswordEncoder
: PasswordEncoder구현한 클래스중 하나입니다. 해시 함수로 특정 문자열을 암호화하기 때문에 암호화를 한 후에, 다시 원문으로 돌리지 못합니다. -
CustomUserDetailsService
: CustomUserDetailsService은 UserDetailsService를 구현하여 DB의 사용자 정보를 조회합니다.
: 유일한 메소드인 loadUserByUsername()는 UserDetails를 상속받아 만든 CustomUser를 반환합니다. -
CustomUser
: CustomUser는 조회한 사용자 정보를 담고있습니다.
: Spring Security에서 제공하고 있는 UserDetails를 구현한 여러 클래스 중에서 User클래스를 상속받았습니다. -
security-context.xml
: security-context.xml은 Spring Security와 관련된 설정을 담고 있습니다.
: AuthenticationSuccessHandler를 상속받아 로그인 성공 로직을 처리합니다.
: AuthenticationFailureHandler를 상속받아 로그인 실패 로직을 처리합니다. 로그인의 실패 원인을 알려줍니다.
: AccessDeniedHandler를 상속받아 권한이 없는 페이지에 대하여 접근 제한 로직을 처리합니다. -
MemberMapper
: MemberMapper.java - MemberMapper.xml의 구조를 가집니다.
-
-
상품의 CRUD
상품 CRUD 설명 펼치기:pushpin:
[ 기능 설명 ]
: 상품은 메인 이미지가 필수이며, 서브 이미지도 등록할 수 있습니다.
: 관리자만이 게시물을 등록, 수정, 삭제할 수 있으며, 누구나 조회할 수 있습니다.
: 상품은 통신사, 브랜드, 가격대별로 카테고리를 지정하거나 검색을 통하여 조회할 수 있습니다.
: 상품은 카카오톡 공유하기 기능이 가능합니다. (kakao Javascript SDK이용)[ 상세 구조 ]
-
ProductController
: 이미지는 C:\phoneMall\upload 폴더에 저장합니다.
: 배포 이후에서는 AWS S3에 저장합니다.(이에 관련한 코드는 deploy브랜치에서 확인할 수 있습니다.) -
BoardService
: ProductService.java - ProductServiceImpl.java의 구조를 가집니다. -
Mapper
: ProductMapper.java - ProductMapper.xml의 구조를 가집니다.
: ProductColorListMapper.java - ProductColorListMapper.xml의 구조를 가지며, 상품의 색상 테이블에 관한 쿼리를 처리합니다.
: ProductImageMapper.java - ProductImageMapper.xml의 구조를 가지며, 상품의 이미지 테이블에 관한 쿼리를 처리합니다.
-
-
리뷰와 답글의 CRUD
리뷰와 답글의 CRUD 설명 펼치기:pushpin:
[ 기능 설명 ]
: 제품을 구매한 회원은 리뷰를 등록, 수정, 삭제할 수 있습니다.
: 관리자는 리뷰에 대한 답글을 등록, 수정, 삭제할 수 있습니다.
: 리뷰와 답글에 대한 조회는 제품의 리뷰 탭 에서 누구나 가능합니다.
: 또는 MyReviews 탭에서 자신의 리뷰를 확인할 수 있습니다.[ 상세 구조 ]
-
ProductReviewRestController
: json를 반환하는 RestController를 사용하였고, View단에서 JQuery의 AJAX로 데이터를 주고 받습니다. -
ProductReviewController
: MyReviews 탭에서 자신의 리뷰를 모아서 확인합니다. -
ProductReviewService
: ProductReviewServie.java - ProductReviewServieImpl.java의 구조를 가집니다. -
Mapper
: ProductReviewMapper.java - ProductReviewMapper.xml의 구조를 가집니다.
: ProductMapper.java - ProductMapper.xml의 구조를 가지며, 상품 테이블의 리뷰 수와 평점을 업데이트하는 쿼리를 처리합니다.
: [PurchaseMapper]는 구매 테이블의 리뷰 작성 여부를 업데이트하는 쿼리를 처리합니다.
-
-
좋아요
좋아요 설명 펼치기:pushpin:
[ 기능 설명 ]
: 회원은 상품에 대한 좋아요를 눌러 WishList에 저장할 수 있습니다.
: WishList에서 좋아요를 취소할 수도 있습니다.-
UserRegisterController
: WishList를 조회하고 좋아요를 취소할 수 있습니다. -
WishListService
: WishListService.java - WishListServiceImpl.java의 구조를 가집니다. -
WishListMapper
: WishListMapper.java - WishListMapper.xml의 구조를 가집니다.
-
장바구니
장바구니 설명 펼치기:pushpin:
[ 기능 설명 ]
: 회원은 원하는 상품의 수량과 색을 지정하여 장바구니에 저장할 수 있습니다.
: 장바구니에서 담았던 상품을 삭제할 수도 있습니다.
: 쿠폰을 적용할 수 있습니다.
: 쿠폰을 적용한 최종 결제 금액을 알려줍니다.-
Service
: CartService.java - CartServiceImpl.java의 구조를 가집니다.
: CouponService.java - CouponServiceImpl.java의 구조를 가지며, 보유한 쿠폰을 조회합니다. -
Mapper
: CartMapper.java - CartMapper.xml의 구조를 가집니다.
: CouponMapper.java - CouponMapper.xml의 구조를 가집니다.
-
쿠폰의 등록과 조회
쿠폰의 등록과 조회 설명 펼치기:pushpin:
[ 기능 설명 ]
: 회원은 쿠폰을 등록할 수 있습니다.
: 등록한 쿠폰을 MyCoupon에서 조회할 수 있습니다.-
CouponService
: CouponService.java - CouponServiceImpl.java의 구조를 가집니다. -
CouponMapper
: CouponMapper.java - CouponMapper.xml의 구조를 가집니다.
-
구매
구매 설명 펼치기:pushpin:
[ 기능 설명 ]
: 카카오페이를 이용하여 상품을 결제할 수 있습니다.
: 장바구니에 있는 여러 상품들을 함께 주문할 수 있습니다.[ 상세 구조 ]
-
Controller
: KakaoPayController
: CartController는 주문번호를 랜덤으로 지정하고 장바구니에 있는 상품을 주문합니다. -
Service
: KakaoPayService.java - KakaoPayServiceImpl.java의 구조를 가지며, REST API를 사용하여 카카오페이 결제를 진행합니다.
: CartService.java - CartServiceImpl.java의 구조를 가지며, 주문할 장바구니 상품 목록을 조회합니다.
: CouponService.java - CouponServiceImpl.java의 구조를 가지며, 사용한 쿠폰의 상태를 used로 업데이트합니다.
: PurchaseService.java - PurchaseServiceImpl.java의 구조를 가지며, 주문 정보를 저장하고 조회합니다. -
Mapper
: PurchaseMapper.java - PurchaseMapper.xml의 구조를 가집니다.
: CartMapper.java - CartMapper.xml의 구조를 가집니다.
: CouponMapper.java - CouponMapper.xml의 구조를 가집니다.
-
-
구매 내역 조회
구매 내역 조회 설명 펼치기:pushpin:
[ 기능 설명 ] : 구매한 제품은 MyPurchase 에서 확인할 수 있습니다.
: MyPurchase에서 주문 번호를 클릭하여 주문 정보를 확인할 수 있습니다.[ 상세 구조 ]
-
PurchaseService
: PurchaseService.java - PurchaseServiceImpl.java의 구조를 가집니다. -
PurchaseMapper
: PurchaseMapper.java - PurchaseMapper.xml의 구조를 가집니다.
-
공지의 CRUD
공지의 CRUD 설명 펼치기:pushpin:
[ 기능 설명 ]
: 관리자는 공지를 등록, 수정, 삭제할 수 있고 누구나 조회할 수 있습니다.
: 공지는 이미지를 등록할 수 있습니다.-
NoticeController
: 이미지는 C:\phoneMall\upload 폴더에 저장합니다.
: 배포 이후에서는 AWS S3에 저장합니다.(이에 관련한 코드는 deploy브랜치에서 확인할 수 있습니다.) -
NoticeService
: NoticeService.java - NoticeServiceImpl.java의 구조를 가집니다. -
Mapper
: NoticeMapper.java - NoticeMapper.xml의 구조를 가집니다.
: NoticeImageMapper.java - NoticeImageMapper.xml의 구조를 가지며, 상품의 이미지 테이블에 관한 쿼리를 처리합니다.
-
-
문의 메일 전송
문의 메일 설명 펼치기:pushpin:
[ 기능 설명 ]
: 누구나 문의 메일을 보낼 수 있습니다.[ 상세 구조 ]
-
servlet-context
: Spring Framework가 제공하는 JavaMailSender 인터페이스의 구현체인 JavaMailSenderImpl클래스를 사용하여 빈을 등록합니다.
: * servlet-context 의 구글 비밀번호는 실제와 다릅니다. 때문에 코드를 그대로 실행할시 동작하지 않을 수 있습니다. -
MailSendController.java
: 단순한 텍스트만 전송하기 때문에 SimpleMailMessage을 이용하여 메일을 전송합니다.
-









