아이폰 자동화

iOS 27 단축어 실전 활용 설계: Storage로 링크 중복 저장 줄이기

같은 링크를 두 번 공유했을 때 Notion 페이지가 두 개 만들어지는 일을 줄이려면, 이전에 저장한 주소를 기억해야 합니다. iOS 27의 Storage는 단축어 실행이 끝나도 값을 보관하는 기능입니다. 이 글은 Storage를 링크 수집에 붙일 때 언제 기록하고, 실패하면 어디에서 멈출지를 한 사례로 설계합니다.

Apple WWDC26 설명에서 확인한 저장값의 읽기·쓰기·기기 간 동기화 개념을 바탕으로 합니다. 아래 표와 순서는 실행 전 설계이며, 실제 Notion 계정이나 아이폰에서 중복 처리를 통과한 기록은 아닙니다. 기능 전체의 변화는 iOS 27 단축어 신기능 정리에서 볼 수 있습니다.

예시는 URL 한 개, 단축어 한 개로 시작합니다

입력은 공유 시트로 받은 URL 한 개, 저장 대상은 Notion 링크 수집함으로 정합니다. 보관할 값의 이름은 예를 들어 saved_urls, 값의 형태는 URL 문자열 목록입니다. 이 이름은 이 글에서 정한 예시이며 iOS의 고정 메뉴 이름이 아닙니다.

실행 전 목록 공유한 주소 다음 행동
빈 목록 https://example.com/note-a 저장 시도 대상으로 선택
note-a의 전체 URL이 있음 동일한 전체 URL 새 페이지를 만들지 않고 이미 기록됐다고 안내
note-a의 전체 URL이 있음 https://example.com/note-b 새 주소이므로 저장 시도 대상으로 선택

example.com 주소는 설명용입니다. 처음에는 전체 문자열이 같은 URL만 중복으로 판단하도록 범위를 제한합니다. 추적 매개변수가 붙은 주소, 짧은 링크와 원래 링크, 끝의 슬래시가 다른 주소를 자동으로 같은 글이라고 판단하는 정규화는 이 예시에 포함하지 않습니다.

URL이 없으면 저장을 시작하지 않고, 여러 개면 한 주소를 고르거나 다시 공유하도록 안내하는 조건도 필요합니다. 주소를 고르는 규칙 없이 목록 전체를 요청 본문에 넣으면 의도와 다른 값이 전달될 수 있습니다.

성공한 뒤 목록을 바꿉니다

  1. 공유 입력에서 URL 한 개를 정하고 화면에 표시합니다.
  2. Storage에서 saved_urls를 읽습니다. 아직 값이 없다면 빈 목록에서 시작하도록 분기합니다.
  3. 같은 문자열이 이미 있으면 외부 저장 요청 없이 종료합니다.
  4. 없으면 Notion 페이지 생성 요청을 보냅니다.
  5. 정상 응답과 생성된 페이지의 URL 값이 요청한 주소와 맞는지 확인합니다.
  6. 저장이 확인된 경우에만 URL을 목록에 추가하고 Storage에 새 목록을 씁니다.

Notion 요청 전에 목록을 바꾸면 요청이 거절돼도 “이미 저장한 주소”만 남습니다. 반대로 Notion 저장은 성공했는데 Storage 기록이 실패할 수도 있습니다. 이때는 “외부 저장 확인, 단축어 목록 기록 실패”를 따로 보여줘야 다음 실행에서 중복을 막을 근거를 찾을 수 있습니다.

Apple은 여러 단축어가 같은 저장값을 쓸 때 Global Value를 설명합니다. 이 글처럼 단축어 하나만 쓰는 시작 예제에서는 값의 공유 범위를 넓힐 필요가 없습니다. Notion 토큰을 주소 목록에 섞거나 토큰이 든 단축어를 다른 사람에게 공유하지 않습니다.

“실패”를 두 가지로 나누면 중복 재시도를 줄일 수 있습니다

관찰한 결과 목록 처리 사용자에게 보여줄 내용
요청이 거절됐다는 오류 응답을 받음 성공 목록에 넣지 않음 어떤 오류로 중단됐는지 확인 후 원인 수정
연결이 끊겨 생성 응답을 받지 못함 성공도 미저장도 단정하지 않음 저장 여부 미확인. Notion에서 해당 URL을 먼저 찾아보기
Notion 페이지와 URL 값을 확인함 URL을 목록에 기록 저장된 페이지로 이동할 수 있도록 결과 표시
Notion 저장은 확인했지만 목록 기록 실패 기록 실패 상태를 따로 남김 재시도 전에 기존 Notion 페이지를 확인하고 목록 복구

응답을 받지 못했어도 서버가 페이지를 만들었을 수 있습니다. 이 상태를 단순 실패로 처리해 바로 다시 만들면 중복이 생길 수 있습니다. 처음 만드는 단축어에서는 무조건 자동 재시도하기보다 해당 URL의 저장 여부를 사람이 확인하고 재개하는 방식이 이해하기 쉽습니다.

실제로 조립한 뒤 확인할 다섯 가지

시험 입력 확인할 결과
아직 없는 URL 한 개 Notion 페이지 한 개의 URL이 맞고 목록에도 한 번 기록됨
바로 같은 URL을 다시 공유 새 Notion 페이지가 늘지 않음
URL이 없는 텍스트 또는 URL 두 개 정해둔 안내/선택 분기로 이동하고 임의의 주소를 저장하지 않음
거절 오류 응답 원인을 표시하고 성공 목록을 바꾸지 않음
저장 응답이 불명확한 상태 곧바로 같은 생성 요청을 보내지 않고 기존 저장 여부 확인으로 넘김

시험은 개인 자료와 분리한 작은 수집함에서 주소 하나부터 시작합니다. 테스트를 위해 운영 토큰이나 권한을 임의로 바꾸지 말고, 실패 분기는 고정된 예시 응답으로 먼저 확인한 다음 허용된 테스트 환경에서 실제 응답과 대조할 수 있습니다.

동기화가 있어도 동시 실행까지 해결되지는 않습니다

Apple은 Storage 값이 기기 사이에 동기화된다고 설명합니다. 그러나 이 사실만으로 두 기기가 동시에 같은 URL을 읽고 저장할 때 중복이 차단된다고 보장할 수는 없습니다. 두 실행이 목록 갱신 전에 모두 “없음”을 읽을 수 있기 때문입니다.

처음에는 한 기기에서 순서대로 실행하는 범위로 시작하세요. 여러 기기나 동시 실행까지 지원하려면 실제 동기화 시점과 저장 측의 중복 판정 방법을 추가로 확인해야 합니다. 이 글의 문자열 목록은 모든 경우를 막는 잠금 장치가 아닙니다.

기초 동작 연결부터 익히려면 텍스트를 확인하고 메모에 저장하는 입문 예제로 시작할 수 있습니다. 조건에 따라 자동으로 켜지는 간단한 예시는 배터리 잔량과 저전력 모드에 정리했습니다.

자료 확인·편집: 2026-09-27. iOS 27 Storage의 개념은 Apple WWDC26 발표를 확인했습니다. URL 중복 판정과 실패 처리 순서는 이 글의 설계 제안입니다.