[인프런 워밍업 클럽 스터디] 4일차 - 데이터베이스를 사용해 만드는 API

image

 

[이론 정리]

생애 최초 database 조작하기

  1. 디스크와 메모리 차이를 이해하고, Database의 필요성을 이해한다.

  2. SQL을 이용해 MySQL Database를 조작할 수 있다.

  3. 스프링 서버를 이용해 Database에 접근하고 데이터를 저장, 조회, 업데이트, 삭제할 수 있다.

  4. API의 예외 상황을 알아보고 예외를 처리할 수 있다.

     


 

[과제]

문제 1

우리는 작은 과일 가게를 운영하고 있습니다. 과일 가게에 입고된 "과일 정보"를 저장하는 API를 만들어 봅시다. 스펙은 다음과 같습니다.

  • HTTP method : POST

  • HTTP path : /api/v1/fruit

  • HTTP 요청 Body

     

{
   "name" : String,
   "warehousingDate" : LocalDate,
   "price" : long
}
  • HTTP 요청 Body 예시

     

{
   "name" : "사과",
   "warehousingDate" : "2024-02-01",
   "price" : 5000
}
  • 응답 : 성공시 200

     

💡한 걸음 더!

자바에서 정수를 다루는 가장 대표적인 두 가지 방법은 int와 long입니다.

이 두 가지 방법 중 위 API에서 long을 사용한 이유는 무엇일까요?

 

 

문제 2

과일이 팔리게 되면, 우리 시스템에 팔린 과일 정보를 기록해야 합니다. 스펙은 다음과 같습니다.

  • HTTP method : PUT

  • HTTP path : /api/v1/fruit

  • HTTP 요청 Body

{
   "id" : long
}
  • HTTP 요청 Body 예시

     

{
   "id" : 3
}
  • 응답 : 성공시 200

 

 

문제 3

우리는 특정 과일을 기준으로 팔린 금액, 팔리지 않은 금액을 조회하고 싶습니다.

예를 들어

  1. (1, 사과, 3000원, 판매O)

  2. (2, 사과, 4000원, 판매X)

  3. (3, 사과, 3000원, 판매O)

와 같은 세 데이터가 있다면 우리의 API는 판매된 금액 : 6000원, 판매되지 않은 금액 : 4000원 이라고 응답해야 합니다.

구체적인 스펙은 다음과 같습니다.

  • HTTP method : GET

  • HTTP path : /api/v1/fruit/stat

  • HTTP query

  • - name : 과일 이름

  • 예시 GET /api/v1/fruit/stat?name=사과

  • HTTP 응답 Body

{
   "salesAmount" : long,
   "notSalesAmount" : long
}
  • HTTP 응답 Body 예시

     

{
   "salesAmount" : 6000,
   "notSalesAmount" : 4000
}

💡한 걸음 더!

(문제 3번을 모두 푸셨다면) SQL의 sum, group by 키워드를 검색해 적용해보세요.

 

 

 

댓글을 작성해보세요.