Giter Club home page Giter Club logo

double-shop's Introduction

Double-Shop

architecture drawio

프로젝트 목표

  • coupang, 마켓컬리와 같은 이커머스 기반 서비스를 개발하는 것이 목표인 프로젝트 입니다.
  • 애플리케이션 프로토타입은 카카오 오븐을 사용하였습니다.
  • 기능 개발에 더불어, 코드의 재사용성 및 유지보수 효율성 확보하는 것을 목표로 개발을 하고 있습니다.
  • CI/CD를 통한 자동화를 구현하여, 협업에 용이한 프로젝트를 구성하였습니다.

사용한 기술 & 개발 환경

  • JAVA 11
  • SpringBoot
  • SpringSecurity
  • Maven
  • MySQL
  • MyBatis
  • Redis

프로토타입

ERD

erd

Project Wiki

double-shop's People

Contributors

f-lab-bot avatar wannidev avatar wilco82 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

double-shop's Issues

ERD 정리

현재 테이블 진행상황

  • wannidev : 배송, 배송기사, 배송정책, 배송주소, 쿠폰, 쿠폰관리, 상품옵션, 주문상품, 상품, 상품 카테고리, 카테고리, 배송정책, 상품리뷰 및 테이블 취합
  • wilco82 : 회원, 약관, 약관 동의목록, 주문, 주문 상세/결제/주문/취소/ 반품/교환

진행 중 수정사항

  • wilco82님 테이블 중 컬럼 네이밍 수정(무의미한 타이핑 줄이는 게 목적.) 및 pk,fk int -> bigint로 수정 (pk, fk는 생각보다 빠르게 소진됨.)
  • order_details 테이블의 컬럼 일부를 orderitem 테이블로 이동하는 걸 권장 (현재 테이블 구조로는 하나의 주문에 하나의 상품만 구매할 수 있음. fk만 모아둔 테이블에 주문 프로세스를 담아, 하나의 주문(fk)에 여러 상품(fk)를 담을 수 있는 형태로 진행해야함.)
  • 주문에 option을 참조하는 것보단, item을 참조하는 것을 권장.(option을 참조하면, item에는 하나의 option만 적용할 수 있는 구조가 됨. 상품 옵션 적용에 제한이 생김.)
  • datetime과 다르게 timestamp는 데이터 입력이 없어도 현재 날짜,시간을 자동으로 입력해주는 이점을 고려하여, datetime으로 선언하신 컬럼은 timestamp로 수정.
  • varchar로 선언한 부분은 우선 문자열 갯수를 50으로 통일. 가변 문자열이기도 하고, 약관과 같이 다량의 텍스트가 들어간 부분은 varchar 보다는 다른 text는 어떨지(둘다 가변 데이터인데, text는 길이를 고려하지 않아도 되는 가변 문자열 타입.)

리팩토링: myBatis -> JPA

  • 학습 상황에 따라, 기존 코드에 대한 문제점(트랜잭션 분리 및 무분별한 테이블 조회 쿼리 남용 등등)이 발견되어 주기적으로 리팩토링이 필요한 시점이 생겼다.
  • 그런데, myBatis 특성상, 변경이 매우 번거롭다.
  • 그리고, 릴레이션과 객체의 구조적 차이로 인해, 일부 애플리케이션 코드를 POJO 스타일로 구현하지 못하는 경우가 발생.
  • 이는 좋은 객체지향 언어를 사용함으로서 얻을 수 있는 이점 중 하나인, '높은 유지보수 효율성 확보'를 포기하게 되는 상황이 발생한다고 생각했다.
  • 따라서, 기존 데이터 액세스 코드를 jpa와 같은 orm으로 변경하여, 코드 확장에 좀더 용이한 구조로 변경.

배송 관리 서비스

구현 목록

  • 배송등록, 수정, 검색(단건, 목록)

우선은 기본적인 기능을 구현하고, 나중에 보충

배포 준비: Test 서버 구축

개요

  • CI를 통해 증명할 수 있는 것은, 애플리케이션 코드가 제대로 컴파일 되는지, 혹은 논리적으로 잘 동작하는지에 대한 부분밖에 없다.
  • 그런데, 코드가 논리적인 것과 도메인의 서비스 성격에 맞게 동작하는 것과는 별개의 문제일 수 있다.
  • 따라서, QA 테스트를 할 수 있는 환경이 필요하다고 판단하여, 다음과 같은 이슈를 할당하게 되었다.

장바구니 서비스 구현

사용자(소비자)가 상품을 고르고 주문 서비스를 이용하기 위해선, 장바구니를 확인하여, 주문을 요청할 수 있는 기능이 필요하다.

Member 도메인 리팩토리 내역

패키지 이동

  1. 시큐리티 설정파일: web.config.security 로 이동

    • EntryPointUnauthorizedHandler
    • SimpleAccessDeniedHandler
    • Role
    • SimpleAuthentication
    • SimpleAuthenticationProvider
    • SimpleAuthenticationToken
    • SimpleAuthenticationTokenFilter
    • SimpleToken
    • SimpleTokenConfigurer
    • UriBasedVoter
    • WebSecurityConfigurer
    • web.security.redis.*
  2. 인증관련 dto: web.member.dto로 이동

    • AuthenticationRequest
    • AuthenticationResult
    • AuthenticationResultDto
    • JoinRequest
    • JoinResult
    • MemberDto

override 되거나, 교체된 기능

  1. com.project.doubleshop.domain.member.entity.v2.member
    • count, status, statusUpdateTime, createTime 필드 추가
    • status(다른 패키지), Authority, Grade, Type 필드 삭제
    • login , afterSuccessLogin 비즈니스 로직 추가
    • 기존 member 도메인 삭제
  2. MemberInfoMapper, MemberInfoRepository, MyBatisMemberInfoRepository, LogInService, MemberService, MemberServiceImpl 삭제
  3. MemberController 삭제
  4. 기존 member test 삭제
  5. SHA256EncryptionUtil은 SHA256 자체가 안정한 인코더는 아니라고 판단하여, Security의 Bcrypt로 교체
  6. LoginMemberArgumentResolver, LoginCheckInterceptor 삭제(이 기능은 추후 securityContext로 대체)
  7. 기존 member dto 삭제
    • LoginRequestDto, MemberFindRequestDto, MemberFindResponseDto, MemberInfoDto, PasswordChangeRequestDto 삭제
  8. 기존 mapper.xml 삭제
    • memberMapper.xml 삭제

통합 테스트 환경 구성

TODO

  • h2 db는 테스트를 할 때만 사용하도록 설정하기.
  • 적용한 후, 테스트를 진행할 때만 h2 db가 사용되는지 확인하기.

세션 관리 정책

  • 토큰 기반 인증으로 진행
  • session id가 아니라, x-auth-token 헤더에 토큰 값을 포함하여, 인증서버를 통해 인증 시도.
  • 토큰 지속시간은 기본적으로 30분이다.
  • 지속시간은 지속시간이 10분 이하로 남은 상태에서 인증을 시도할 경우, 30분으로 초기화된다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.