[WIL] 항해 Chapter 03 (2022.07.15~2022.07.21)

YOONG·2022년 7월 24일
0
post-thumbnail

Chapter 3 | 주특기 기본/심화

요구사항에 맞춰 배달서비스 API를 구성해보기

요구사항

  • 1) 음식점 등록 및 조회, 2) 음식 등록 및 메뉴판 조회, 3) 주문요청하기 및 주문 조회를 모두 완수해야 합니다.
  • 스프링 서버를 통해 아래 요구사항에 맞춰 배달앱 API 를 구현합니다.
  • 크게 3개의 요구사항으로 나뉘어져 있고, 제공되는 테스트 코드가 모두 성공적으로 작동하게 되면 과제 완료입니다!

1) 음식점 등록 및 조회

  1. 음식점 정보 입력받아 등록
    • 음식점 이름 (name)
    • 최소주문 가격 (minOrderPrice)
      • 허용값: 1,000원 ~ 100,000원 입력
      • 100 원 단위로만 입력 가능 (예. 2,220원 입력 시 에러발생. 2,300원은 입력 가능)
      • 허용값이 아니거나 100원 단위 입력이 아닌 경우 에러 발생시킴
    • 기본 배달비 (deliveryFee)
      • 허용값: 0원 ~ 10,000원 (예. 11,000원 입력 시 에러발생.)
      • 500 원 단위로만 입력 가능 (예. 2,200원 입력 시 에러발생. 2,500원 입력 가능)
  2. 음식점 조회
    • 등록된 모든 음식점 정보 조회 가능
      • 등록 시 입력한 음식점 정보 (name, minOrderPrice, deliveryFee)
      • DB 테이블 ID (id)

image

2) 음식 등록 및 메뉴판 조회

  1. 음식점 ID 및 음식 정보 입력받아 등록
    • 음식점 ID (restaurantId)
      • 음식점 DB 테이블 ID
    • 음식명 (name)
      • 같은 음식점 내에서는 음식 이름이 중복될 수 없음 (예. '자담치킨 강남점'에 '후라이드치킨' 이 이미 등록되어 있다면 중복하여 등록할 수 없지만, 다른 음식점인 '맘스터치 강남점'에는 '후라이드치킨' 을 등록 가능)
    • 가격 (price)
      • 허용값: 100원 ~ 1,000,000원
      • 100 원 단위로만 입력 가능 (예. 2,220원 입력 시 에러발생. 2,300원 입력 가능)
      • 허용값이 아니거나 100원 단위 입력이 아닌 경우 에러 발생시킴
  2. 메뉴판 조회
    • 하나의 음식점에 등록된 모든 음식 정보 조회
      • 등록 시 입력한 음식 정보 (name, price)
      • DB 테이블 ID (id)

image

3) 주문 요청하기 및 주문 조회

  1. 주문 요청 시 배달 음식점 및 음식 정보 입력받음
    • 음식점 ID (restaurantId)
    • 음식 주문 정보 (foods)
      • 음식 ID (id)
      • 음식을 주문할 수량 (quantity)
        • 허용값: 1 ~ 100
        • 허용값이 아니면 에러 발생시킴
  2. 주문 요청에 대한 응답으로 다음 정보를 포함시킴
    • 주문 음식점 이름 (restaurantName)
    • 주문 음식 정보 (foods)
      • 주문 음식명 (name)
      • 주문 수량 (quantity)
      • 주문 음식의 가격 (price)
        • 계산방법
          • 주문 음식 1개의 가격 * 주문 수량
    1. 배달비 (deliveryFee)
      • 주문 음식점의 기본 배달비
    2. 최종 결제 금액 (totalPrice)
      • 계산방법
        • 주문 음식 가격들의 총 합 + 배달비
      • "주문 음식 가격들의 총 합" 이 주문 음식점의 "최소주문 가격" 을 넘지 않을 시 에러 발생시킴
  3. 주문 조회
    • 그동안 성공한 모든 주문 요청을 조회 가능

image

데이터베이스 설계

테이블

image image image image

ERD

spring-hw3-ERD

프로젝트 후기


CORS(Cross-Origin Resource Sharing)

CORS란

  • 최신 웹 브라우저의 보안 기능
  • 웹 브라우저에서 외부 도메인 서버와 통신하기 위한 방식을 표준화한 HTTP 헤더 기반 메커니즘
  • 브라우저에서 다른 출처의 리소스를 공유하는 방법

출처(Origin)란

  • URL 구조의 Protocol, Host, Port를 합한 것

CORS 동작원리

Simple request(단순 요청 방법)

  • 서버에게 바로 요청을 보내는 방법
  • 단순 요청은 서버에 API를 요청하고, 서버는 Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에 보내며 브라우저는 Access-Control-Allow-Origin 헤더를 확인해서 CORS 동작을 수행할지 판단

Simple request 조건

  • 요청 메서드는 GET, HEAD, POST 중 하나여야 함
  • 유저 에이전트가 자동으로 생성한 헤더 외에, 수동으로 설정할 수 있는 헤더는 Fetch 명세에서 CORS-safelisted request-header로 정의한 헤더만 사용 가능
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type
    • DPR
    • Downlink
    • Save-Data
    • Viewport-Width
    • Width
  • Content-Type 헤더에는 다음 값들만 허용
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

Preflight request

  • 요청을 한 번에 보내지 않고 예비 요청과 본 요청으로 나누어 서버로 전송
  • 예비 요청을 보내 안전한지 판단한 후 본 요청 전송
  • 실제 리소스를 요청하기 전에 OPTIONS라는 메서드로 서버에 예비 요청을 전송하고, 서버는 이 예비 요청에 대한 응답으로 Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에 보내며 브라우저는 단순 욫엉과 동일하게 Access-Control-Allow-Origin 헤더를 확인해서 CORS 동작을 수행할지 판단
profile
👊천천히, 하지만 꾸준히👊

0개의 댓글