Giter VIP home page Giter VIP logo

make-delivery's Issues

MyBatis 연동

  • SqlSessionFactoryBuilder

는 개발자들을 위한 ,단순히 가독성을 좋은 소스코드를 작성하기위한

객체이다.

이 객체는 서버를 최초 1회 실행시에 SqlSessionFactory를 생성하는데 한번 쓰이고

사라지는 객체이다.

  • SqlSession

SqlSession이란 RDB에 인증을 거친 논리적인 연결 상태를 말하는 것이다

한번의 db 요청하려면 SqlSession를 사용해야한다.

Session이란 인스턴스안에 있는 논리적인 실체로 현재 유저의 로그인 상태를 말한다.

하나의 SqlSession을 만들기 위해서는 jdbc프로그래밍에서 필요한것처럼 기본적으로

  1. Url

  2. Id

  3. password

3개의 정보가 필요하고 그 이외에도 Mybatis에서는 캐싱정책의 사용유무, 지연 로딩 등등 많은 설정 정보들이 존재한다.

이러한 정보들을 SqlSession을 생성할때마다 전부 다시 정의하는 것은 매우 힘들다.

그렇기 때문에 이러한 설정값들을 한곳에 모아놓고 그 모아놓은 곳에서 객체를 가져오는 것이 효율적인데

이것이 SqlSessionFactory 이다.

SqlSessionFactory를 만들기위해서는 엄청 많은 정보들을 넣어줘야하는데 (id url AliasesPackage.....) 이 값들을 인스턴스를

사용해서 new SqlSessionFactory() 이렇게 만드는 거는 올바르지 않을 수 있다.

왜냐면 생성자 인자가 많은 경우에는 Constructor 방식은 가독성이 매우 떨어진다

그렇기에 이런경우에는 디자인패턴중에서 BuilderPattern을 사용하는데

이것이 SqlSessionFactoryBuilder이다.

출처: https://kimsoungryoul.tistory.com/43

OrderService 리팩토링

  • 단일 책임 원칙
  • 개방 폐쇄 원칙
    이 두가지가 완벽하게 지켜지지 않는 것 같아 코드 리팩토링을 진행합니다.

라이더 매칭 서비스 구현

라이더 정보는 자주 바뀌는 정보이고 이것을 매번 RDB에 접근하면 시간이 오래 걸리기 때문에 레디스에 저장하였습니다.

레디스에서 관리하는 정보
레디스 키 example

  • 경기도 고양시 일산동:STANDBY_RIDERS
    라이더가 출근신청을 하면 라이더의지역별로 출근한 라이더들의 아이디를 해쉬키로 토큰값을 해쉬밸류로 저장합니다. 라이더가 배달을 시작하면 토큰값을 삭제하고 배달을 완료할 시 토큰값을 다시 추가합니다.

  • 경기도 고양시 일산동:STANDBY_ORDERS
    사장님이 주문을 승인하면 그 주문목록은 같은지역 별로 배차 대기 주문목록에 들어갑니다. 라이더들은 이 대기 주문목록을 보거나 푸쉬알람을 받아서 배차를 신청합니다.


Use Case

  • 사장님

가게에서 사장님이 주문을 승인하면 그 주문은 그 지역(동)의 배차를 기다리는 레디스에 지역별 주문목록(Standby_Order)에 들어갑니다.

  • 라이더

사장님이 주문을 승인하면 같은지역에 출근해있고 배달중이 아닌 라이더들은 푸쉬알람을 받습니다.

같은지역(동)에 있는 라이더들은 같은지역(동)의 배차를 기다리는 주문목록 중 한개를 선택하여 배차를 신청할 수 있습니다. (배달중에도 신청가능)

  • 푸쉬알람

사장님이 주문을 승인하면 오늘 출근신청을 했고 지금 배달중이 아닌 같은지역의 라이더들에게 푸쉬 알람을 보냅니다.

라이더가 배차신청을 해 1건이라도 배달을 하면 라이더 토큰을 지우므로 더이상 푸쉬알람을 받지 않고 배달 완료시 푸쉬알람을 다시 받습니다.

  • FCM토큰

라이더가 오늘 출근 신청을하면 FCM토큰을 보내어 레디스에 지역별로 라이더 토큰을 저장합니다.

라이더가 배차신청을 하면 레디스에 지역별로 저장된 라이더 토큰은 지워집니다. (배달중이 아닌 라이더들에게만 푸쉬알람을 보냅니다.)

라이더가 배달을 완료하면 다시 레디스에 라이더의 지역에 라이더 토큰을 저장합니다.

주문 조회 로직

사용자 id로 조회 하므로 user가 사장님이든 고객이든 모두 조회 가능. session에서 user id를 받아올 것임.

결제 생성 조회 로직 구현

주문,결제를 하기 위해 장바구니를 조회하고 주문결제를 한트랜잭션에서 진행할 시 , 그 사이 다른 스레드들이 장바구니에 추가하거나 삭제하는 경우가 생길 수 있습니다. 이러한 현상은 장바구니의 불일치 문제를 일으키기 때문에 장바구니를 atomic하게 관리해야합니다. 따라서 주문,결제 트랜잭션안에서 장바구니를 조회하자마자 장바구니를 삭제하고 만약 주문 결제 트랜잭션이 커밋되지 않고 오류가 나 실패한다면 롤백이 되면서 장바구니에 원래 카트리스트를 바로 다시 복구시키는 방식으로 atomic을 보장하였습니다.

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.