<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>멱등성 on 얼쑤 · Team Edo</title><link>https://team-edo.github.io/tags/%EB%A9%B1%EB%93%B1%EC%84%B1/</link><description>Recent content in 멱등성 on 얼쑤 · Team Edo</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Mon, 02 Nov 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://team-edo.github.io/tags/%EB%A9%B1%EB%93%B1%EC%84%B1/index.xml" rel="self" type="application/rss+xml"/><item><title>학습의 첫 완료 시각 지키기</title><link>https://team-edo.github.io/posts/2026/11/keep-first-lesson-completion/</link><pubDate>Mon, 02 Nov 2026 00:00:00 +0900</pubDate><guid>https://team-edo.github.io/posts/2026/11/keep-first-lesson-completion/</guid><description>&lt;p>얼쑤의 기초 학습에서 사용자는 단계를 끝낸 뒤 완료를 표시할 수 있습니다. 같은 단계를 다시 표시해도 처음 완료한 시각은 유지하기로 했습니다. 서버가 저장한 직후 응답이 끊겨 앱이 같은 요청을 다시 보낼 수 있고, 두 번 누른 요청이 거의 함께 도착할 수도 있기 때문입니다.&lt;/p>
&lt;h2 id="두-번째-요청은-시각을-갱신하지-않는다">중복 완료는 시각 유지&lt;/h2>
&lt;p>완료 여부의 범위는 회원과 학습 단계의 조합입니다. DB의 유일 키가 그 조합을 하나로 제한합니다. 처음에는 회원, 단계, 완료 시각을 삽입합니다. 같은 조합이 이미 있으면 &lt;code>ON DUPLICATE KEY UPDATE&lt;/code>에서 기존 ID를 자기 자신으로 대입해 값을 유지합니다. 서버가 각 요청을 다른 시각에 받더라도 저장된 시각은 한 번만 정해집니다.&lt;/p></description></item><item><title>동시 요청 네 건, 연습 세션 한 개</title><link>https://team-edo.github.io/posts/2026/10/practice-session-idempotency/</link><pubDate>Wed, 28 Oct 2026 00:00:00 +0900</pubDate><guid>https://team-edo.github.io/posts/2026/10/practice-session-idempotency/</guid><description>&lt;p>앱이 연습 세션을 만들라는 요청을 보냈는데 응답을 받기 전에 연결이 끊겼다고 가정해 봅시다. 서버에서는 이미 저장을 마쳤을 수도 있습니다. 앱이 같은 요청을 다시 보냈을 때 새 세션을 만들면 한 번의 연습에 세션이 두 개 생깁니다. 얼쑤에서는 앱이 재전송에도 같은 &lt;code>Idempotency-Key&lt;/code>를 쓰도록 하고, 서버는 같은 회원·키로 만들어진 세션을 다시 돌려주도록 했습니다.&lt;/p>
&lt;h2 id="두-요청이-모두-아직-없음을-볼-수-있다">중복 삽입을 막는 유일 제약&lt;/h2>
&lt;p>키가 들어오면 먼저 같은 회원이 그 키를 쓴 적이 있는지 조회합니다. 이미 세션이 있으면 저장 단계까지 갈 필요가 없습니다. 다만 두 요청이 거의 함께 오면 둘 다 저장 전에 조회를 마치고 “아직 없음”으로 판단할 수 있습니다.&lt;/p></description></item></channel></rss>