Code Monkey home page Code Monkey logo

mewsinsa's Introduction

MEWSINSA

온라인 편집샵 무신사 서비스를 클론하여 만든 API 서버입니다.

✨  프로젝트 구조도

image
  • 로컬에서는 Redis를 JWT 저장소로 사용하고 있지만, 배포 버전에서는 MariaDB에 JWT를 저장하고 있습니다.
    • 추후 Docker를 통해 Redis를 연결하려는 계획을 하고 있습니다.
  • Jenkins로 CI/CD 파이프라인 구축을 시도하고 있습니다.

✨  사용 기술

Framework

Build Tool

DBMS

redis

Deployment

✨ ERD

ERD CLOUD 바로가기 primary_mewsinsa

✨  API 명세

Wiki API Design 보러가기

✨  프로젝트 중점 사항

  • 무신사의 상품 전시, 프로모션, 주문, 배송 정책을 분석/설계/구현하며 리테일 서비스에 대한 전반적인 이해를 목적으로 진행하였습니다.
  • Spring Security를 이용하지 않고 직접 Jwt 인증을 구현함으로써 Jwt 인증 프로세스를 정확히 이해하고자 하였습니다.
  • Lombok 라이브러리를 쓰지 않고 직접 getter, setter, constructor, builder 등을 구현함으로써, Lombok 라이브러리의 내부 동작을 이해하고자 하였습니다.
  • 커밋 컨벤션을 준수하고, 이해하기 쉬운 문서(README.md, Wiki) 작성에 집중하였습니다.

프로젝트 위키

프로젝트에 대한 자세한 내용은 Project Wiki에서 확인하실 수 있습니다.

mewsinsa's People

Contributors

clean2001 avatar f-lab-rey avatar f-lab-bot avatar

Stargazers

chanhyeoKingOfDev avatar  avatar

Watchers

 avatar

mewsinsa's Issues

로그인, 회원가입

인증, 인가와 관련된 기능을 구현합니다.

로그인

카카오 소셜 로그인

  • 카카오를 통해 얻어온 회원의 이메일을 통해서 가입된 회원인지 확인합니다.
    • 미가입 회원이라면 회원가입 창으로 이동합니다.
    • 가입 회원이라면 로그인 처리합니다.

JWT 로그인

쿠폰 관련 기능

쿠폰 관련 기능

쿠폰 발급

  • 회원은 startedAt < 현재 시간 < expiredAt 에 해당하는 쿠폰을 발급받을 수 있습니다.

주문시 쿠폰의 사용

  • 주문시에 발급 받은 쿠폰을 사용할 수 있고, 사용하면 DB Issued_coupon 테이블의 is_used 값을 true로 바꾸어 주며, usedAt 값에 주문시각을 넣어줍니다.
  • 회원이 주문시에 쿠폰을 사용할 때, 해당 회원이 그 쿠폰을 발급 받았는지 검증하는 내용이 필요합니다.

쿠폰이 적용된 상품의 주문 취소/환불

  • 회원이 해당 쿠폰이 적용된 상품을 취소/환불하면 is_usedfalse로, usedAt은 null로 바꾸어 줍니다.
  • 회원은 해당 쿠폰을 다시 사용할 수 있습니다.

만기된 쿠폰의 삭제

  • 매일 오전 3시에 스프링 배치를 통해 expiredAt > 현재시간인 쿠폰들을 DB의 coupon 테이블과 issued_coupon 테이블에서 삭제해주려고 합니다.

AWS 배포 설정

AWS 배포를 위해 application-aws.yml 또는 application-aws.properties를 추가합니다.

상품 등록, 수정, 삭제하기

관리자가 쓸 수 있는 기능인 상품 등록, 수정, 삭제 API를 구현합니다.

상품 등록

  • 관리자는 새로운 상품을 등록할 수 있습니다.
  • 새로운 상품과 함께 그 상품의 옵션들도 같이 등록됩니다.

상품 수정

  • 관리자는 등록된 상품의 정보를 수정할 수 있습니다.
  • 관리자는 등록된 상품 옵션 정보를 수정할 수 있습니다.

상품 삭제

  • 관리자는 상품을 삭제할 수 있습니다.
  • 상품이 삭제되면, 그 옵션들도 함께 삭제 됩니다.

액세스 토큰의 저장 위치를 MariaDB -> Redis로 변경

기존 인증/인가를 위한 액세스 토큰의 저장소는 MariaDB의 access_token 테이블이었습니다.
하지만 인가가 필요한 요청이 들어올 때마다(즉, @Auth가 붙은 메소드가 호출될 때마다) 디스크에 위치한 데이터베이스에 접근하는 것은 비효율적이라고 생각하였습니다.
따라서 액세스 토큰의 저장소를 레디스로 변경함으로써, 액세스 토큰 정보에 빠르게 접근하여 요청을 처리하는 속도를 개선해보고자 합니다.

프로젝트 생성

프로젝트 설정

  • Gradle-Groovy
  • Java 17
  • Spring Boot 3.2.4
  • Jar

패키지 명

  • Group: com
  • Artifact: mewsinsa
  • Name: mewsinsa
  • Package Name: com.mewsinsa

의존성

  • Spring Web
  • Mybatis framework
  • MariaDB Driver

프로모션과 쿠폰 등록, 조회 기능

관리자가 쓸 수 있는 기능인 쿠폰, 프로모션 등록 기능과
일반 회원이 쓸 수 있는 기능인 진행중인 쿠폰, 프로모션 리스트를 조회하는 기능을 구현합니다.
또한, 프로모션과 쿠폰 정보가 적용된 상품 디테일 정보, 특정 상품에 적용 가능한 쿠폰 리스트를 조회하는 기능을 구현합니다.

프로모션, 쿠폰 관련

쿠폰 등록

  • 관리자는 새로운 쿠폰을 등록할 수 있습니다.

프로모션 등록

  • 관리자는 새로운 프로모션을 등록할 수 있습니다.

배포 중인 모든 쿠폰 조회

  • 회원은 받을 수 있는(기한이 남은) 쿠폰들을 조회할 수 있습니다.
  • 쿼리 파라미터로 페이지 정보를 전달받아 30개씩 리턴합니다.

진행 중인 프로모션 목록 조회

  • 회원은 진행중인 프로모션(이벤트)들을 조회할 수 있습니다.
  • 쿼리 파라미터로 페이지 정보를 전달받아 10개씩 리턴합니다.

상품 관련

상품 1개 조회

  • 상품의 상세 정보를 리턴합니다.
  • 프로모션이 적용된 가격, 쿠폰으로 할인 받을 수 있는 가격을 함께 리턴합니다.

상품에 적용 가능한 쿠폰 리스트 조회

  • 특정 상품에 적용 가능한 쿠폰 리스트를 리턴합니다.
  • 쿼리 파라미터로 페이지 정보를 전달받아 5개씩 리턴합니다.

주문 관련 기능 구현

구현할 내용

일반 회원

  • 주문하기
  • 주문 취소하기
  • 특정 회원의 모든 주문 이력 조회
  • 주문서에서 배송지, 수령자 정보 변경
  • 주문 이력 테이블 조회

관리자

  • 모든 주문서 조회(Paging)
  • 특정 주문 내역 조회

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.