이 페이지는 브라우저 SDK
edicus-sdk-v2.js에서 @edicus/sdk v3으로 옮기는 방법입니다. Server API의 v2 경로(/v2/...)와는 관계가 없습니다.edicus-sdk-v2.js(<script src>로 사이트에 직접 추가하던 기존 SDK, ver 2.0.3)를 쓰고 계시다면 선택지가 둘입니다.
무수정 경로
<script src> 한 줄만 바꿉니다. 기존 메서드를 v2와 같은 이름, 같은 콜백 모양으로 계속 씁니다.새 API로 전환
createEdicusClient 기반의 타입 지정 세션 API로 옮깁니다. 신규 코드에는 이 경로를 권합니다.1. 무수정 경로
기존:@3.0.0-alpha.2)을 적어 주세요. @3 같은 버전 범위는 프리릴리스를 고르지 않아서 3.0.0 정식 버전이 나오기 전에는 파일을 찾지 못합니다. 정식 버전이 나온 뒤에는 major 버전(@3)만 고정해서 쓰시기를 권합니다. 이 한 줄 교체 뒤에는 window.edicusSDK.init(config)부터 editor.create_project(params, callback) 같은 기존 호출 코드를 그대로 두셔도 됩니다.
npm으로 번들링하는 프로젝트라면 @edicus/sdk/legacy를 직접 임포트해도 같은 표면을 씁니다.
base_url을 씁니다. 새 API의 baseUrl과 철자가 다릅니다.
edicusSDK.ver는 이제 v2의 2.0.3이 아니라 패키지 버전('3.0.0-alpha.2')을 돌려줍니다. 버전 문자열로 분기하던 코드가 있다면 확인하세요.
기본 편집기 호스트가 바뀝니다
base_url을 주지 않으면 편집기 iframe이 https://editor.edicus.io에서 뜹니다. v2의 기본 호스트와는 주소가 다릅니다. 새 API의 createEdicusClient()도 기본값이 https://editor.edicus.io입니다. 두 주소는 같은 서비스를 가리킵니다.
2. 메서드 대응표
init()이 반환하는 객체의 공개 메서드와 새 API의 대응입니다.
3. 콜백을 이벤트로
v2의function(err, data)에서 err는 항상 null이었습니다. 새 API에서는 session.on(action, handler)로 바뀝니다. data.action으로 분기하던 코드가 그대로 on()의 첫 인자가 됩니다.
session.onAny(envelope => ...)를 쓰시면 됩니다.
legacy 콜백은 원본 action 이름을 받습니다
legacy 층의 콜백에는 편집기가 보낸 메시지가 이름을 고치지 않고 그대로 옵니다. 썸네일 저장 완료 보고는 예전 편집기가 오타 이름(donwload-tn-report)으로 보냈지만, 2026-10-06에 확인한 운영 편집기는 바른 이름 download-tn-report로 보냅니다. v2 코드가 옛 이름으로 분기하고 있다면 바른 이름으로 바꾸세요.
legacy의 보내기 메서드는 가장 최근 iframe으로 갑니다
post_to_editor, post_to_tnview, post_to_preview, change_project, change_template, change_template_v2, execute_ddp_block은 메서드 이름과 상관없이 가장 최근에 띄운 iframe으로 보냅니다. v2가 iframe을 하나만 기억했기 때문이고, legacy 층도 같게 동작합니다.
편집기를 띄운 뒤 TnView를 띄웠다면 post_to_editor도 TnView로 갑니다. 여러 iframe을 함께 쓴다면 세션별로 보내는 새 API로 옮기세요.
4. 달라진 동작
새 코어는 v2의 관찰 가능한 버그 몇 가지를 고쳤습니다. legacy 층도 이 코어 위에서 동작하므로 무수정 경로를 택하셔도 아래는 전부 적용됩니다.1
postMessage의 targetOrigin
v2는 항상
'*'로 보냈습니다. 새 코어는 띄울 때 쓰인 origin(baseUrl의 origin)으로 고정해서 보냅니다.2
template_list 지연 파라미터 응답
v2는
waiting-for-extra-param의 template_list 응답을 zoom 키로 잘못 보내는 복붙 버그가 있었습니다. 새 코어는 template_list 키로 정확히 응답합니다.3
title 미지정
v2는
title이 없어도 URL에 title=undefined라는 문자열을 그대로 넣었습니다. 새 코어는 그 파라미터 자체를 생략합니다.4
action 없는 메시지
v2가 다루던 임의의
postMessage 중 action 필드가 없거나 문자열이 아닌 것은 새 코어가 조용히 무시합니다. type과 action이 둘 다 문자열인 경우만 유효한 메시지로 봅니다.5
필수 옵션 누락
v2는 필수 파라미터가 빠지면 검증 없이 깨진 URL을 만들었습니다. 새 코어는 호출하는 시점에 동기로
Error를 던집니다.6
띄우기 전 post_to_* 호출
v2는 아직 아무것도 띄우지 않은 상태에서
post_to_editor 같은 함수를 부르면 raw TypeError가 났습니다. legacy 층은 이제 [edicus-sdk] legacy: no session has been launched yet이라는 명확한 에러를 던집니다.5. 새로 생긴 것
getToken 자동 응답
v2에는 없던 opt-in 기능입니다. createEdicusClient({ getToken })을 설정해야만 request-user-token에 SDK가 자동으로 send-user-token을 보냅니다. 설정하지 않으면 v2처럼 이벤트가 그대로 전달됩니다. 토큰 자동 갱신을 보세요.
waitForExit()
v2에는 없던 기능입니다. 새 API 전용이고 legacy 층에는 없습니다.
v2의 단일 콜백에서는 save-doc-report 핸들러의 비동기 후처리가 끝나기 전에 close가 도착하는 문제를 호스트가 플래그나 setTimeout 같은 보일러플레이트로 직접 막아야 했습니다.
세션 분리
v2는 인스턴스당 콜백이 하나여서 띄울 때마다 덮어써졌습니다. 새 API는 띄우기 한 번이 세션 하나이므로, 편집기와 미리보기를 동시에 띄워도 메시지가 섞이지 않습니다.유지되는 것
legacy 층은 위 목록에 없는 v2 동작을 그대로 유지합니다. 단일 콜백이 띄울 때마다 덮어써지는 것,open_project와 open_tnview 등의 params.prjid 파라미터 이름, 메서드의 이름과 시그니처가 그렇습니다. 무수정 경로로 옮긴 코드가 계속 동작해야 하기 때문입니다.
참고
- 새 API의 전체 세션 표면은 세션 API에 있습니다.