# 2.15. ★ 컨트롤이 렌더된 HTML 노드의 ID와 컨트롤 uuid 사이의 연관성 제거

#### 2.15.1. 변경 전

모든 컨트롤이 렌더된 HTML 노드의 ID로 “uuid-${컨트롤uuid}” 형태가 적용되고 있어, 앱 개발 소스코드를 가지지 않은 일반 페이지 방문자가 쉽게 컨트롤 내부 상태를 관측하는데 악용될 가능성이 있음

기존 default.js

- `useControlUUIDasHTMLId: true | false` : 컨트롤 uuid 와 노드 id를 일치시킬 것인지 여부
- `htmlIdGenMethod: "depth" | "depth-short"` : useControlUUIDasHTMLId를 false로 지정한 경우에만 작동. 컨트롤의 구조적 순서에 따라 노드 ID 생성. 자동화 스크립트 작성들을 위해 제공됨.

#### 2.15.2. 변경 후

**1.0.5306(2024년 9월 릴리즈)** 버전에서 uuidGenMethod의 기본 값을 secure로 설정하여 컨트롤의 uuid와 렌더된 HTML 노트 ID와의 연관성 제거되었습니다.

- uuidGenMethod - 노드 ID의 생성 방법을 지정하는 속성, 가용값들: 
    - "insecure" - 기존의 기본 값, 컨트롤 uuid와 노드의 id가 동일하게 부여됨.
    - "secure" - 새로운 기본 값. 노드의 id와 컨트롤 uuid 사이의 연관성이 제거됨.
    - "depth" - 컨트롤 하이에라키에 따라 하나의 고정된 식으로 발행됨. 테스트 자동화, 로봇 제어등에 사용.
    - "depth-short" - 상동, 다만 만들어지는 id가 상대적으로 더 짧음

#### 2.15.3. 조치 방안

1.0.5306 이전 버전에서는 컨트롤의 HTML 노드를 찾을 경우 컨트롤의 uuid를 사용하여 찾았습니다.

```javascript
var elContent = document.querySelector("#uuid-" + control.uuid);
```

1.0.5306 이후 버전에서는 컨트롤의 HTML 노드를 찾을 경우 컨트롤의 htmlAttr API를 사용하여 dom 속성을 추가한 후 querySelector로 해당 dom 요소를 찾아주시기 바랍니다.

```javascript
// dom에서 querySelector로 해당 컨텐츠 영역을 찾을 수 있도록 dom 속성 추가
voSelectedContent.htmlAttr("uuid", voSelectedContent.uuid);

cpr.core.DeferredUpdateManager.INSTANCE.asyncExec(function() {
  var ctrlUuid = voSelectedContent.htmlAttr("uuid");
var elContent = document.querySelector("div[data-usr-uuid = "+ ctrlUuid + "]");
});
```

또한, 프로젝트 내에서 uuid를 수정할 부분이 많은 경우 defaults.js에서 uuidGenMethod 값을 insecure로 설정하여 기존과 동일하게 사용할 수 있습니다.

```javascript
var CPR_DEFAULTS = {
    environment: {
        uuidGenMethod: "insecure"
    }
}
```