View Code? Open in Web Editor
NEW
[초봉 4000 이상 신입 -> 이후 카카오스타일 이직] Shopping mall Server.
Home Page: http://intro.f-lab.kr
License: MIT License
open-market-server's Introduction
- Commerce 가 제공하는 기능들을 직접 구현함으로써 Commerce 도메인을 이해하자
- 대규모 트래픽에도 견고한 어플리케이션을 구현하자
- 상품조회, 구매
- 장바구니
- 회원정보 수정, 회원 탈퇴
회원 데이터에 대한 접근 분리 (회원/관리자)
- 회원 정보를 같은 컨트롤러에서 처리 시 회원이 엔드포인트에 접근하는 경우 발생
- 복잡해지는 인가 로직 -> 컨트롤러 분리
- 회원은 회원 id(PK)값으로 접근하는 것이 아닌 Session 에서 현재 사용자를 불러와 접근
- Adapter 패턴을 이용하여 Account 객체를 스프링 시큐리티가 알고있는 UserDetails로 구현
- User(UserDetails 구현체)를 통해 DB에서 Account를 불러오는 과정을 생략 할 수있음 -> DB에 대한 부하를 줄일 수 있었다
- 관련 포스팅 : @AuthenticationPrincipal - 현재 사용자 조회하기
- 비밀번호와 같이 중요한 개인정보가 Response Message 에 포함되어 주고받는 문제
- TODO
![](UML.jpg)
- 고객
- 고객은 상품조회 및 상품구매를 위해 회원가입, 회원수정, 회원탈퇴를 할 수 있다.
- 고객은 어떤 상품을 구매할지 보기 위해 (랭킹, 가격, 등록) 등의 옵션으로 상품목록를 카테고리별로 볼 수 있다.
- 고객은 카테고리별로 브랜드 비교를 위해 브랜드 목록을 볼 수 있다.
- 고객은 원하는 특정 물건을 구매하기 위해 검색을 통해 물건을 판매하는 판매자의 목록을 불러올 수 있다.
- 고객은 최종 구매 전 상품비교 등을 목적으로 장바구니를 통해 원하는 상품을 구매 전에 확인 할 수 있다.
- 판매자
- 판매자는 상품 판매를 위해 물건을 등록, 수정, 삭제 할 수 있다.
- 판매자는 상품 판매를 촉구하기 위해 물건에 대한 광고 및 이벤트를 진행 할 수 있다.
- 관리자
- 관리자는 회원관리를 위해 고객/판매자의 상태를 관리 할 수있다.
open-market-server's People
Contributors
Watchers
open-market-server's Issues
- 상품 엔티티 개발
- 상품 레포지토리 개발
- 상품 서비스 개발
- Client측에서 Account에 대한 CRUD 에 접근하기 위한 resource 제공
- Spring HATEOAS를 통해 구현
- account.insertOrder(order); 오류 처리
- 디버깅 후 select -> insert 시 수정
Trade-off에 대한 내용들 정리해서 README에 담기
authentication & authorization
- Spring security oauth2 적용
- grantType : password
- tokenStore : redis
- 권한에 따라 CRUD 로직 추가
배송정보와 다르게 상품은 상품이 주문될 때 만들어지는 것이아니라 이미 저장돼있는 아이템들을 불러와 처리
- 주문 ID를 통해 주문을 조회 -> 결제, 주문상품 조회
- 결제완료 로직
- 재고차감 로직
위 공통 로직을 추출
- 자주 조회 or 구매되는 상품에 대해 cache 적용
- Simple Account CRUD
- Spring Security : authentication / authorization
- Spring session : JVM -> Redis
- Redis 스케쥴링을 통한 장바구니 로직 개발
- 상품 도메인에 컨트롤러 붙이기
- 테스트코드 작성
- Account 객체 내 필드들에 대한 적절한 Validation 처리
- 해당 Validation에 대한 테스트코드 작성하기
Type = org.springframework.data.redis.serializer.SerializationException
임시로 TokenStrore : Redis -> JVM 변경상태
- 주문 엔티티 개발
- 주문 레포지토리 개발
- 주문 서비스 개발
- 주문 컨트롤러 개발
- 테스트코드 작성
- Getter에만 적용하는 방법 공부하기
- 메시지 마스킹 처리하는 방법 공부하기
- 단순히 결제 상태( 결제 전, 결제 완료, 환불 처리 등)를 가지고 있을 것인지
- 결제 종류 (모바일, 계좌이체, 카드 등)
- 결제 종류에 따른 정보들 처리 (모바일이면 휴대폰 번호, 계좌이체면 계좌 정보 등)
결제시스템에 대해 공부..
- MySQL 적용하기
- 스키마 포함 소스에 같이 올리기
- 단위테스트 추가
- Jenkins 적용 (테스트 자동화)
public Item saveItem(ItemDto itemDto) {
Item item = itemDto.toEntity();
List<ItemCategory> itemCategories = item.getItemCategories();
//TODO
for (ItemCategory itemCategory : itemCategories) {
itemCategory.setItem(item);
Category category = itemCategory.getCategory();
category.getItemCategories().add(itemCategory);
}
return itemRepository.save(item);
}
AccountDto <-> Account 사이에 Circular Dependency 로직
- 불필요한 필드, 메서드, import 제거
- 변수, 메서드 이름 재검토
(사용자)는 (가치)를 위해 (기능)을 할 수 있다.
사용자