Spring Boot 를 기반으로 구현한 간단한 쇼핑몰 웹 사이트
스프링, 스프링 부트, JPA, 시큐리티 등의 기술스택들을 이론적으로 학습한 뒤에
실제로 어떻게 동작하는지 이해하기 위해서
간단한 쇼핑몰 프로젝트를 구현해봄. 흔한 쇼핑몰 프로젝트일지라도 완성하는 것에 초점을 두지 않고, 사용되는 기술에 대한정확한 개념 및 사용법, 그리고 동작원리
에 대해서 초점을 맞추었고, 또한 개발 과정에서 맞이하는 에러 및 궁금증들을 자세하게 찾아보고 정리하면서 전체적인 흐름 파악을 목표로 두었으며 프론트보다는 백엔드에 좀 더 집중하였음.
회원 (Member)
- 회원가입 / 로그인 및 로그아웃
상품 (Item)
- 상품 등록 / 상품 관리 / 상품 수정 / 상품 조회 (메인화면) / 상품 상세 페이지
주문 (Order)
- 상품 주문 / 주문 내역 조회 / 주문 취소
장바구니 (Cart)
- 장바구니 담기 / 장바구니 조회 / 장바구니 삭제 / 장바구니 상품 주문
member - 쇼핑몰 회원 정보 테이블
cart - 회원의 장바구니 목록 테이블
cart_item - 장바구니에 담긴 상품 정보 테이블
orders - 쇼핑몰 회원들의 주문 목록 테이블
order_item - 주문된 상품 정보 테이블
item - 쇼핑몰 상품 정보 테이블
item_img - 상품에 대한 이미지 정보를 담고 있는 테이블
Function | Method | End Point | Function | Method | End Point | |
---|---|---|---|---|---|---|
회원 가입 페이지 | Get | /member/new | 상품 등록 페이지 | Get | /admin/item/new | |
회원 가입 | Post | /member/new | 상품 등록 | Post | /admin/item/new | |
로그인 페이지 | Get | /member/login | 상품 조회 | Get | /admin/item/{itemId} /admin/items /admin/items/{page} | |
로그인 | Post | /member/login | 상품 수정 | Post | /admin/item/{itemId} | |
장바구니 담기 | Post | /cart | 주문하기 | Post | /order | |
장바구니 페이지 | Get | /cart | 주문 내역 페이지 | Get | /orders, /orders/{page} | |
장바구니 상품 수정 | Patch | /cartItem/{cartItemId} | 주문 취소 | Post | /order/{orderId}/cancel | |
장바구니 상품 제거 | Delete | /cartItem/{cartItemId} | ||||
장바구니 상품 주문 | Post | /cart/orders |
프로젝트 Task 진행 및 과정에서 발생한 궁금증 및 에러에 대한 고찰 모음
Project Setting
Page Layout (header, footer)
Sign up & Login & Logout (Spring Security)
- Spring Security 개념 및 구조
- Spring Security 를 통한 로그인 원리
- thymeleaf-extras-springsecurity 동작 원리
- "AntMatchers" 에서 "Ant"의 의미
Auditing
- Auditing 동작 원리
Item Register & Update & Query & Details
- enum 클래스란?
- 상품 등록 구조, @NotBlank 지정 에러
- 입력값 검증 및 에러 메시지 표시 동작 원리
- JPA - 변경감지란?
- Optional Path Variable 이란?
- Get Method 와 Post Method 의 데이터 전달 방법
- Thymeleaf - T() 표현식
- file: URI 에 대한 궁금증
- Querydsl 사용자 정의 리포지토리 구현
Order & History & Cancel
- "order" 테이블 생성 시 발생하는 에러에 대한 원인분석과 해결방법
- JPA - save() 와 saveAndFlush() 의 차이
- JPA - 양방향 매핑에서의 연관 관계 주인
- batch_fetch_size 지정 (지연로딩)
Cart & List & Delete & Order
- 자기 자신을 List로 가지고 있는 클래스
- 장바구니 목록 조회 @Query SQL문 분석 및 이해
- Junit - @Autowired 는 필수인가 ?
일상에서 당연하게 사용하고 있던 로그인, 상품주문, 장바구니 등의 기능들을 실제로 구현하려고 하니 엄청 복잡하게 느껴졌고 이해하는데 어려움이 많았지만, 작은 단위의 기능부터 시작해서 로직의 전체적인 흐름을 따라서 구현해보니 Spring 웹 개발에 대한 전체적인 흐름을 파악할 수 있었음. 프로젝트를 마무리하고 난 후에 웹 개발에 대한 자신감이 어느정도 생겼고 다음 프로젝트 개발에 대한 도전 욕구가 생김
멋지십니다!! 사이드 프로젝트로 저도 만들고 있는데, 많은 도움 받고 갑니다!