Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

challenge-cafe-java

챌린지 서버 개발 과제 커피 주문 시스템 자바

챌린지 내용

서비스 설명

  • 커피숍 주문 시스템을 구현해 봅시다.
  • 커피 주문에 필요한 메뉴를 구성하고 조회가 가능해야 합니다.
  • 커피 주문은 포인트로 가능합니다.
  • 커피 주문내역을 통해 인기있는 메뉴를 추천합니다.

요구사항

  • 작성하신 어플리케이션이 다수의 서버에 다수의 인스턴스로 동작하더라도 기능에 문제가 없도록 설계되어야 합니다.
  • 각 기능 및 제약사항에 대한 단위테스트를 반드시 작성합니다.
  • 동시성 이슈를 고려하여 구현합니다.
  • 데이터 일관성을 고려하여 구현합니다.

API 설명

  • 커피 메뉴 목록 조회 API
    • 커피 정보(메뉴ID, 이름, 가격)을 조회하는 API를 작성합니다.
  • 포인트 충전 하기 API
    • 결제는 포인트로만 가능하며, 포인트를 충전하는 API를 작성합니다.
    • 사용자 식별값, 충전금액을 입력 받아 포인트를 충전합니다. (1원=1P)
  • 커피 주문/결제 하기 API
    • 사용자 식별값, 메뉴ID를 입력 받아 주문을 하고 결제를 진행합니다.
    • 결제는 포인트로만 가능하며, 충전한 포인트에서 주문금액을 차감합니다.
    • 주문 내역을 데이터 수집 플랫폼으로 실시간 전송하는 로직을 추가합니다. (Mock API 등을 사용하여 사용자 식별값, 메뉴ID, 결제금액을 전송합니다.)
  • 인기메뉴 목록 조회 API
    • 최근 7일간 인기있는 메뉴 3개를 조회하는 API 작성합니다.
    • 메뉴별 주문 횟수가 정확해야 합니다.

기술 제약사항

  • 개발 언어는 Java, Kotlin 중 익숙한 개발 언어를 선택하여 과제를 진행해주시면 됩니다.
  • 설계 내용과 설계의 이유, 핵심 문제해결 전략 및 분석한 내용을 작성하여 "README.md" 파일에 첨부 해주세요.
  • 데이터베이스 사용에는 제약이 없습니다.
  • API 의 HTTP Method들 (GET | POST | PUT | DEL) 은 자유롭게 선택하세요.
  • 에러응답, 에러코드는 자유롭게 정의해주세요.

평가항목 : 프로젝트 완료 후 아래 항목에 따라 자가/동료 평가해봅니다.

  • 프로젝트 구성 방법 및 관련된 시스템 아키텍쳐 설계 방법이 적절한가?
  • 요구사항을 잘 이해하고 구현하였는가?
  • 작성한 어플리케이션 코드의 가독성 좋고 의도가 명확한가?
  • 작성한 테스트 코드는 적절한 범위의 테스트를 수행하고 있는가? (예. 유닛/통합 테스트 등)
  • 어플리케이션은 다량의 트래픽에도 무리가 없도록 효율적으로 작성되었는가?

챌린지 작성

  • 챌린지 프로젝트 개발을 완료하고 PR (main 브랜치) 요청합니다.
    • PR 제목 : 🚀 [카페 주문 시스템] {이름} 챌린지 제출 (ex : 🚀 [카페 주문 시스템] 박한영 챌린지 제출)
    • 브랜치 : feature/{username} 브랜치 생성 (ex : feature/discphy)
  • PR을 올리고 코드리뷰를 요청합니다.
    • 리뷰를 통해 리팩토링을 하고 코드를 개선합니다.
    • 평가항목을 통해 작성한 챌린지를 점검합니다.
    • 리뷰 받고 싶은 내용을 PR에 포함합니다.
  • 질문 및 논의(방법론 등)는 이슈를 생성해 기록합니다.
    • 코어 타임 내에 시간을 내어 같의 논의 합니다.

실전 과제 대비 챌린지 단계

  1. 프로젝트 마일스톤 작성
  2. 시나리오 요구사항 분석 작성 (ex : 시퀀스 다이어그램, 플로우 차트)
  3. ERD 설계 작성
  4. API 명세 및 Mock API 구현
  5. 기본 패키지 구조, 서버 Configuration 작성
  6. API Swagger 작성
  7. 주요 비지니스 로직 개발 및 단위 테스트 작성
  8. 비즈니스 Usecase 개발
  9. Usecase 통합 테스트 작성
  10. 필요한 Filter, Interceptor 등의 기능 구현
  11. 예외처리, 로깅 유효한 부가로직의 구현
  12. 정상적으로 구동되는 서버 애플리케이션 완성
  13. 제공해야 하는 API 완성
  14. 서버구축 챕터 마무리 회고록 작성
  15. Usecase에 대한 동시성 문제 분석 보고서 작성
    • DB 락, Redis 분산 락 다양한 해결방법 적용 케이스에 대해 비교해보고 의사결정 했는지?
  16. 위의 15단계의 분석 토대로 비지니스 로직 개선 후 통합테스트 작성
  17. Query 분석 및 캐싱 전략 설계 - README
    • Query에 대한 이해
    • 대량의 트래픽 발생 시 지연이 발생할 수 있는 조회쿼리 분석 및 결과 작성
  18. 캐시적용 및 시스템 설계 역량
    • 캐시
      • 캐시를 적용하기 적합한 비지니스 로직 파악 후 적절하게 구현하였는지?
      • 캐시 처리가 정상적으로 수행되는지에 대한 통합 테스트틀 작성하였는지?
    • 시스템 설계 역량
      • 대기열 시스템을 제공하기 위한 적절한 설계 진행 후 문서 작성하였는지?
      • 설계를 기반한 기능 구현이 정상적으로 되었는지?
  19. 수행되는 쿼리 수집 후, 필요하면 인덱스를 추가하고 쿼리의 성능개선 정도를 작성
    • 자주 조회하는 쿼리, 복잡한 쿼리 파악
    • Index 추가 전후 Explain, 실행시간 등 비교
  20. 개발한 기능의 트랜잭션 범위에 대한 이해하고, 서비스의 규모가 확장되어 MSA 형태로 서비스를 분리한다면 어떤 서비스로 분리확장될지 설계하고, 분리에 따른 트랜잭션 처리의 한계와 해결방안에 대한 서비스 설계문서 작성
  21. 실시간성 데이터를 플랫폼에 전달하는 (외부 API 호출, 메세지 발행) 요구사항 등을 기존 로직에 추가해 보고 기존 로직에 영향없이 부가 기능을 제공
  22. 카프카를 위한 설정 및 연결 테스트를 진행했는지
  23. 코드 레벨의 카프카 consumer, producer를 적절하게 구현하고, 테스트 해보았는지
  24. 카프카에 메세지가 정상적으로 발행되도록 처리하였는지 (Transactional Outbox Pattern)
  25. 카프카에 메세지 발행 실패시 처리를 적절하게 핸들링하고 있는지

About

챌린지 서버 개발 과제 커피 주문 시스템 자바

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages