카테고리별 가게 목록 조회
GET /stores/categories?storeCategoryId={storeCategoryId}
권한: CUSTOMER, OWNER, MANAGER
커서 기반 페이지네이션으로 카테고리별 가게 목록을 조회합니다.
Query Parameters
| Parameter | Description |
|---|---|
|
카테고리 UUID |
|
정렬 타입 (LATEST / RATING / REVIEW) |
|
페이지 크기 (기본값 10) |
|
마지막 커서 ID |
|
마지막 생성일시 (LATEST 정렬 시) |
|
마지막 평점 (RATING 정렬 시) |
|
마지막 리뷰 수 (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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
카테고리 UUID |
|
|
카테고리 이름 |
|
|
다음 페이지 존재 여부 |
|
|
현재 페이지 가게 수 |
|
|
마지막 커서 ID |
|
|
가게 UUID |
|
|
가게 이름 |
|
|
리뷰 수 |
|
|
평균 평점 |
|
|
가게 상태 |
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 |
|---|---|
|
검색 키워드 |
|
정렬 기준 (LATEST, RATING 등) |
|
페이지 번호 (0부터 시작) |
|
한 페이지당 개수 |
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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
가게 UUID |
|
|
가게 이름 |
|
|
리뷰 수 |
|
|
평균 평점 |
|
|
가게 상태 |
|
|
전체 가게 수 |
|
|
현재 페이지 번호 |
|
|
이전 페이지 존재 여부 |
|
|
다음 페이지 존재 여부 |
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
| Parameter | Description |
|---|---|
|
가게 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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
가게 UUID |
|
|
가게 이름 |
|
|
리뷰 수 |
|
|
평균 평점 |
|
|
가게 상태 |
|
|
메뉴 카테고리 목록 |
|
|
배달 가능 지역 여부 |
|
|
사용자 배달 가능 여부 |
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
| Parameter | Description |
|---|---|
|
가게 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 |
|---|---|---|
|
|
응답 코드 |
|
|
HTTP 상태 |
|
|
응답 메시지 |
|
|
응답 타임스탬프 |
|
|
가게 UUID |
|
|
가게 이름 |
|
|
가게 전화번호 |
|
|
사업자 등록 번호 |
|
|
가게 상세 설명 |
|
|
총 리뷰 수 |
|
|
평균 별점 |
|
|
가게 운영 상태 (OPEN, CLOSED) |
|
|
시/도 명칭 |
|
|
시/군/구 명칭 |
|
|
법정동/읍/면 명칭 |
|
|
도로명 주소 |
|
|
상세 주소 |
|
|
시/도 코드 |
|
|
시/군/구 코드 |
|
|
법정동 코드 |
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
| Parameter | Description |
|---|---|
|
가게 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 |
|---|---|---|
|
|
응답 코드 |
|
|
HTTP 상태 |
|
|
응답 메시지 |
|
|
응답 타임스탬프 |
|
|
총 리뷰 개수 |
|
|
평균 별점 |
|
|
리뷰 UUID |
|
|
주문 UUID |
|
|
작성자 UUID |
|
|
별점 |
|
|
리뷰 내용 |
|
|
본인 작성 여부 |
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 |
|---|---|---|
|
|
카테고리 UUID |
|
|
수정할 가게 이름 |
|
|
사업자 등록 번호 |
|
|
가게 전화번호 |
|
|
가게 설명 |
|
|
가게 주소 |
|
|
시도 코드 |
|
|
시도 이름 |
|
|
시군구 코드 |
|
|
시군구 이름 |
|
|
동 코드 |
|
|
동 이름 |
|
|
도로명 주소 |
|
|
상세 주소 |
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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
응답 데이터 (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
| Parameter | Description |
|---|---|
|
수정할 가게 UUID |
Request Fields
| Path | Type | Description |
|---|---|---|
|
|
카테고리 UUID |
|
|
수정할 가게 이름 |
|
|
가게 전화번호 |
|
|
가게 설명 |
|
|
가게 주소 |
|
|
시도 코드 |
|
|
시도 이름 |
|
|
시군구 코드 |
|
|
시군구 이름 |
|
|
동 코드 |
|
|
동 이름 |
|
|
도로명 주소 |
|
|
상세 주소 |
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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
응답 데이터 (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
| Parameter | Description |
|---|---|
|
상태를 변경할 가게 UUID |
Request Fields
| Path | Type | Description |
|---|---|---|
|
|
변경할 가게 상태 (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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
응답 데이터 (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
| Parameter | Description |
|---|---|
|
삭제할 가게 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 |
|---|---|---|
|
|
응답 코드 |
|
|
응답 메시지 |
|
|
HTTP 상태 |
|
|
응답 타임스탬프 |
|
|
응답 데이터 (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"
}