From 3c9c0cca92e9035f815cd4474a3eda30a566605f Mon Sep 17 00:00:00 2001 From: GeonHwan Cha Date: Sat, 7 Feb 2026 01:11:30 +0900 Subject: [PATCH 1/2] feat: migrate to kakao CDN and namespace - Change default script URL from t1.daumcdn.net to t1.kakaocdn.net - Add window.kakao type declarations alongside window.daum - Resolve PostcodeConstructor with kakao-first, daum-fallback strategy - Update script element ID to kakao_postcode_script - Update README guide links to postcode.map.kakao.com Ref: daumPostcode/QnA#1498 --- README.md | 20 ++++++++++---------- src/loadPostcode.ts | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 556c893..6987852 100644 --- a/README.md +++ b/README.md @@ -49,18 +49,18 @@ const Postcode = () => { | name | type | default | description |:----:|:----:|:-------:|:-----------| -| scriptUrl | `string` | [CURRENT_URL](https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| -| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | -| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| scriptUrl | `string` | [CURRENT_URL](https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| +| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | | onClose | `function` | `undefined` | 검색 결과를 선택하여, 서비스가 닫힐 때 실행되는 콜백함수입니다. | -| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | | className | `string` | `undefined` | 우편번호 검색창을 감싸는 최상위 엘리먼트에 적용할 클래스 이름입니다. | | style | `object` | `{ width:"100%", height:400 }` | 우편번호 검색창을 감싸는 최상위 엘리먼트에 적용할 스타일입니다. | | defaultQuery | `string` | `undefined` | 우편번호 검색창에 기본으로 입력할 검색어입니다. | autoClose | `boolean` | `true` | 우편번호 검색 완료시 자동 닫힘 여부입니다. 주소를 선택하면, 최상위 엘리먼트를 돔에서 제거합니다. | | errorMessage | `ReactNode` | `

현재 Daum 우편번호 서비스를 이용할 수 없습니다. 잠시 후 다시 시도해주세요.

` | 우편번호 서비스 스크립트 로드에 실패했을 때 나타낼 에러 메세지 입니다. | -기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](http://postcode.map.daum.net/guide#attributes)를 참고해주세요. +기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](https://postcode.map.kakao.com/guide#attributes)를 참고해주세요. ## Popup @@ -106,11 +106,11 @@ const Postcode = () => { | name | type | default | description |:----:|:----:|:-------:|:-----------| -| scriptUrl | `string` | [CURRENT_URL](https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| -| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | -| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| scriptUrl | `string` | [CURRENT_URL](https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| +| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | | onClose | `function` | `undefined` | 검색 결과를 선택하여, 서비스가 닫힐 때 실행되는 콜백함수입니다. | -| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | | width | `string\|number` | `undefined` | 우편번호 검색창의 가로 너비입니다. | | height | `string\|number` | `undefined` | 우편번호 검색창의 세로 높이입니다. | | defaultQuery | `string` | `undefined` | 우편번호 검색창에 기본으로 입력할 검색어입니다. | @@ -120,7 +120,7 @@ const Postcode = () => { | popupKey | `string` | `undefined` | 팝업창의 key 입니다. 전달하지 않을 경우 매번 새창이 열리게 됩니다. | | autoClose | `boolean` | `true` | 우편번호 검색 완료시 자동 닫힘 여부입니다. 주소를 선택하면 팝업창이 닫힙니다. -기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](http://postcode.map.daum.net/guide#attributes)를 참고해주세요. +기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](https://postcode.map.kakao.com/guide#attributes)를 참고해주세요. ## 안내 diff --git a/src/loadPostcode.ts b/src/loadPostcode.ts index f1c7172..5111edf 100644 --- a/src/loadPostcode.ts +++ b/src/loadPostcode.ts @@ -8,6 +8,14 @@ declare global { }; Postcode: PostcodeConstructor; }; + kakao?: { + postcode: { + load: (fn: () => void) => void; + version: string; + _validParam_: boolean; + }; + Postcode: PostcodeConstructor; + }; } } @@ -124,10 +132,10 @@ export interface Postcode { embed(element: HTMLElement, embedOptions?: EmbedOptions): void; } -export const postcodeScriptUrl = 'https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js'; +export const postcodeScriptUrl = 'https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js'; const loadPostcode = (function () { - const scriptId = 'daum_postcode_script'; + const scriptId = 'kakao_postcode_script'; let promise: Promise | null = null; return function (url: string = postcodeScriptUrl): Promise { @@ -137,8 +145,9 @@ const loadPostcode = (function () { const script = document.createElement('script'); script.src = url; script.onload = () => { - if (window?.daum?.Postcode) { - return resolve(window.daum.Postcode); + const PostcodeConstructor = window?.kakao?.Postcode ?? window?.daum?.Postcode; + if (PostcodeConstructor) { + return resolve(PostcodeConstructor); } reject(new Error('Script is loaded successfully, but cannot find Postcode module. Check your scriptURL property.')); }; From 558ea3ee50fa0634eb15946b7f2daecf93ab6f2e Mon Sep 17 00:00:00 2001 From: GeonHwan Cha Date: Tue, 17 Feb 2026 22:10:06 +0900 Subject: [PATCH 2/2] docs: revert guide URL changes in README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 가이드 주소(postcode.map.kakao.com)가 3월 10일 이후 변경 예정으로, 현재 접속 불가한 URL을 기존 주소(postcode.map.daum.net)로 원복합니다. CDN 경로(kakaocdn.net) 변경은 유지합니다. --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6987852..d8d99e6 100644 --- a/README.md +++ b/README.md @@ -50,17 +50,17 @@ const Postcode = () => { | name | type | default | description |:----:|:----:|:-------:|:-----------| | scriptUrl | `string` | [CURRENT_URL](https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| -| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | -| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | | onClose | `function` | `undefined` | 검색 결과를 선택하여, 서비스가 닫힐 때 실행되는 콜백함수입니다. | -| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | | className | `string` | `undefined` | 우편번호 검색창을 감싸는 최상위 엘리먼트에 적용할 클래스 이름입니다. | | style | `object` | `{ width:"100%", height:400 }` | 우편번호 검색창을 감싸는 최상위 엘리먼트에 적용할 스타일입니다. | | defaultQuery | `string` | `undefined` | 우편번호 검색창에 기본으로 입력할 검색어입니다. | autoClose | `boolean` | `true` | 우편번호 검색 완료시 자동 닫힘 여부입니다. 주소를 선택하면, 최상위 엘리먼트를 돔에서 제거합니다. | | errorMessage | `ReactNode` | `

현재 Daum 우편번호 서비스를 이용할 수 없습니다. 잠시 후 다시 시도해주세요.

` | 우편번호 서비스 스크립트 로드에 실패했을 때 나타낼 에러 메세지 입니다. | -기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](https://postcode.map.kakao.com/guide#attributes)를 참고해주세요. +기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](http://postcode.map.daum.net/guide#attributes)를 참고해주세요. ## Popup @@ -107,10 +107,10 @@ const Postcode = () => { | name | type | default | description |:----:|:----:|:-------:|:-----------| | scriptUrl | `string` | [CURRENT_URL](https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js) | Daum 우편번호 서비스의 스크립트 주소입니다.| -| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | -| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onComplete | `function` | `undefined` | 우편번호 검색이 끝났을 때 사용자가 선택한 정보를 받아올 콜백함수입니다. 주소 데이터의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | +| onSearch | `function` | `undefined` | 주소를 검색할 경우 실행되는 콜백함수입니다. 검색 결과 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | | onClose | `function` | `undefined` | 검색 결과를 선택하여, 서비스가 닫힐 때 실행되는 콜백함수입니다. | -| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](https://postcode.map.kakao.com/guide)를 참고해주세요. | +| onResize | `function` | `undefined` | 검색 결과로 인해, 우편번호 서비스의 화면 크기가 변경될 때 호출되는 콜백함수입니다. 변경된 화면 정보의 구성은 [Daum 가이드](http://postcode.map.daum.net/guide)를 참고해주세요. | | width | `string\|number` | `undefined` | 우편번호 검색창의 가로 너비입니다. | | height | `string\|number` | `undefined` | 우편번호 검색창의 세로 높이입니다. | | defaultQuery | `string` | `undefined` | 우편번호 검색창에 기본으로 입력할 검색어입니다. | @@ -120,7 +120,7 @@ const Postcode = () => { | popupKey | `string` | `undefined` | 팝업창의 key 입니다. 전달하지 않을 경우 매번 새창이 열리게 됩니다. | | autoClose | `boolean` | `true` | 우편번호 검색 완료시 자동 닫힘 여부입니다. 주소를 선택하면 팝업창이 닫힙니다. -기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](https://postcode.map.kakao.com/guide#attributes)를 참고해주세요. +기타 Daum 우편번호 생성자 속성들을 동일한 이름으로 props를 전달할 수 있습니다. 속성값에 대해서는 [Daum 우편번호 서비스 가이드](http://postcode.map.daum.net/guide#attributes)를 참고해주세요. ## 안내