음식점 리뷰 서버 (SpringBoot + RDS + S3)

음식점 정보 제공, 메뉴 관리, 리뷰 작성 기능을 지원하는 RESTful API 서버입니다.

Java 17Spring BootMavenRDSS3

서버 실행 방법

다운로드한 zip 파일을 압축 해제한 후, 다음 명령어로 서버를 실행할 수 있습니다:

java -jar food-review-server.jar

서버가 성공적으로 실행되면 localhost:8080에서 API를 사용할 수 있습니다.

Swagger UI는 localhost:8080/swagger-ui.html에서 확인할 수 있습니다.

API 명세서

회원가입

POST/api/v1/users/signup

새로운 사용자를 등록합니다.

요청 본문

{
  "email": "user@example.com",
  "password": "password123",
  "nickname": "사용자닉네임"
}

응답 예시

201 Created

오류 응답

400 Bad Request

로그인

POST/api/v1/users/login

사용자 로그인을 처리합니다.

요청 본문

{
  "email": "user@example.com",
  "password": "password123"
}

응답 예시

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "isSuccess": true
}

오류 응답

{
  "token": "",
  "isSuccess": false
}

음식점 목록 조회

GET/api/v1/restaurants

음식점 목록을 조회합니다. 페이징, 카테고리 필터링, 검색을 지원합니다.

쿼리 파라미터

page (필수): 페이지 번호 (0부터 시작)
size (필수): 페이지당 항목 수
category (선택): 카테고리 필터
keyword (선택): 검색 키워드

응답 예시

{
  "content": [
    {
      "id": 1,
      "name": "맛있는 삼겹살집",
      "category": "한식",
      "address": "서울시 강남구 논현동",
      "phone": "02-1234-5678",
      "description": "고기가 맛있는 집",
      "avgRating": 4.5,
      "reviewCount": 120,
      "createdAt": "2023-01-01T10:00:00"
    }
  ],
  "pageable": {
    "page": 0,
    "size": 10,
    "totalElements": 100,
    "totalPages": 10
  }
}

음식점 상세 조회

GET/api/v1/restaurants/{id}

특정 음식점의 상세 정보를 조회합니다.

쿼리 파라미터

id: 음식점 ID (Path Parameter)

응답 예시

{
  "id": 1,
  "name": "맛있는 삼겹살집",
  "category": "한식",
  "address": "서울시 강남구 논현동",
  "phone": "02-1234-5678",
  "description": "고기가 맛있는 집",
  "avgRating": 4.5,
  "reviewCount": 120,
  "createdAt": "2023-01-01T10:00:00",
  "menus": [
    {
      "id": 1,
      "name": "삼겹살 200g",
      "price": 15000,
      "description": "신선한 삼겹살",
      "category": "메인",
      "reviewCount": 80
    }
  ]
}

오류 응답

404 Not Found

리뷰 생성 (이미지 포함)

POST/api/v1/reviews/restaurant/{restaurantId}/menu/{menuId}

특정 음식점의 메뉴에 대한 리뷰를 생성합니다. 이미지 파일 첨부 가능.

헤더

Authorization: Bearer {token}

쿼리 파라미터

restaurantId: 음식점 ID (Path Parameter)
menuId: 메뉴 ID (Path Parameter)

요청 본문

Form Data:
rating (String): 평점 (1-5)
content (String): 리뷰 내용
image (MultipartFile, 선택): 리뷰 이미지

응답 예시

201 Created

오류 응답

400 Bad Request

리뷰 생성 (JSON)

POST/api/v1/reviews

JSON 형태로 리뷰를 생성합니다.

헤더

Authorization: Bearer {token}

요청 본문

{
  "restaurantId": 1,
  "menuId": 1,
  "rating": 5,
  "content": "정말 맛있어요!"
}

응답 예시

201 Created

오류 응답

400 Bad Request