Skip to content

24년 백엔드 비기너 2차 커리큘럼 실습 과제입니다.

Notifications You must be signed in to change notification settings

ll0zlk/24_2_BE_Beginner_Project_FoodOrder

Repository files navigation

음식 주문 관리 시스템 만들기

해커톤에 참여하여 음식 주문 관리 시스템을 만들게 되었습니다.

각자 가장 좋아하는 음식들을 골라 주문할 수 있는 시스템을 만들어주세요.

음식이 아니어도 괜찮아요!


📌 시스템 필수 기능

  1. 메뉴 조회: 사용자는 본인이 주문 가능한 메뉴 정보를 볼 수 있습니다.
    1. 메뉴는 html 정적 페이지나 이미지를 통해 제공해주세요.
  2. 주문 조회: 사용자가 지금까지 추가한 주문들을 조회할 수 있습니다.
  3. 주문 추가: 사용자가 특정 음식을 선택해 주문할 수 있습니다.
  4. 주문 변경: 사용자가 특정 주문의 수량, 또는 옵션을 변경할 수 있습니다.
  5. 주문 취소: 특정 주문을 취소할 수 있습니다.

📌 개발 시 지켜야할 것

  1. 반환값은 DTO 클래스를 반환하도록 하며, 특히 최신 문법중 record를 활용해 만들어보세요
  2. API는 RESTFul하게 만들어 주세요.
  3. 컨트롤러, 서비스, 레포지토리, 엔티티 등 각 레이어를 적절하게 나누어주세요.
  4. JPA를 활용해주시고, 데이터베이스를 연동해주세요
  5. application.yml과 application-secret.yml을 분리해보세요.
  6. src/main/resources/static내에 html 파일을 두고, 컨트롤러를 통해 정적 페이지를 제공해주세요.
    1. RestController 가 아닌 일반 Controller를 사용해주세요.
    2. 심화적으로 MVC 패턴을 더 경험하고 싶으시다면, thymeleaf와 같은 템플릿을 사용하여도 됩니다!
  7. 개발은 각자의 깃허브 레포지토리에 진행해주세요! 초대 이후 링크를 저(coke98)에게 보여주시면 됩니다!
  8. 테이블을 여러개 두어도 괜찮지만(음식, 주문, 사용자 등 당연히 분리하는게 좋지만) 이번 실습에서는 여러 테이블간 연관관계가 맺어질 경우 난이도가 어려워질 수 있습니다! 주문이라는 한 테이블 내에 모든 내용(음식, 수량 등)이 들어가도록 테이블을 구성하는 것을 권장합니다!


음식 주문 관리 시스템 - DB 테이블 분리하기

📌 시스템 확장 목표

  1. 테이블 분리: 기존에 "주문" 테이블에 모든 정보를 포함했던 것을 개선하여, 각 역할별로 테이블을 분리해 주세요.(필요에 따라 추가로 분리하여도 괜찮습니다!)
    • 음식 테이블
    • 주문 테이블
    • 사용자 테이블
  2. 연관관계 매핑: JPA를 활용하여 각 테이블 간의 연관관계를 매핑하고, **매핑된 결과를 다이어그램(ERD)**으로 그려주세요. 설명을 함께 작성해주세요(관계 종류, 컬럼 등)
    1. 다이어그램 전용 무료 툴은 1. ERD-Diagram 2. draw.io 3. MysqlWorkbench를 추천드려요.
    2. 그 외에 툴도 연관관계와 테이블 컬럼을 알아 볼 수 있다면 괜찮습니다.
  3. API 확장
    • 사용자 생성 API 추가 - 새로운 RestController를 생성하여 ****사용자를 추가할 수 있는 기능을 만들어주세요.
  4. Transaction 활용
    • 서비스 코드 내에서 DB에 여러 차례 접근하는 메서드들에는 반드시 transaction을 활용해주세요.

📌 개발 시 지켜야할 것

  1. 깃허브 레포지토리 내에 이슈를 만들고 커밋과 PR에서 이슈를 트래킹 해주세요
  2. RESTAPI를 사용하지 않은 분들은 코드리뷰를 참고하여 json 포맷을 반환하도록 수정해주세요.
  3. DTO의 경우 response인지, request인지 구분할 수 있도록 네이밍을 고민해주세요.


음식 주문 관리 시스템 - 회원 기능 추가하기

지난주에 진행한 음식 주문 관리 시스템을 회원에게 제공하기 위해

이번 3주차 과제에서는 회원가입 API를 만들고,

로그인을 유지하는 작업을 진행해주세요. 😌


📌 시스템 확장 목표

  1. 회원가입 기능 추가
    • 새로운 사용자가 아이디(이메일), 비밀번호, 이름(닉네임) 등을 입력하여 회원가입할 수 있는 기능을 구현해주세요.
    • REST API를 통해 구현해주세요
    • 비밀번호는 반드시 암호화하여 DB에 저장해주세요. (예: BCrypt 등)
    • 이미 존재하는 아이디로는 회원가입할 수 없도록 중복 검사를 해주세요.
    • (선택, 난이도: ⭐️⭐️⭐️) 프로필 이미지를 함께 받아 저장할 수 있도록 해보시는걸 권장합니다. 이미지와 텍스트를 함께 받을 수 있는 방법을 고민해주세요. (힌트: formdata)
  2. 로그인 기능 구현
    • 회원이 아이디와 비밀번호로그인할 수 있도록 로그인 기능을 구현해주세요.
    • REST API를 통해 구현해주세요.
    • 로그인에 성공하면 세션을 등록해 로그인을 유지해주세요.
    • (선택, 난이도: ⭐️⭐️⭐️⭐️) 세션 대신 JWT를 사용해 개발하는 것도 좋습니다.
  3. 인증 및 인가 처리
    • 로그인된 회원만 주문할 수 있도록 인증, 인가 처리를 구현해주세요.
    • 자신의 주문 내역만 조회할 수 있도록 권한 처리를 해주세요.
    • 세션 검증 로직은 서비스가 아닌 인터셉터를 통해 구현해주세요.
  4. 로그아웃 기능 추가
    • 로그인 된 회원이 로그아웃할 수 있는 기능을 구현해주세요.
    • REST API를 통해 구현해주세요.
    • 로그아웃 시 세션을 만료시켜주세요.

📌 개발 시 지켜야할 것

  1. 깃허브 레포지토리 내에 이슈를 만들고 커밋과 PR에서 이슈를 트래킹 해주세요.
  2. 클래스 내에 너무 많은 책임이 들어가지 않도록 주의하여 작성해주세요.
    1. 암호화 로직의 경우 다른 클래스로 분리하는 등
  3. 한 메서드가 4줄이상 넘어가거나 들여쓰기(indent)가 3번이상이라면, 메서드내 책임을 분리할 수 있을지도 고민해주세요.
    1. 참고 키워드: (클린코드) 함수의 추상화 수준, (클린코드) 인덴트, 메서드 분리
  4. 메서드들의 private과 public 접근 제어자를 목적에따라 제대로 활용하고 있는지 확인해주세요.
    1. 이유없이 public으로 열어두지 않도록 주의해주세요.
  5. 실행 결과를 함께 남겨주세요
    1. Postman이나 API 테스트 툴을 통해 실행결과를 남겨주세요.

진행하시면서 어려운 점이 있으면 언제든지 질문해 주세요. 😊 각자의 깃허브 레포지토리에 진행한 내용을 PR로 남겨주시고, 완료되면 저를 리뷰어로 지정해주신 후 연락 남겨주세요!

About

24년 백엔드 비기너 2차 커리큘럼 실습 과제입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published