카테고리별 가게 목록 조회

GET /stores/categories?storeCategoryId={storeCategoryId}

권한: CUSTOMER, OWNER, MANAGER

커서 기반 페이지네이션으로 카테고리별 가게 목록을 조회합니다.

Query Parameters

Parameter Description

storeCategoryId

카테고리 UUID

sortType

정렬 타입 (LATEST / RATING / REVIEW)

size

페이지 크기 (기본값 10)

lastId

마지막 커서 ID

lastCreatedAt

마지막 생성일시 (LATEST 정렬 시)

lastRating

마지막 평점 (RATING 정렬 시)

lastReviewCount

마지막 리뷰 수 (REVIEW 정렬 시)

HTTP Request Example

GET /stores/categories?storeCategoryId=81d3cd86-8f90-47bb-8313-04b1eabecefe&sortType=LATEST&size=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data.storeCategoryId

String

카테고리 UUID

data.storeCategoryName

String

카테고리 이름

data.hasNext

Boolean

다음 페이지 존재 여부

data.storeCount

Number

현재 페이지 가게 수

data.lastCursorId

String

마지막 커서 ID

data.stores[].storeId

String

가게 UUID

data.stores[].storeName

String

가게 이름

data.stores[].reviewCount

Number

리뷰 수

data.stores[].avgRating

Number

평균 평점

data.stores[].storeStatus

String

가게 상태

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 564

{
  "code" : "ST200",
  "status" : "OK",
  "message" : "가게 목록 조회 성공",
  "data" : {
    "storeCategoryId" : "81d3cd86-8f90-47bb-8313-04b1eabecefe",
    "storeCategoryName" : "한식",
    "hasNext" : false,
    "storeCount" : 1,
    "lastCursorId" : "3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8",
    "stores" : [ {
      "storeId" : "3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8",
      "storeName" : "테스트 가게",
      "reviewCount" : 10,
      "avgRating" : 4.5,
      "storeStatus" : "OPEN"
    } ]
  },
  "timestamp" : "2026-03-11T10:10:10.841777797"
}

키워드로 가게 검색

GET /stores/keywords?keyword={keyword}&sortType={sortType}

권한: CUSTOMER, OWNER, MANAGER

키워드로 가게를 검색합니다. 오프셋 기반 페이지네이션을 사용합니다.

Query Parameters

Parameter Description

keyword

검색 키워드

sortType

정렬 기준 (LATEST, RATING 등)

page

페이지 번호 (0부터 시작)

size

한 페이지당 개수

HTTP Request Example

GET /stores/keywords?keyword=%ED%85%8C%EC%8A%A4%ED%8A%B8&sortType=LATEST&page=0&size=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data.stores[].storeId

String

가게 UUID

data.stores[].storeName

String

가게 이름

data.stores[].reviewCount

Number

리뷰 수

data.stores[].avgRating

Number

평균 평점

data.stores[].storeStatus

String

가게 상태

data.totalCount

Number

전체 가게 수

data.currentPage

Number

현재 페이지 번호

data.hasPrevious

Boolean

이전 페이지 존재 여부

data.hasNext

Boolean

다음 페이지 존재 여부

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 446

{
  "code" : "ST207",
  "status" : "OK",
  "message" : "가게 검색 성공",
  "data" : {
    "stores" : [ {
      "storeId" : "3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8",
      "storeName" : "테스트 가게",
      "reviewCount" : 10,
      "avgRating" : 4.5,
      "storeStatus" : "OPEN"
    } ],
    "totalCount" : 1,
    "currentPage" : 1,
    "hasPrevious" : false,
    "hasNext" : false
  },
  "timestamp" : "2026-03-11T10:10:10.957911617"
}

가게 상세 조회

GET /stores/{storeId}

권한: CUSTOMER, OWNER, MANAGER

가게의 상세 정보 및 메뉴 카테고리 목록을 조회합니다.

Path Parameters

Table 1. /stores/{storeId}
Parameter Description

storeId

가게 UUID

HTTP Request Example

GET /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data.store.storeId

String

가게 UUID

data.store.storeName

String

가게 이름

data.store.reviewCount

Number

리뷰 수

data.store.avgRating

Number

평균 평점

data.store.storeStatus

String

가게 상태

data.storeMenuCategoryItems[]

Array

메뉴 카테고리 목록

data.allowedRegion

Boolean

배달 가능 지역 여부

data.deliverableToUser

Boolean

사용자 배달 가능 여부

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 449

{
  "code" : "ST205",
  "status" : "OK",
  "message" : "가게 상세 조회 성공",
  "data" : {
    "store" : {
      "storeId" : "3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8",
      "storeName" : "테스트 가게",
      "reviewCount" : 10,
      "avgRating" : 4.5,
      "storeStatus" : "OPEN"
    },
    "storeMenuCategoryItems" : [ ],
    "allowedRegion" : true,
    "deliverableToUser" : true
  },
  "timestamp" : "2026-03-11T10:10:10.876543248"
}

점주 가게 조회

GET /stores/{storeId}/manage

권한: OWNER, MANAGER

점주 또는 매니저가 본인 가게의 관리 정보를 조회합니다.

Path Parameters

Table 2. /stores/{storeId}/manage
Parameter Description

storeId

가게 UUID

HTTP Request Example

GET /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8/manage HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

status

String

HTTP 상태

message

String

응답 메시지

timestamp

String

응답 타임스탬프

data.storeId

String

가게 UUID

data.storeName

String

가게 이름

data.phoneNumber

String

가게 전화번호

data.businessNumber

String

사업자 등록 번호

data.description

String

가게 상세 설명

data.reviewCount

Number

총 리뷰 수

data.avgRating

Number

평균 별점

data.storeStatus

String

가게 운영 상태 (OPEN, CLOSED)

data.address.sidoName

String

시/도 명칭

data.address.sigunguName

String

시/군/구 명칭

data.address.dongName

String

법정동/읍/면 명칭

data.address.roadAddress

String

도로명 주소

data.address.detailAddress

String

상세 주소

data.address.sidoCode

String

시/도 코드

data.address.sigunguCode

String

시/군/구 코드

data.address.dongCode

String

법정동 코드

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 732

{
  "code" : "ST206",
  "status" : "OK",
  "message" : "가게 조회 성공",
  "data" : {
    "storeId" : "907e192c-b470-4a56-9597-adfba78f4119",
    "storeName" : "감자네 치킨",
    "phoneNumber" : "02-1234-5678",
    "businessNumber" : "123-45-67890",
    "description" : "맛있는 치킨집입니다.",
    "reviewCount" : 10,
    "avgRating" : 4.5,
    "storeStatus" : "OPEN",
    "address" : {
      "sidoCode" : "11",
      "sidoName" : "서울특별시",
      "sigunguCode" : "110",
      "sigunguName" : "강남구",
      "dongCode" : "11010",
      "dongName" : "역삼동",
      "roadAddress" : "테헤란로 427",
      "detailAddress" : "위워크"
    }
  },
  "timestamp" : "2026-03-11T10:10:10.859526176"
}

가게 리뷰 목록 및 요약 조회

GET /stores/{storeId}/reviews

권한: CUSTOMER, OWNER, MANAGER

가게의 전체 리뷰 목록과 평균 평점, 총 리뷰 개수 등 요약 정보를 조회합니다. 리뷰 목록 내 isOwner 필드를 통해 본인이 작성한 리뷰인지 확인할 수 있습니다.

Path Parameters

Table 3. /stores/{storeId}/reviews
Parameter Description

storeId

가게 UUID

HTTP Request Example

GET /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8/reviews HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

status

String

HTTP 상태

message

String

응답 메시지

timestamp

String

응답 타임스탬프

data.reviewSummary.totalReviews

Number

총 리뷰 개수

data.reviewSummary.averageRating

Number

평균 별점

data.reviews[].reviewId

String

리뷰 UUID

data.reviews[].orderId

String

주문 UUID

data.reviews[].userId

String

작성자 UUID

data.reviews[].rating

Number

별점

data.reviews[].comment

String

리뷰 내용

data.reviews[].isOwner

Boolean

본인 작성 여부

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 839

{
  "code" : "ST208",
  "status" : "OK",
  "message" : "가게 리뷰 목록 조회 성공",
  "data" : {
    "reviews" : [ {
      "reviewId" : "1d9ae1e9-0181-4903-931d-262dd6ec03b0",
      "orderId" : "dc053cfa-417e-4dab-baf1-f0516835a0af",
      "userId" : "a965533d-132d-4c64-80eb-182f3a1683bc",
      "rating" : 5.0,
      "comment" : "정말 맛있어요! 광화문 최고 맛집입니다.",
      "isOwner" : true
    }, {
      "reviewId" : "e0cbbbc9-521b-439d-b66f-c412c542cf48",
      "orderId" : "3fb007e4-a5b8-4401-a1ab-31d16d4ccbfd",
      "userId" : "a973b8f2-a007-46d6-88c7-b5768ae6a164",
      "rating" : 4.0,
      "comment" : "배달이 빨라요.",
      "isOwner" : false
    } ],
    "reviewSummary" : {
      "totalReviews" : 2,
      "averageRating" : 4.5
    }
  },
  "timestamp" : "2026-03-11T10:10:10.976271501"
}

가게 생성

POST /stores

권한: OWNER

새로운 가게를 등록합니다.

Request Fields

Path Type Description

storeCategoryId

String

카테고리 UUID

storeName

String

수정할 가게 이름

businessNumber

String

사업자 등록 번호

storePhone

String

가게 전화번호

description

String

가게 설명

address

Object

가게 주소

address.sidoCode

String

시도 코드

address.sidoName

String

시도 이름

address.sigunguCode

String

시군구 코드

address.sigunguName

String

시군구 이름

address.dongCode

String

동 코드

address.dongName

String

동 이름

address.roadAddress

String

도로명 주소

address.detailAddress

String

상세 주소

HTTP Request Example

POST /stores?_csrf=fX6p_14NzJL8M4T4cJG50waLQmytSxDE-HZOONxHSaNDz9eLTE2azz1r9KbRAubMEbyN5jbub1SeeCbpyUAtWeQke8Z0_u65 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 473
Host: localhost:8080

{
  "storeCategoryId" : "81d3cd86-8f90-47bb-8313-04b1eabecefe",
  "storeName" : "교촌치킨",
  "businessNumber" : "123-45-67890",
  "storePhone" : "02-123-4567",
  "address" : {
    "sidoCode" : "11",
    "sidoName" : "서울특별시",
    "sigunguCode" : "110",
    "sigunguName" : "강남구",
    "dongCode" : "11010",
    "dongName" : "역삼동",
    "roadAddress" : "테헤란로 427",
    "detailAddress" : "위워크"
  },
  "description" : "맛있는 치킨"
}

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data

Null

응답 데이터 (null)

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 149

{
  "code" : "ST201",
  "status" : "CREATED",
  "message" : "가게 등록 성공",
  "data" : null,
  "timestamp" : "2026-03-11T10:10:10.93756332"
}

가게 수정

PATCH /stores/{storeId}

권한: OWNER

가게 정보를 수정합니다.

Path Parameters

Table 4. /stores/{storeId}
Parameter Description

storeId

수정할 가게 UUID

Request Fields

Path Type Description

storeCategoryId

String

카테고리 UUID

storeName

String

수정할 가게 이름

storePhone

String

가게 전화번호

description

String

가게 설명

address

Object

가게 주소

address.sidoCode

String

시도 코드

address.sidoName

String

시도 이름

address.sigunguCode

String

시군구 코드

address.sigunguName

String

시군구 이름

address.dongCode

String

동 코드

address.dongName

String

동 이름

address.roadAddress

String

도로명 주소

address.detailAddress

String

상세 주소

HTTP Request Example

PATCH /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8?_csrf=mhq4NBROWUoOWdZNPNBd5_vJ1LFr6nPn8z0xW396AyLoHgmh-COBBSB-PXgja7J_Wv1p1sj_-dAJ2BfKwgUDak5NM0fbLjzE HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 433
Host: localhost:8080

{
  "storeCategoryId" : "81d3cd86-8f90-47bb-8313-04b1eabecefe",
  "storeName" : "BHC치킨",
  "storePhone" : "02-987-6543",
  "address" : {
    "sidoCode" : "11",
    "sidoName" : "서울특별시",
    "sigunguCode" : "110",
    "sigunguName" : "강남구",
    "dongCode" : "11010",
    "dongName" : "역삼동",
    "roadAddress" : "테헤란로 427",
    "detailAddress" : "위워크"
  },
  "description" : "수정된 설명"
}

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data

Null

응답 데이터 (null)

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 152

{
  "code" : "ST202",
  "status" : "OK",
  "message" : "가게 정보 수정 성공",
  "data" : null,
  "timestamp" : "2026-03-11T10:10:10.911336932"
}

가게 상태 변경

PATCH /stores/{storeId}/status

권한: OWNER

가게의 영업 상태를 변경합니다. (OPEN / CLOSED)

Path Parameters

Table 5. /stores/{storeId}/status
Parameter Description

storeId

상태를 변경할 가게 UUID

Request Fields

Path Type Description

status

String

변경할 가게 상태 (OPEN / CLOSED)

HTTP Request Example

PATCH /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8/status?_csrf=z7RDlv58DAwwXC23sUdqh0_46CQecXR-mSFbqBLGms8iIhPrq4Zwpp8eaDgdbRvShmpesXnKxR16RhBTq0dszSP0qv5BFnDa HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 37
Host: localhost:8080

{
  "status" : "TEMPORARILY_CLOSED"
}

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data

Null

응답 데이터 (null)

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 159

{
  "code" : "ST203",
  "status" : "OK",
  "message" : "가게 영업 상태 변경 성공",
  "data" : null,
  "timestamp" : "2026-03-11T10:10:10.998060412"
}

가게 삭제

DELETE /stores/{storeId}

권한: OWNER

가게를 삭제합니다.

Path Parameters

Table 6. /stores/{storeId}
Parameter Description

storeId

삭제할 가게 UUID

HTTP Request Example

DELETE /stores/3835fb3c-dcdd-41e3-ae14-b6bcadd73cd8 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080

Response Fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

status

String

HTTP 상태

timestamp

String

응답 타임스탬프

data

Null

응답 데이터 (null)

HTTP Response Example

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 145

{
  "code" : "ST204",
  "status" : "OK",
  "message" : "가게 삭제 성공",
  "data" : null,
  "timestamp" : "2026-03-11T10:10:10.826570475"
}