Skip to content

๐Ÿ”€ :: (#72) - ์•Œ๋ฆผ ๋ชฉ๋ก API ์—ฐ๋™ - #73

Open
leesengjun wants to merge 1 commit into
developfrom
feature/72-notification-list-api
Open

leesengjun wants to merge 1 commit into
developfrom
feature/72-notification-list-api

Conversation

@leesengjun

Copy link
Copy Markdown
Collaborator

๊ฐœ์š”

Student App์˜ ์•Œ๋ฆผ ๋ชฉ๋ก ํ™”๋ฉด์— ์‹ค์ œ ์•Œ๋ฆผ ๋ชฉ๋ก API๋ฅผ ์—ฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด Mock/๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ Swagger ๊ธฐ์ค€ ์‹ค์ œ API ์‘๋‹ต์œผ๋กœ ๊ต์ฒดํ•˜๊ณ ,
๊ธฐ์กด Figma ์•Œ๋ฆผ UI ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ „์ฒด / ์ฝ์ง€ ์•Š์Œ ํƒญ์ด ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ด์Šˆ

์ž‘์—… ๋‚ด์šฉ

์•Œ๋ฆผ ๋ชฉ๋ก API ์—ฐ๋™

  • GET /api/v1/notifications API ์—ฐ๋™
  • ๊ธฐ์กด Notification Feature ๊ตฌ์กฐ์— ์‹ค์ œ API ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ
  • ๊ธฐ์กด Mock/๋กœ์ปฌ ์•Œ๋ฆผ ๋ชฉ๋ก ์กฐํšŒ ๋กœ์ง ๊ต์ฒด
  • ๊ธฐ์กด Network / Repository / ViewModel ๊ตฌ์กฐ ์œ ์ง€

์ „์ฒด / ์ฝ์ง€ ์•Š์Œ ํƒญ

  • ์ „์ฒด ํƒญ
    • unreadOnly=false
  • ์ฝ์ง€ ์•Š์Œ ํƒญ
    • unreadOnly=true

ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž„์˜๋กœ ํ•„ํ„ฐ๋งํ•˜์ง€ ์•Š๊ณ ,
์„œ๋ฒ„์˜ unreadOnly Query๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ ์‘๋‹ต ์ฒ˜๋ฆฌ

๋‹ค์Œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์กด ์•Œ๋ฆผ UI ๋ชจ๋ธ์— ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • notificationId
  • notificationType
  • title
  • content
  • targetType
  • targetId
  • targetAvailable
  • targetUnavailableReason
  • deepLink
  • read
  • readAt
  • createdAt

nullable ํ•„๋“œ๋Š” Swagger ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Pagination / unreadCount

์•Œ๋ฆผ ๋ชฉ๋ก ์‘๋‹ต์˜ Pagination ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • page
  • size
  • totalElements
  • totalPages
  • first
  • last
  • unreadCount

unreadCount๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋‚˜ ํ˜„์žฌ ํ•„ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ
ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„ ์‘๋‹ต ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์ ‘๊ทผ ์ƒํƒœ

์„œ๋ฒ„์—์„œ ๊ณ„์‚ฐํ•ด ๋‚ด๋ ค์ฃผ๋Š” ๋‹ค์Œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • targetAvailable
  • targetUnavailableReason
  • deepLink

์•Œ๋ฆผ ๋Œ€์ƒ ๊ณต๊ณ /ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด
ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณ„๋„์˜ API๋ฅผ ์ถ”๊ฐ€ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ์žฌ๊ณ„์‚ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด Figma์— ์กด์žฌํ•˜๋Š” ๋Œ€์ƒ ์‚ญ์ œ / ์ ‘๊ทผ ๋ถˆ๊ฐ€ ์ƒํƒœ UI๋ฅผ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด UI ์ƒํƒœ ์œ ์ง€

๊ธฐ์กด Figma ์•Œ๋ฆผ UI๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ „์ฒด ์•Œ๋ฆผ
  • ์ฝ์ง€ ์•Š์€ ์•Œ๋ฆผ
  • Empty
  • Loading
  • Network Error
  • ๋Œ€์ƒ ์‚ญ์ œ
  • ์ ‘๊ทผ ๋ถˆ๊ฐ€

์ƒˆ๋กœ์šด ํ™”๋ฉด์ด๋‚˜ UI๋Š” ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ PR์—์„œ ์ œ์™ธํ•œ ์ž‘์—…

์ด๋ฒˆ PR์€ ์•Œ๋ฆผ ๋ชฉ๋ก ์กฐํšŒ๋งŒ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ธฐ๋Šฅ์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • PATCH /api/v1/notifications/read
  • ๋‹จ๊ฑด ์•Œ๋ฆผ ์ฝ์Œ ์ฒ˜๋ฆฌ
  • ์ „์ฒด ์•Œ๋ฆผ ์ฝ์Œ ์ฒ˜๋ฆฌ
  • GET /api/v1/notifications/unread-count
  • DELETE /api/v1/notifications/{notificationId}
  • ์•Œ๋ฆผ ์‚ญ์ œ
  • FCM
  • Push Notification ์ˆ˜์‹ 
  • Deep Link Navigation ์‹ ๊ทœ ๊ตฌํ˜„
  • ๋กœ๊ทธ์ธ / ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Access Token ํ•˜๋“œ์ฝ”๋”ฉ
  • ์ƒˆ๋กœ์šด UI ์ถ”๊ฐ€
  • ๋ถˆํ•„์š”ํ•œ Architecture ๋ฆฌํŒฉํ† ๋ง

ํ…Œ์ŠคํŠธ

  • ์•Œ๋ฆผ ๋ชฉ๋ก DTO Parsing
  • nullable ํ•„๋“œ Parsing
  • Pagination ์‘๋‹ต Parsing
  • unreadCount Parsing
  • unreadOnly=false Query ์ „๋‹ฌ
  • unreadOnly=true Query ์ „๋‹ฌ
  • Loading โ†’ Success
  • Loading โ†’ Empty
  • Loading โ†’ Network Error
  • ์ „์ฒด ์•Œ๋ฆผ UI
  • ์ฝ์ง€ ์•Š์Œ ์•Œ๋ฆผ UI
  • ๋Œ€์ƒ ์‚ญ์ œ ์ƒํƒœ
  • ์ ‘๊ทผ ๋ถˆ๊ฐ€ ์ƒํƒœ
  • flutter analyze
  • ๊ด€๋ จ Notification ํ…Œ์ŠคํŠธ
  • ์ „์ฒด flutter test
  • git diff --check
  • ์‹ค์ œ ๋กœ๊ทธ์ธ ์ƒํƒœ ์„œ๋ฒ„ 200 ์‘๋‹ต ํ…Œ์ŠคํŠธ

ํ™•์ธ ํ•„์š” ์‚ฌํ•ญ

ํ˜„์žฌ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•„ ์œ ํšจํ•œ Access Token์„ ์‚ฌ์šฉํ•œ
GET /api/v1/notifications ์‹ค์ œ ์„œ๋ฒ„ 200 ์‘๋‹ต ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

Swagger ๊ธฐ์ค€ API Contract์™€ Fake Repository / DTO / ViewModel / UI ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด
๊ตฌํ˜„์„ ๊ฒ€์ฆํ–ˆ์œผ๋ฉฐ, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์ด develop์— ๋ณ‘ํ•ฉ๋œ ์ดํ›„ ์‹ค์ œ ๊ณ„์ •์œผ๋กœ ๋‹ค์Œ ํ•ญ๋ชฉ์„ ํ™•์ธํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  • ์‹ค์ œ ์•Œ๋ฆผ ๋ชฉ๋ก ์กฐํšŒ
  • ์ „์ฒด / ์ฝ์ง€ ์•Š์Œ Query ๋™์ž‘
  • ์‹ค์ œ notificationType
  • ์‹ค์ œ unreadCount
  • ์‚ญ์ œ๋œ ๋Œ€์ƒ ์ƒํƒœ
  • ์ ‘๊ทผ ๋ถˆ๊ฐ€ ๋Œ€์ƒ ์ƒํƒœ
  • nullable ๋ฐ์ดํ„ฐ
  • Pagination
  • ์‹ค์ œ ์„œ๋ฒ„ Error Response

@leesengjun leesengjun self-assigned this Aug 29, 2026
@leesengjun leesengjun added โœจ feature ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ์ž‘์—… ๐ŸŸก priority: medium ์ผ๋ฐ˜์ ์ธ ์šฐ์„ ์ˆœ์œ„์˜ ๊ณ„ํš๋œ ์ž‘์—… ๐ŸŒ area: api API ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ƒํƒœ ๋ฐ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ์˜์—ญ labels Aug 29, 2026
.toList(growable: false),
};
}
List<NotificationItem> get visibleNotifications => notifications;

@minwoo0708 minwoo0708 Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correctness: "์ฝ์ง€ ์•Š์Œ" ํƒญ์—์„œ ์•Œ๋ฆผ์„ ์ฝ์Œ ์ฒ˜๋ฆฌํ•ด๋„ ๋” ์ด์ƒ ๋ชฉ๋ก์—์„œ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์—๋Š” NotificationFilter.unread๊ฐ€ ์„ ํƒ๋˜์—ˆ์„ ๋•Œ visibleNotifications๊ฐ€ !isRead๋กœ ํ•„ํ„ฐ๋งํ–ˆ์ง€๋งŒ, ์ง€๊ธˆ์€ ์„œ๋ฒ„์˜ unreadOnly ์ฟผ๋ฆฌ์— ์˜์กดํ•˜๋ฉฐ notifications๋ฅผ ํ•„ํ„ฐ๋ง ์—†์ด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ markAsRead / markAllAsRead๋Š” ์ด๋ฏธ ๋กœ๋“œ๋œ ๋ชฉ๋ก์˜ isRead ํ”Œ๋ž˜๊ทธ๋งŒ ๋กœ์ปฌ์—์„œ ๋ฐ”๊ฟ€ ๋ฟ, ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹คํŒจ ์‹œ๋‚˜๋ฆฌ์˜ค: ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ์ง€ ์•Š์Œ ํƒญ(unreadOnly=true๋กœ ์กฐํšŒ)์„ ์—ฐ ์ƒํƒœ์—์„œ NotificationCard๋ฅผ ํƒญํ•ฉ๋‹ˆ๋‹ค. handleNotificationTap์ด markAsRead(id)๋ฅผ ํ˜ธ์ถœํ•ด ๋กœ์ปฌ์—์„œ isRead=true๋กœ ๋ฐ”๊พธ๊ณ  unreadCount๋ฅผ ์ค„์ด์ง€๋งŒ, ์นด๋“œ๋Š” (์ฝ์Œ ์ƒํƒœ๋กœ ์Šคํƒ€์ผ๋งŒ ๋ฐ”๋€ ์ฑ„) ์‚ฌ์šฉ์ž๊ฐ€ ํƒญ์„ ์ „ํ™˜ํ•ด ์ƒˆ๋กœ fetch๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ฝ์ง€ ์•Š์Œ ํƒญ ๋ชฉ๋ก์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค. ์ด PR ์ด์ „์—๋Š”(์˜› visibleNotifications getter์˜ ํด๋ผ์ด์–ธํŠธ ์ธก ํ•„ํ„ฐ๋ง) ํ•ญ๋ชฉ์ด ์ฆ‰์‹œ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. PR ์„ค๋ช…์—์„œ ์˜๋„์ ์œผ๋กœ ์ œ์™ธํ•œ PATCH ์˜์†์„ฑ ๋ฌธ์ œ์™€๋Š” ๋ณ„๊ฐœ๋กœ, ์ด PR๋กœ ์ธํ•œ ์‹ค์ œ UX ํšŒ๊ท€๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

var unreadCount = 0;
var page = 0;

while (true) {

@minwoo0708 minwoo0708 Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Efficiency / Altitude: getNotifications๊ฐ€ ๋ฐ˜ํ™˜ ์ „์— ์„œ๋ฒ„์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ, ์ƒํ•œ ์—†์ด ๋Œ์–ด๋ชจ์๋‹ˆ๋‹ค.

while (true) ๋ฃจํ”„๊ฐ€ last๊ฐ€ true๊ฐ€ ๋˜๊ฑฐ๋‚˜ nextPage >= totalPages๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ _client.getNotifications(page: page, ...)๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์•Œ๋ฆผ์ด ์ˆ˜๋ฐฑ ๊ฐœ์ธ ์‚ฌ์šฉ์ž๋ผ๋ฉด ํ™”๋ฉด์ด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์ˆ˜์‹ญ ๋ฒˆ์˜ ์ˆœ์ฐจ์  ์™•๋ณต์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์ฒซ ์‘๋‹ต ์ดํ›„ totalPages๋ฅผ ์•Œ ์ˆ˜ ์žˆ์–ด ๋‚˜๋จธ์ง€๋ฅผ Future.wait๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ์—๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์Œ). ์ด๋Š” ์ตœ์ดˆ ๋กœ๋“œ, ํƒญ ์ „ํ™˜(selectFilter), ์žฌ์‹œ๋„ ์‹œ๋งˆ๋‹ค ๋งค๋ฒˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ€์ ธ์˜ค๋Š” ํŽ˜์ด์ง€ ์ˆ˜์— ์ƒํ•œ์ด ์—†์–ด์„œ, ์„œ๋ฒ„์˜ last/totalPages ๊ฐ’์ด ์š”์ฒญ ๊ฐ„์— ์ž˜๋ชป๋˜๊ฑฐ๋‚˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ ๋ฃจํ”„์— ์•ˆ์ „์žฅ์น˜๊ฐ€ ์—†์–ด ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ํŽ˜์ด์ง€๋„ค์ด์…˜ API์˜ ๋ชฉ์ ์ด ๋ฌด์ƒ‰ํ•ด์ง€๊ณ , ํ™”๋ฉด์„ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค "์ „๋ถ€ ๋‹ค ๊ฐ€์ ธ์˜ค๊ธฐ" ๋‹จ์ผ ํ˜ธ์ถœ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

final targetAvailable = dto.targetAvailable;
final isRead = dto.isRead;
final createdAt = dto.createdAt;
if (notificationId == null ||

@minwoo0708 minwoo0708 Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correctness / robustness: (์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ๊ฑธ์นœ) ๊ฒฐ๊ณผ ์ค‘ ์•Œ๋ฆผ ํ•˜๋‚˜๋ผ๋„ ํ˜•์‹์ด ์ž˜๋ชป๋˜๋ฉด ์ „์ฒด fetch๊ฐ€ ํ๊ธฐ๋˜๊ณ  ์ผ๋ฐ˜์ ์ธ "๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜"๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

notificationId, title, content, targetAvailable, isRead, createdAt ์ค‘ ํ•˜๋‚˜๋ผ๋„ null์ด๋ฉด _toDomain์ด FormatException์„ ๋˜์ง€๋Š”๋ฐ, ์ด ํ•„๋“œ๋“ค์€ ๋ชจ๋‘ NotificationSummaryResponseDto์—์„œ nullable๋กœ ๋ชจ๋ธ๋ง๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(PR ์„ค๋ช…์—๋„ "nullable ํ•„๋“œ๋Š” Swagger ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋ช…์‹œ). ์ด ๋กœ์ง์ด getNotifications์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋ฃจํ”„ ์•ˆ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ํŽ˜์ด์ง€ ์ค‘ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ์•Œ๋ฆผ ํ•˜๋‚˜๊ฐ€ ์ด ํ•„๋“œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ˆ„๋ฝ๋˜๋ฉด(์˜ˆ: title/content๊ฐ€ ์—†๋Š” SYSTEM ์•Œ๋ฆผ, ํ˜น์€ Swagger ๊ณ„์•ฝ์ƒ ์‹ค์ œ๋กœ ์˜ต์…”๋„ํ•œ ํ•„๋“œ) ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด ์ด๋ฏธ ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ํ๊ธฐ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ view model์˜ ํฌ๊ด„์ ์ธ on Object catch๊ฐ€ NotificationScreenStatus.networkError๋ฅผ ํ‘œ์‹œํ•˜๋Š”๋ฐ, ์ด๋Š” ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค -- ์‹ค์ œ๋กœ๋Š” ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ/๊ณ„์•ฝ ๋ฌธ์ œ์ด๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ๋ฌธ์ œ๊ฐ€ ๋œ ํ•ญ๋ชฉ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ „์ฒด ์•Œ๋ฆผ ๋ชฉ๋ก์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

๐ŸŒ area: api API ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ƒํƒœ ๋ฐ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ์˜์—ญ โœจ feature ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ์ž‘์—… ๐ŸŸก priority: medium ์ผ๋ฐ˜์ ์ธ ์šฐ์„ ์ˆœ์œ„์˜ ๊ณ„ํš๋œ ์ž‘์—…

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants