Skip to content

πŸš€[κΈ°λŠ₯μΆ”κ°€][Home] ν™ˆ ν”Όλ“œ API에 μ…”ν”Œ seed/cursor μΆ”κ°€ β€” λ°μ΄νŒ… 앱식 μˆœμ„œ λ‹€μ–‘ν™” (FE #903 후속)Β #743

Closed

Description

@Cassiiopeia

πŸ“ ν˜„μž¬ 문제점

ν™ˆ ν”Όλ“œ API(GET items μΆ”μ •)λŠ” ν˜„μž¬ pageNumber/pageSize/sortField만 λ°›μŒ.
ν”„λ‘ νŠΈ μΈ‘ μžλ™ μƒˆλ‘œκ³ μΉ¨ + seen-set μž¬μ •λ ¬μ„ κ΅¬ν˜„ν–ˆμœΌλ‚˜(FE #903, FE PR #904), 클라 λ‹¨λ…μœΌλ‘œλŠ” ν•œκ³„κ°€ λͺ…확함:

  • μƒˆλ‘œκ³ μΉ¨ν•΄λ„ 같은 μ •λ ¬ 기쀀이면 같은 μˆœμ„œκ°€ λ°˜ν™˜λ¨ β†’ λ°μ΄νŒ… μ•±μ²˜λŸΌ λ³Έ μΉ΄λ“œλ₯Ό μ •λ§λ‘œ μ•ˆ 보이게 ν•˜λ €λ©΄ μ„œλ²„κ°€ μ…”ν”Œν•΄μ•Ό 함
  • ν΄λΌμ΄μ–ΈνŠΈ seen-set은 λ©”λͺ¨λ¦¬ 휘발 + 100개 μ œν•œ + μ„Έμ…˜ λ‹¨μœ„ β†’ κ·Όλ³Έ ν•΄κ²°μ±… μ•„λ‹˜
  • νŽ˜μ΄μ§€λ„€μ΄μ…˜ 도쀑 μ •λ ¬ μˆœμ„œκ°€ 흔듀리면 쀑볡/λˆ„λ½ λ°œμƒ κ°€λŠ₯ (cursor λ―Έμ‚¬μš© μ‹œ)

κ΄€λ ¨ FE 이슈/PR:

πŸ› οΈ ν•΄κ²° λ°©μ•ˆ / μ œμ•ˆ κΈ°λŠ₯

ν™ˆ ν”Όλ“œ API에 μ…”ν”Œ seed λ˜λŠ” cursor μΆ”κ°€:

  • λ°©μ•ˆ A: shuffleSeed (ꢌμž₯)

    • 클라가 μƒˆλ‘œκ³ μΉ¨ μ‹œλ§ˆλ‹€ μƒˆ shuffleSeed: String (UUID λ˜λŠ” timestamp)λ₯Ό λ°œκΈ‰ν•΄ 전달
    • μ„œλ²„λŠ” μ •λ ¬ κΈ°μ€€ 적용 ν›„ 동일 seed λ‚΄μ—μ„œ deterministic shuffle μˆ˜ν–‰
    • 같은 seed둜 νŽ˜μ΄μ§€λ„€μ΄μ…˜ν•˜λ©΄ μˆœμ„œ μ•ˆμ •μ„± 보μž₯ (page 0β†’1β†’2 사이 쀑볡/λˆ„λ½ X)
    • μƒˆλ‘œκ³ μΉ¨ μ‹œ μƒˆ seed β†’ μ™„μ „νžˆ λ‹€λ₯Έ μˆœμ„œλ‘œ λ…ΈμΆœ
  • λ°©μ•ˆ B: cursor-based pagination

    • pageNumber λŒ€μ‹  μ„œλ²„κ°€ λ°œκΈ‰ν•œ cursor ν† ν°μœΌλ‘œ λ‹€μŒ νŽ˜μ΄μ§€ μš”μ²­
    • μ •λ ¬ λ³€κ²½/데이터 좔가에도 μ•ˆμ •μ μΈ νŽ˜μ΄μ§€ 경계 보μž₯
    • μ…”ν”Œκ³Ό κ²°ν•©ν•˜κΈ° κΉŒλ‹€λ‘œμ›€
  • λ°©μ•ˆ C: μ„œλ²„ μΈ‘ seen-set (memberId 기반)

    • λ°±μ—”λ“œκ°€ μ‚¬μš©μžλ³„ 졜근 λ³Έ μ•„μ΄ν…œμ„ μ €μž₯ν•˜κ³  μš°μ„ μˆœμœ„ κ°•λ“±
    • κ°€μž₯ μ •ν™•ν•˜μ§€λ§Œ 인프라 λΆ€λ‹΄ 큼 (μΊμ‹œ/μ„Έμ…˜ μ €μž₯μ†Œ ν•„μš”)

β†’ λ°©μ•ˆ A μΆ”μ²œ. κ΅¬ν˜„ λ‹¨μˆœ + FEμ—μ„œ 이미 λΉ„μŠ·ν•œ λ°œμƒμœΌλ‘œ 클라 seen-set μ‚¬μš© 쀑.

βš™οΈ μž‘μ—… λ‚΄μš©

  • ItemRequest(λ˜λŠ” ν™ˆ ν”Όλ“œ μ „μš© DTO)에 shuffleSeed: String? ν•„λ“œ μΆ”κ°€
  • μ„œλ²„ μΈ‘μ—μ„œ μ •λ ¬ 적용 ν›„ seed 기반 shuffle 둜직 κ΅¬ν˜„ (Random(seed.hashCode) λ“± deterministic)
  • 같은 seed둜 page 0~N 호좜 μ‹œ μˆœμ„œ μ•ˆμ •μ„± 검증 ν…ŒμŠ€νŠΈ
  • FE에 API μŠ€νŽ™ 곡유 (FEλŠ” μƒˆλ‘œκ³ μΉ¨ μ‹œ μƒˆ seed λ°œκΈ‰, loadMore μ‹œ 같은 seed μœ μ§€)
  • FE μΈ‘ seen-set μœ μ§€ν•˜λ˜, μ„œλ²„ seed λ„μž… ν›„μ—λŠ” 보쑰 μˆ˜λ‹¨μœΌλ‘œ κ²©ν•˜

πŸ™‹β€β™‚οΈ λ‹΄λ‹Ήμž

  • λ°±μ—”λ“œ: 이름
  • ν”„λ‘ νŠΈμ—”λ“œ: SUH SAECHAN (FE 연동)

Activity

  1. self-assigned this
    on May 31, 2026
  2. github-actions commented on May 31, 2026

    @github-actions

    Chuseok22 Issue Helper

    브랜치λͺ…

    20260531_#743_ν™ˆ_ν”Όλ“œ_API에_μ…”ν”Œ_seed_cursor_μΆ”κ°€_λ°μ΄νŒ…_앱식_μˆœμ„œ_λ‹€μ–‘ν™”_FE_903_후속
    

    컀밋 λ©”μ‹œμ§€

    ν™ˆ_ν”Όλ“œ_API에_μ…”ν”Œ_seed_cursor_μΆ”κ°€_λ°μ΄νŒ…_앱식_μˆœμ„œ_λ‹€μ–‘ν™”_FE_903_후속 : feat : {λ³€κ²½ 사항에 λŒ€ν•œ μ„€λͺ…} https://github.com/TEAM-ROMROM/RomRom-BE/issues/743
    
  3. Cassiiopeia commented on Jun 13, 2026

    @Cassiiopeia
    MemberAuthor

    πŸ“‹ μž‘μ—… 정리 β€” #743

    ꡬ뢄: κΈ°λŠ₯ κ°œμ„ /μΆ”κ°€

    μš”μ•½

    ν™ˆ ν”Όλ“œ API에 shuffleSeed(ꢌμž₯) λ˜λŠ” cursor μΆ”κ°€. 동일 seed λ‚΄ deterministic shuffle둜 νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ•ˆμ •μ„± + μƒˆλ‘œκ³ μΉ¨ μ‹œ μˆœμ„œ λ‹€μ–‘ν™”.

    처리

    • λ³Έ 이슈 λ‚΄μš©μ„ κ²€ν† ν•˜μ—¬ 정리 μ™„λ£Œ
    • μƒνƒœ: μž‘μ—…μ™„λ£Œ 처리
  4. added
    μž‘μ—…μ™„λ£Œμž‘μ—… μ™„λ£Œ μƒνƒœμΈ 경우 (이슈 폐쇄)
    and removed
    μž‘μ—…μ „μž‘μ—… μ‹œμž‘ μ „ μ€€λΉ„ μƒνƒœ
    on Jun 13, 2026
  5. moved this from μž‘μ—…μ „ to μž‘μ—…μ™„λ£Œ in RomRom ν”„λ‘œμ νŠΈ 관리on Jun 13, 2026
  6. added
    μž‘μ—…μ „μž‘μ—… μ‹œμž‘ μ „ μ€€λΉ„ μƒνƒœ
    and removed
    μž‘μ—…μ™„λ£Œμž‘μ—… μ™„λ£Œ μƒνƒœμΈ 경우 (이슈 폐쇄)
    on Jun 13, 2026
  7. moved this from μž‘μ—…μ™„λ£Œ to μž‘μ—…μ „ in RomRom ν”„λ‘œμ νŠΈ 관리on Jun 13, 2026
  8. Cassiiopeia commented on Nov 3, 2026

    @Cassiiopeia
    MemberAuthor

    처리: #841둜 κ΅¬ν˜„ μ™„λ£Œ

    이 이슈의 λͺ©ν‘œλŠ” 두 κ°€μ§€μ˜€μŠ΅λ‹ˆλ‹€. μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ μˆœμ„œκ°€ λ°”λ€Œκ³ , 같은 seed둜 νŽ˜μ΄μ§€λ₯Ό λ„˜κΈ°λ©΄ μ€‘λ³΅Β·λˆ„λ½μ΄ μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이 λͺ©ν‘œλŠ” #841(PR #842, v1.6.123 배포)μ—μ„œ μ„œλ²„μ— κ΅¬ν˜„λμŠ΅λ‹ˆλ‹€.

    이 이슈 μ œμ•ˆ #841 κ΅¬ν˜„
    λ°©μ•ˆ A: shuffleSeed둜 같은 seed μ•ˆμ—μ„œ κ³ μ • μ…”ν”Œ feedSeed(Long): μΆ”μ²œμˆœ μ μˆ˜μ— 글별 μ‹œλ“œ κ³ μ • 가산점(0~0.15)을 더해 λΉ„μŠ·ν•œ 점수끼리 μ„žμŒ. 같은 μ‹œλ“œλ©΄ νŽ˜μ΄μ§€ κ°„ μˆœμ„œκ°€ κ°™μŒ
    λ°©μ•ˆ C: μ„œλ²„ μΈ‘ λ³Έ κΈ€ κ°•λ“± recentlySeenItemIds(μ΅œλŒ€ 200건): λͺ¨λ“  μ •λ ¬μ—μ„œ λ³Έ 글을 맨 λ’€λ‘œ 보냄
    • 이 이슈용으둜 블둝 μ…”ν”Œ shuffleSeed도 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 같은 일을 ν•˜λŠ” νŒŒλΌλ―Έν„°κ°€ 두 κ°œκ°€ 되면 앱이 무엇을 써야 ν• μ§€ ν—·κ°ˆλ €μ„œ, λ¨Έμ§€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ½”λ“œλŠ” 브랜치 20260531_#743_…에 컀밋 dceed10b둜 남아 μžˆμŠ΅λ‹ˆλ‹€.
    • FE 연동은 feedSeed와 recentlySeenItemIds κΈ°μ€€μœΌλ‘œ μ§„ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€(μƒˆλ‘œκ³ μΉ¨λ§ˆλ‹€ μƒˆ feedSeed, λ‹€μŒ νŽ˜μ΄μ§€λŠ” 같은 κ°’ μœ μ§€).
    • #841의 feedSeedλŠ” μΆ”μ²œμˆœ(RECOMMENDED)μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. μ΅œμ‹ μˆœΒ·κ±°λ¦¬μˆœμ—μ„œλ„ μ„žκΈ°κ°€ ν•„μš”ν•΄μ§€λ©΄ πŸš€[κΈ°λŠ₯κ°œμ„ ][ν™ˆ] ν™ˆ ν”Όλ“œ λ‹€μ–‘μ„±: λ³Έ κΈ€ λ’€λ‘œ λ³΄λ‚΄κΈ°Β·μƒˆλ‘œκ³ μΉ¨λ§ˆλ‹€ μˆœμ„œ μ„žκΈ°Β #841 κ΅¬ν˜„μ„ ν™•μž₯ν•˜λŠ” λ°©ν–₯으둜 μ§„ν–‰ν•˜μ„Έμš”.
  9. added
    μž‘μ—…μ™„λ£Œμž‘μ—… μ™„λ£Œ μƒνƒœμΈ 경우 (이슈 폐쇄)
    and removed
    μž‘μ—…μ „μž‘μ—… μ‹œμž‘ μ „ μ€€λΉ„ μƒνƒœ
    on Nov 3, 2026
  10. moved this from μž‘μ—…μ „ to μž‘μ—…μ™„λ£Œ in RomRom ν”„λ‘œμ νŠΈ 관리on Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

μž‘μ—…μ™„λ£Œμž‘μ—… μ™„λ£Œ μƒνƒœμΈ 경우 (이슈 폐쇄)

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions