❗ 현재 요금문제로 AWS EC2, RDS 인스턴스를 모두 중지한 상태라 테스트는 불가합니다. ❗
- 도서 쇼핑몰 사이트 API 개발
- 영풍문고의 나우드림 서비스를 이용할 때, 재고보다 (실시간으로) 구매하려는 사람이 더 많을 경우 문제가 발생할 수 있습니다.
- 프로젝트를 진행하며 동시성 문제를 해결하고, 이 외에 다른 API도 구현하며 다양한 기술을 학습하는 목적으로 기획했습니다.
나우드림 : 온라인 할인이 적용된 도서를 주문하고, 매장에서 직접 수령하는 서비스입니다.
- 22.12.19 - 23.01.23
- 요청 성공 시 dto.common.ApiResponse로 응답합니다.
- 예외 발생 시 ResponseEntity로 응답합니다.
- 이메일 중복 시 예외를 발생시킵니다.
- 비밀번호는 bcrypt를 이용해 암호화한 뒤 DB에 저장합니다.
- 가입된 이메일인지 확인합니다.
- 입력된 비밀번호와 유저 비밀번호가 일치하는지 확인합니다.
- 위 조건을 다 통과하면 JWT 토큰과 함께 응답합니다.
- 쿼리스트링 방식으로 sub-category, order, page 값을 요청받습니다.
- 서브카테고리가 존재하지 않을 경우 예외를 발생시킵니다.
- order 값이 잘못된 경우 예외를 발생시킵니다.
- 정렬 기준은 type/Order에 enum으로 정의했으며, 속성으로 Sort 객체를 정의합니다.
- 조건에 맞는 책리스트를 반환합니다.
order value
- new : 최신순
- high : 높은 가격순
- low : 낮은 가격순
- bestseller : 판매순
-
docker를 이용해 ElasticSearch, nori 설치 및 연동
- title, authors 두 필드에 nori를 설정해 주었습니다.
-
쿼리스트링 방식으로 keyword, page 값을 요청받습니다.
-
keyword(도서 or 작가)를 포함하는 책 리스트를 반환합니다.(ES 조회)
5. 장바구니 - 상세보기
- 장바구니에 도서 추가, 수량 업데이트, 삭제 기능
- 장바구니 조회, 전체 삭제 기능
- 장바구니 기능은 로그인한 유저만 사용이 가능합니다.
6. 나우드림 - 상세보기
- 나우드림 주문 기능
- 매장별 재고 조회 기능
- 나우드림 주문 기능은 로그인한 유저만 사용이 가능합니다.
- 로그인한 유저만 나우드림 이용이 가능합니다.
-
주문 내역 조회 관련 기능은 로그인한 유저만 사용이 가능합니다.
-
order_info 테이블의 주문일자(order_date)에 index를 설정했습니다.
-
쿼리스트링 방식으로 start-date, end-date, page 값을 요청받습니다.
- 설정한 기간(start-date ~ end-date)의 주문내역을 조회할 수 있습니다.
-
주문 상세내역 조회는 order_info_id를 요청받으며, 이에 해당하는 상세내역을 조회할 수 있습니다.
- 도서 등록 시 RDB와 ES에 저장되며, 트랜잭션을 적용했습니다.
- 도서 등록 기능은 관리자만 사용이 가능합니다.
기능에 대한 요청 & 응답을 자세히 확인할 수 있습니다.
!!! 혹시 500에러가 뜬다면 새로고침을 여러 번 시도해 주시면 됩니다.. !!!
https://documenter.getpostman.com/view/17844607/2s8ZDbWLSy
.
├── Dockerfile
├── docker-compose.yml
└── src
├── main
│ ├── generated
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── bookstore
│ │ ├── BookstoreApplication.java
│ │ ├── config
│ │ │ ├── JasyptConfig.java
│ │ │ ├── JpaAuditingConfig.java
│ │ │ ├── RedissonConfig.java
│ │ │ ├── SecurityConfig.java
│ │ │ ├── elasticsearch
│ │ │ │ ├── AbstractElasticsearchConfiguration.java
│ │ │ │ └── ElasticSearchConfig.java
│ │ │ └── jwt
│ │ │ ├── CustomAuthenticationEntryPoint.java
│ │ │ ├── JwtAuthenticationFilter.java
│ │ │ └── JwtTokenProvider.java
│ │ ├── controller
│ │ │ ├── BookController.java
│ │ │ ├── CartController.java
│ │ │ ├── NowDreamController.java
│ │ │ ├── OrderController.java
│ │ │ └── UserController.java
│ │ ├── dto
│ │ │ ├── Token.java
│ │ │ ├── common
│ │ │ │ ├── ApiResponse.java
│ │ │ │ └── ErrorResponse.java
│ │ │ ├── condition
│ │ │ │ ├── BookCondition.java
│ │ │ │ ├── CartItemCondition.java
│ │ │ │ ├── NowDreamStockCondition.java
│ │ │ │ ├── OrderDetailCondition.java
│ │ │ │ └── OrderInfoCondition.java
│ │ │ └── request
│ │ │ ├── BookRequest.java
│ │ │ ├── CartUpdateRequest.java
│ │ │ ├── LoginRequest.java
│ │ │ ├── NowDreamOrderRequest.java
│ │ │ └── RegisterRequest.java
│ │ ├── entity
│ │ │ ├── BaseEntity.java
│ │ │ ├── Book.java
│ │ │ ├── BookDocument.java
│ │ │ ├── CartItem.java
│ │ │ ├── Category.java
│ │ │ ├── OrderDetail.java
│ │ │ ├── OrderInfo.java
│ │ │ ├── Store.java
│ │ │ ├── SubCategory.java
│ │ │ └── User.java
│ │ ├── exception
│ │ │ ├── CustomException.java
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── repository
│ │ │ ├── BookRepository.java
│ │ │ ├── BookSearchRepository.java
│ │ │ ├── CartItemRepository.java
│ │ │ ├── OrderDetailRepository.java
│ │ │ ├── OrderInfoRepository.java
│ │ │ ├── StoreRepository.java
│ │ │ ├── SubCategoryRepository.java
│ │ │ └── UserRepository.java
│ │ ├── service
│ │ │ ├── BookService.java
│ │ │ ├── CartService.java
│ │ │ ├── NowDreamService.java
│ │ │ ├── OrderService.java
│ │ │ ├── UserDetailsServiceImpl.java
│ │ │ └── UserService.java
│ │ └── type
│ │ ├── ErrorCode.java
│ │ ├── Order.java
│ │ ├── ResponseCode.java
│ │ └── UserRole.java
│ └── resources
│ ├── application.yml
│ ├── elastic
│ │ ├── book-mapping.json
│ │ └── book-setting.json
│ ├── static
│ └── templates
└── test
└── java
└── com
└── example
└── bookstore
└── service
├── BookServiceTest.java
├── CartItemServiceTest.java
├── NowDreamServiceTest.java
├── OrderServiceTest.java
├── UserDetailsServiceImplTest.java
└── UserServiceTest.java