Coder Social home page Coder Social logo

sell-everything's Introduction



❓ Sell-Everything

  • 구매자와 판매자의 매칭을 통해 중고 물품을 거래하는 중고 물품 거래 서비스 플랫폼입니다.
  • 백엔드 개발에 좀 더 집중하기 위해, 서비스의 UI는 카카오 오븐 프로토타입으로 대체하였습니다.
  • 단순한 기능 개발보다, 분산 서버 환경에서 일어날 수 있는 다양한 이슈를 해결하며 서버의 성능을 개선하고, 유지보수성 높은 프로그램을 작성하기 위해 고민하며 개발하였습니다.

🏗️ System Architecture

server-architecture


✏️ 프로젝트 주요 관심사

  • 객체지향 특성과, 설계 원칙을 적용하여 낮은 결합도 & 높은 응집도를 가진 프로그램 설계
  • 백엔드 환경에서 발생할 수 있는 성능 저하 요소 분석 및 코드 개선을 통한 성능 튜닝
  • 테스트 자동화 및 지속적 배포/통합 프로세스를 적용하여 애자일 기반 프로젝트 진행
  • 이슈 기반의 일감 관리와 Pull-Request & 코드리뷰 기반의 점진적 프로그램 개발
  • 커밋 메시지 컨벤션을 적용하여 읽기 쉬운 작업 이력 생성
  • Git-flow를 적용한 전략적 브랜치 관리

📽️ Application UI


🌐 기술 및 개발 환경

  • IntelliJ
  • Spring Boot
  • Maven
  • MySQL
  • MyBatis
  • Redis
  • JUnit
  • Jenkins

🤔 프로젝트 진행 중 고민한 Technical Issues

  1. 분산 서버 환경의 세션 정합성 관리
  2. Redis 캐시를 통해 읽기 성능 향상하기
  3. 그래서 DispatcherServlet이 대체 뭐하는 녀석이죠?
  4. Docker를 이용해 스프링부트 앱 배포하기

📜 Wiki

  3. Schema

  4. ERD

sell-everything's People

Contributors

wooyounggggg avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

saintyun

sell-everything's Issues

[#20] 프로토타입 앱 기능 확장

앱 기능이 비즈니스 요구사항을 구현하기에는 부족한 측면이 있어, 기능을 확장하고자 해당 이슈를 발행하였습니다.
아래는 카카오 오븐 기능 확장 목록을 나타냅니다.

  • 구매자 - 판매자 매칭 시스템
  • 프로필 상세보기
  • 인앱 결제

구매자와 판매자의 매칭 시스템

구매자가 마음에 드는 상품을 선택하여 거래를 신청하고 판매자가 해당 신청을 수락하는 경우, 다른 구매자들의 신청 목록은 대기열에 위치합니다. 이후 판매자가 구매자와의 거래를 마쳐 정상적으로 거래가 완료되면, 대기열에 대기중이던 다른 구매자들의 구매 신청 데이터는 삭제됩니다.

프로필 상세 조회

상대방 또는 자신의 프로필을 조회하기 위한 기능입니다.

인앱 결제

요청이 수락된 상품에 대하여, 구매자는 판매자와의 인앱 결제를 진행할 수 있습니다.
단, 이는 프로토타입 수준에서 진행되므로 실제 결제를 진행하지는 않고 Mock API를 호출하는 형태로 진행합니다.

[#19] 패키지 구조를 도메인 기준으로 수정하기

코드 관리 측면 및 MSA 적용, Transaction 관리 측면에서 도메인 기반으로 패키지를 구분하는 것이 낫다고 생각하여 패키지 구조를 수정합니다.

  • Spring MVC directory structure best practice 찾아보기
  • 찾아본 practices 중 현재 서비스에 적합한 구조를 찾아 적용하기

[#21] 게시글 좋아요 기능 구현

게시글 좋아요 기능을 구현합니다

  • 게시글 상세 조회시, 게시글을 좋아요 한 사용자 및 횟수 가져오기
  • 게시글 목록 조회시, 게시글 좋아요 클릭 횟수 함께 가져오기
  • 좋아요 클릭 시, 게시글의 좋아요 데이터 업데이트
    • 좋아요 등록
    • 좋아요 제거
    • 좋아요 등록 / 삭제 시 게시글 좋아요 count update

[#4]로그인 기능 구현

  • 로그인 Controller, Service, DAO 작성
    • signIn
    • 쿼리 작성
    • 로그인 성공시 session 설정
  • Postman을 통해 API 동작 확인
  • SignInRequestDTO 개발

[#22] 게시글 댓글 조회 기능 구현

게시글 댓글 달기 기능을 구현합니다

  • 게시글 상세 조회시, 댓글 가져오기 API 구현
  • 게시글 목록 조회시, 댓글 갯수 함께 가져오기

[#2]회원가입을 위한 사용자 DTO 구현

  • 사용자 스키마 정의
    • Schema wiki에 추가하기
    • Readme wiki란에 해당 내용 링크 걸어두기
  • MySQL 사용자 DB 설정
  • 사용자 DTO 정의
    • getter/setter 설정을 위한 Lombok 디펜던시 설정

[#26] 게시글 상품 상태 변경

상품의 구매요청 상태를 변경하여, 사용자의 구매 요청에 대한 흐름을 제어합니다.

  1. 상품의 구매 요청이 이미 존재하면, 다른 사용자는 해당 상품에 대한 구매 요청을 할 수 없습니다.
  2. 상품의 구매 요청이 존재하지 않는다면, 해당 상품에 대한 구매 요청을 할 수 있습니다.
  • 구매요청 등록 API 구현
  • 구매요청 삭제 API 구현
  • 게시글 조회시 구매요청 상태 데이터를 함께 가져오도록 수정

[#18] Post Update 구현

게시글 수정 기능을 구현합니다.

  • UPDATE 기능에 대한 각 Layer 기능 구현
  • Update시 Cache Eveict 적용하기

[#9] Post READ 개발

게시글 조회 기능 구현하기

  • 단일 데이터 로드
  • 다중 데이터 로드(List)

[#17] Post Delete 구현

게시글의 삭제 기능을 구현합니다.

  • DELETE 기능 구현을 위한 각 Layer 기능 구현
  • Delete시 Cache Evict 적용하기

[#3]회원가입 로직 구현

  • 회원가입 요청에 대한 Controller-Service-DAO(Mapper) 구조 구현
  • 회원가입 요청에 대한 각 단계별 Test 생성하기 -> Validation으로 대체
  • DB 설정 및 Postman을 통한 통신 확인
  • DAO의 정상적인 DB 접근 확인
  • 각 상황에 맞게 response status code return하기
    • 200 OK
    • 그외 에러코드 추가

[#27] 1대1 채팅 구현

사용자가 다른 사용자에게 채팅을 요청하면, 1대1 채팅이 가능합니다.
기능을 구현하기 위해, 웹 소켓에 대해 공부하고 채팅 API를 개발합니다.

  • 웹 소켓 공부하기 및 정리(for 기술 포스팅)
  • 공부한 내용을 바탕으로 적용하여 채팅 구현하기
  • 채팅 테스트

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.