Skip to content

Latest commit

Β 

History

History
581 lines (450 loc) Β· 14.6 KB

File metadata and controls

581 lines (450 loc) Β· 14.6 KB

Mingling API λ¬Έμ„œ (ν”„λ‘ νŠΈμ—”λ“œμš©)

πŸ“‹ λͺ©μ°¨


곡톡 사항

κΈ°λ³Έ URL

Base URL: http://localhost:8888

곡톡 응닡 ν˜•μ‹

λͺ¨λ“  APIλŠ” λ‹€μŒ ν˜•μ‹μœΌλ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€:

성곡 응닡

{
    "success": true,
    "code": null,
    "message": null,
    "data": { ... },
    "timestamp": "2026-01-29T10:30:00"
}

μ—λŸ¬ 응닡

{
    "success": false,
    "code": "ERROR_CODE",
    "message": "μ—λŸ¬ λ©”μ‹œμ§€",
    "data": null,
    "timestamp": "2026-01-29T10:30:00"
}

검증 μ—λŸ¬ 응닡 (μ—¬λŸ¬ ν•„λ“œ μ—λŸ¬ μ‹œ)

{
    "success": false,
    "code": "VALIDATION_ERROR",
    "message": "μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.",
    "data": {
        "deadline": "마감 μ‹œκ°„μ€ ν˜„μž¬ μ‹œκ°„ 이후여야 ν•©λ‹ˆλ‹€."
    },
    "timestamp": "2026-01-29T10:30:00"
}

인증 방식

  • μ„Έμ…˜ 기반 인증 μ‚¬μš©
  • 쿠킀에 nickname, fakeSessionId 포함
  • 인증 ν•„μš”ν•œ APIλŠ” 각 μ„Ήμ…˜μ—μ„œ λͺ…μ‹œ

λͺ¨μž„ API

1. λͺ¨μž„ 생성

μƒˆλ‘œμš΄ λͺ¨μž„을 μƒμ„±ν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

POST /meeting

인증 ν•„μš”: ❌ μ—†μŒ

Request Body

{
    "meetingName": "μ‹ λ…„νšŒ",
    "purposes": ["친λͺ©", "νšŒμ‹"],
    "purposeCount": 2,
    "capacity": 10,
    "deadline": "2026-01-30T23:59:59"
}
ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingName String βœ… λͺ¨μž„ 이름
purposes Array[String] βœ… λͺ¨μž„ λͺ©μ  리슀트 (친λͺ©, νšŒμ‹, μŠ€ν„°λ”” λ“±)
purposeCount Integer βœ… λͺ¨μž„ λͺ©μ  개수
capacity Integer βœ… λͺ¨μž„ 정원 (μ΅œμ†Œ 2λͺ… 이상)
deadline DateTime βœ… 마감 μ‹œκ°„ (ISO 8601 ν˜•μ‹, 미래 μ‹œκ°„μ΄μ–΄μ•Ό 함)

Success Response (200 OK)

{
    "success": true,
    "data": {
        "meetingUrl": "https://mingling.com/meeting/62db1c35-f7db-4aad-acc8-0ad64f61a312",
        "meetingId": "62db1c35-f7db-4aad-acc8-0ad64f61a312"
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
400 VALIDATION_ERROR μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 검증 μ‹€νŒ¨ (μš°μ„ μˆœμœ„ 순으둜 ν•˜λ‚˜λ§Œ λ°˜ν™˜)
400 PURPOSE_NOT_FOUND 일뢀 λͺ¨μž„ λͺ©μ μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ •μ˜λ˜μ§€ μ•Šμ€ λͺ©μ λͺ… 포함

검증 μ—λŸ¬ μš°μ„ μˆœμœ„

  1. deadline - 마감 μ‹œκ°„μ€ ν˜„μž¬ μ‹œκ°„ 이후여야 ν•©λ‹ˆλ‹€.
  2. capacity - λͺ¨μž„ 인원은 μ΅œμ†Œ 2λͺ… 이상이어야 ν•©λ‹ˆλ‹€.
  3. 기타 ν•„μˆ˜ ν•„λ“œ

검증 μ—λŸ¬ μ˜ˆμ‹œ

{
    "success": false,
    "code": "VALIDATION_ERROR",
    "message": "μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.",
    "data": {
        "deadline": "마감 μ‹œκ°„μ€ ν˜„μž¬ μ‹œκ°„ 이후여야 ν•©λ‹ˆλ‹€."
    },
    "timestamp": "2026-01-29T10:30:00"
}

2. λͺ¨μž„ μ°Έμ—¬ ν˜„ν™© 쑰회

λͺ¨μž„μ˜ 전체 정원, ν˜„μž¬ μ°Έμ—¬μž 수, μ°Έμ—¬μž λͺ©λ‘μ„ μ‘°νšŒν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

GET /meeting/{meetingId}/status

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Success Response (200 OK)

{
    "success": true,
    "data": {
        "totalParticipantCount": 10,
        "currentParticipantCount": 2,
        "deadlineAt": "2026-01-23T23:00:00",
        "participants": [
            {
                "userName": "김밍글",
                "stationName": "κ΅¬λ‘œλ””μ§€ν„Έλ‹¨μ§€μ—­",
                "latitude": 37.485266,
                "longitude": 126.901401
            },
            {
                "userName": "이밍글",
                "stationName": "ν•©μ •μ—­",
                "latitude": 37.549556,
                "longitude": 126.913878
            }
        ]
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId

3. 쀑간지점 쑰회

λͺ¨μž„ μ°Έμ—¬μžλ“€μ˜ 쀑간지점 후보듀을 μ‘°νšŒν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

GET /meeting/{meetingId}/midpoint

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Session Attributes

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
userName String βœ… μ„Έμ…˜μ— μ €μž₯된 μ‚¬μš©μž 이름

Success Response (200 OK)

{
    "success": true,
    "data": {
        "midpoints": [
            {
                "name": "ν•©μ •μ—­",
                "latitude": 37.5484757,
                "longitude": 126.912071,
                "avgTravelTime": 30,
                "transferPath": "2ν˜Έμ„  > 6ν˜Έμ„ "
            },
            {
                "name": "μ„œμšΈμ—­",
                "latitude": 37.554648,
                "longitude": 126.972559,
                "avgTravelTime": 35,
                "transferPath": "1ν˜Έμ„  > 4ν˜Έμ„ "
            }
        ]
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId

4. μž₯μ†Œ μΆ”μ²œ

쀑간지점 근처의 λͺ¨μž„ λͺ©μ μ— λ§žλŠ” μž₯μ†Œλ₯Ό μΆ”μ²œν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

GET /meeting/{meetingId}/recommend?midPlace={쀑간지점λͺ…}&category={λͺ¨μž„λͺ©μ }

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Query Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
midPlace String βœ… 쀑간 지점 μž₯μ†Œλͺ… (예: "ν•©μ •μ—­")
category String βœ… λͺ¨μž„ λͺ©μ  (예: "νšŒμ‹")

Success Response (200 OK)

{
    "success": true,
    "data": [
        {
            "title": "카페1",
            "roadAddress": "μ„œμšΈ λ™μž‘κ΅¬ λ™μž‘λŒ€λ‘œ..."
        },
        {
            "title": "카페2",
            "roadAddress": "μ„œμšΈ μ„œμ΄ˆκ΅¬ 방배천둜..."
        }
    ],
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId

5. λͺ¨μž„ κ²°κ³Ό 곡유

λͺ¨μž„ κ²°κ³Ό URL을 μ‘°νšŒν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

GET /meeting/{meetingId}/result

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId String βœ… λͺ¨μž„ μ‹λ³„μž

Success Response (200 OK)

{
    "success": true,
    "data": {
        "meetingUrl": "https://mingling.com/meeting/62db1c35-f7db-4aad-acc8-0ad64f61a312"
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId

μ°Έμ—¬μž API

1. λͺ¨μž„ μž…μž₯

λ‹‰λ„€μž„κ³Ό λΉ„λ°€λ²ˆν˜Έλ‘œ λͺ¨μž„에 μž…μž₯ν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

POST /participant/{meetingId}/enter

인증 ν•„μš”: ❌ μ—†μŒ (이 API둜 μ„Έμ…˜ 생성)

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Request Body

{
    "userId": "μŠ€μœ„ν”„",
    "password": "password123"
}
ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
userId String βœ… μ‚¬μš©μž 이름 (λ‹‰λ„€μž„)
password String βœ… λΉ„λ°€λ²ˆν˜Έ

Success Response (200 OK)

{
    "success": true,
    "data": null,
    "timestamp": "2026-01-29T10:30:00"
}

Response Headers

  • Set-Cookie: μ„Έμ…˜ μΏ ν‚€ 포함 (nickname, fakeSessionId)

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
400 VALIDATION_ERROR μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œ λˆ„λ½
401 INVALID_CREDENTIALS 인증 정보가 μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹‰λ„€μž„μ€ μ‘΄μž¬ν•˜μ§€λ§Œ λΉ„λ°€λ²ˆν˜Έ 뢈일치
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId

2. μΆœλ°œμ—­ 등둝

μ°Έμ—¬μžμ˜ μΆœλ°œμ—­μ„ λ“±λ‘ν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

POST /participant/{meetingId}/departure

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Session Attributes

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
nickname String βœ… μ„Έμ…˜μ— μ €μž₯된 λ‹‰λ„€μž„

Request Body

{
    "nickname": "김밍글",
    "departure": "κ΅¬λ‘œλ””μ§€ν„Έλ‹¨μ§€μ—­"
}
ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
nickname String βœ… μ°Έμ—¬μž 이름
departure String βœ… μΆœλ°œμ—­ 이름

Success Response (200 OK)

{
    "success": true,
    "data": {
        "nickname": "김밍글",
        "departure": "κ΅¬λ‘œλ””μ§€ν„Έλ‹¨μ§€μ—­",
        "latitude": 37.485266,
        "longitude": 126.901401
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
400 VALIDATION_ERROR μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œ λˆ„λ½
400 STATION_NOT_FOUND μœ νš¨ν•˜μ§€ μ•Šμ€ μ—­ μ΄λ¦„μž…λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ—­ 이름
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId
409 MEETING_CLOSED 이미 마감된 λͺ¨μž„μž…λ‹ˆλ‹€. λͺ¨μž„이 마감된 μƒνƒœ

3. μΆœλ°œμ—­ μˆ˜μ •

μ°Έμ—¬μžμ˜ μΆœλ°œμ—­μ„ μˆ˜μ •ν•©λ‹ˆλ‹€.

μ—”λ“œν¬μΈνŠΈ

PATCH /participant/{meetingId}/departure

인증 ν•„μš”: βœ… μ„Έμ…˜ ν•„μš”

Path Parameters

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
meetingId UUID βœ… λͺ¨μž„ μ‹λ³„μž

Session Attributes

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
nickname String βœ… μ„Έμ…˜μ— μ €μž₯된 λ‹‰λ„€μž„

Request Body

{
    "departure": "ν•©μ •μ—­"
}
ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
departure String βœ… μˆ˜μ •ν•  μΆœλ°œμ—­ 이름

Success Response (200 OK)

{
    "success": true,
    "data": {
        "nickname": "홍길동",
        "departure": "강남역",
        "latitude": 37.497942,
        "longitude": 127.027621
    },
    "timestamp": "2026-01-29T10:30:00"
}

Error Responses

HTTP Status Error Code Message λ°œμƒ 쑰건
400 STATION_NOT_FOUND μœ νš¨ν•˜μ§€ μ•Šμ€ μ—­ μ΄λ¦„μž…λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ—­ 이름
401 USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
404 MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” meetingId
409 MEETING_CLOSED 이미 마감된 λͺ¨μž„μž…λ‹ˆλ‹€. λͺ¨μž„이 마감된 μƒνƒœ

μ—λŸ¬ μ½”λ“œ 전체 λͺ©λ‘

400 Bad Request

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
BAD_REQUEST 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. 일반적인 잘λͺ»λœ μš”μ²­
VALIDATION_ERROR μš”μ²­ 값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μž…λ ₯κ°’ 검증 μ‹€νŒ¨ (data에 상세 정보 포함)
PURPOSE_NOT_FOUND 일뢀 λͺ¨μž„ λͺ©μ μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ •μ˜λ˜μ§€ μ•Šμ€ λͺ¨μž„ λͺ©μ  포함
STATION_NOT_FOUND μœ νš¨ν•˜μ§€ μ•Šμ€ μ—­ μ΄λ¦„μž…λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ§€ν•˜μ² μ—­

401 Unauthorized

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
UNAUTHORIZED 인증이 ν•„μš”ν•©λ‹ˆλ‹€. 인증 정보 μ—†μŒ
USER_UNAUTHORIZED μ‚¬μš©μž 인증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. μ„Έμ…˜ μ—†μŒ λ˜λŠ” 만료
INVALID_CREDENTIALS 인증 정보가 μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹‰λ„€μž„/λΉ„λ°€λ²ˆν˜Έ 뢈일치

403 Forbidden

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
FORBIDDEN μ ‘κ·Ό κΆŒν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. κΆŒν•œ μ—†μŒ

404 Not Found

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
NOT_FOUND μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. 일반적인 λ¦¬μ†ŒμŠ€ μ—†μŒ
MEETING_NOT_FOUND λͺ¨μž„을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λͺ¨μž„ ID

409 Conflict

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
CONFLICT μš”μ²­μ΄ ν˜„μž¬ λ¦¬μ†ŒμŠ€ μƒνƒœμ™€ μΆ©λŒν•©λ‹ˆλ‹€. 일반적인 좩돌
MEETING_CLOSED 이미 마감된 λͺ¨μž„μž…λ‹ˆλ‹€. λͺ¨μž„이 마감된 μƒνƒœ

500 Internal Server Error

μ—λŸ¬ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
INTERNAL_SERVER_ERROR μ„œλ²„ λ‚΄λΆ€ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ„œλ²„ 였λ₯˜
HOT_PLACE_NOT_FOUND ν•«ν”Œλ ˆμ΄μŠ€ 정보λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. ν•«ν”Œλ ˆμ΄μŠ€ 쑰회 μ‹€νŒ¨

μ°Έκ³  사항

DateTime ν˜•μ‹

  • ISO 8601 ν˜•μ‹ μ‚¬μš©: YYYY-MM-DDTHH:mm:ss
  • μ˜ˆμ‹œ: 2026-01-30T23:59:59
  • μ‹œκ°„λŒ€: Asia/Seoul (KST)

UUID ν˜•μ‹

  • ν‘œμ€€ UUID ν˜•μ‹ (36자)
  • μ˜ˆμ‹œ: 62db1c35-f7db-4aad-acc8-0ad64f61a312

μ„Έμ…˜ 관리

  • μΏ ν‚€ 기반 μ„Έμ…˜
  • μ„Έμ…˜ 유효 κΈ°κ°„: 7일 (60 * 60 * 24 * 7초)
  • μΏ ν‚€ 이름: nickname, fakeSessionId

검증 μ—λŸ¬ 응닡 μš°μ„ μˆœμœ„

λͺ¨μž„ 생성 APIμ—μ„œ μ—¬λŸ¬ ν•„λ“œμ— μ—λŸ¬κ°€ μžˆμ„ 경우, λ‹€μŒ μš°μ„ μˆœμœ„λ‘œ ν•˜λ‚˜μ˜ μ—λŸ¬λ§Œ λ°˜ν™˜λ©λ‹ˆλ‹€:

  1. deadline (마감 μ‹œκ°„)
  2. capacity (정원)
  3. 기타 ν•„μˆ˜ ν•„λ“œ (μˆœμ„œ 무관)

λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ: 2026-01-29