챌린지 서버 개발 과제 커피 주문 시스템 자바
- 커피숍 주문 시스템을 구현해 봅시다.
- 커피 주문에 필요한 메뉴를 구성하고 조회가 가능해야 합니다.
- 커피 주문은 포인트로 가능합니다.
- 커피 주문내역을 통해 인기있는 메뉴를 추천합니다.
- 작성하신 어플리케이션이 다수의 서버에 다수의 인스턴스로 동작하더라도 기능에 문제가 없도록 설계되어야 합니다.
- 각 기능 및 제약사항에 대한 단위테스트를 반드시 작성합니다.
- 동시성 이슈를 고려하여 구현합니다.
- 데이터 일관성을 고려하여 구현합니다.
- 커피 메뉴 목록 조회 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을 올리고 코드리뷰를 요청합니다.
- 리뷰를 통해 리팩토링을 하고 코드를 개선합니다.
- 평가항목을 통해 작성한 챌린지를 점검합니다.
- 리뷰 받고 싶은 내용을 PR에 포함합니다.
- 질문 및 논의(방법론 등)는 이슈를 생성해 기록합니다.
- 코어 타임 내에 시간을 내어 같의 논의 합니다.
- 프로젝트 마일스톤 작성
- 시나리오 요구사항 분석 작성 (ex : 시퀀스 다이어그램, 플로우 차트)
- ERD 설계 작성
- API 명세 및 Mock API 구현
- 기본 패키지 구조, 서버 Configuration 작성
- API Swagger 작성
- 주요 비지니스 로직 개발 및 단위 테스트 작성
- 비즈니스 Usecase 개발
- Usecase 통합 테스트 작성
- 필요한 Filter, Interceptor 등의 기능 구현
- 예외처리, 로깅 유효한 부가로직의 구현
- 정상적으로 구동되는 서버 애플리케이션 완성
- 제공해야 하는 API 완성
- 서버구축 챕터 마무리 회고록 작성
- Usecase에 대한 동시성 문제 분석 보고서 작성
- DB 락, Redis 분산 락 다양한 해결방법 적용 케이스에 대해 비교해보고 의사결정 했는지?
- 위의 15단계의 분석 토대로 비지니스 로직 개선 후 통합테스트 작성
- Query 분석 및 캐싱 전략 설계 - README
- Query에 대한 이해
- 대량의 트래픽 발생 시 지연이 발생할 수 있는 조회쿼리 분석 및 결과 작성
- 캐시적용 및 시스템 설계 역량
- 캐시
- 캐시를 적용하기 적합한 비지니스 로직 파악 후 적절하게 구현하였는지?
- 캐시 처리가 정상적으로 수행되는지에 대한 통합 테스트틀 작성하였는지?
- 시스템 설계 역량
- 대기열 시스템을 제공하기 위한 적절한 설계 진행 후 문서 작성하였는지?
- 설계를 기반한 기능 구현이 정상적으로 되었는지?
- 캐시
- 수행되는 쿼리 수집 후, 필요하면 인덱스를 추가하고 쿼리의 성능개선 정도를 작성
- 자주 조회하는 쿼리, 복잡한 쿼리 파악
- Index 추가 전후 Explain, 실행시간 등 비교
- 개발한 기능의 트랜잭션 범위에 대한 이해하고, 서비스의 규모가 확장되어 MSA 형태로 서비스를 분리한다면 어떤 서비스로 분리확장될지 설계하고, 분리에 따른 트랜잭션 처리의 한계와 해결방안에 대한 서비스 설계문서 작성
- 실시간성 데이터를 플랫폼에 전달하는 (외부 API 호출, 메세지 발행) 요구사항 등을 기존 로직에 추가해 보고 기존 로직에 영향없이 부가 기능을 제공
- 카프카를 위한 설정 및 연결 테스트를 진행했는지
- 코드 레벨의 카프카 consumer, producer를 적절하게 구현하고, 테스트 해보았는지
- 카프카에 메세지가 정상적으로 발행되도록 처리하였는지 (Transactional Outbox Pattern)
- 카프카에 메세지 발행 실패시 처리를 적절하게 핸들링하고 있는지