본문 바로가기

Template Language/freemarker

숫자 랜덤으로 생성

화면의 탭을 랜덤노출하는 이슈가 생겼다. 전에는 자바스크립트로 했지만, 단점이 있다. 느린 컴퓨터에서는 태그가 열리고 닫히는 움직임이 눈의 띄게 보인다는 것이다. 전부터 신경쓰여서 이참에 약간 여유가 생겨 프리마커로 만들어보기로 했다. 그래서 일딴 랜덤에 필수요소인 카운팅하는 숫자를 넣어보기 위해 TODAY를 이용해보았다.

${TODAY?string('yyyyMMddHHmmssSSS')}


이렇게 할 경우에는 프리마커 특성상 시간이 바로바로 갱신이 안되므로 정적인 화면으로 보일 수도 있다. 그래서 찾아보니 선구자가 있었다.

<#function rand min max>

  <#local now = .now?long?c />

  <#local randomNum = _rand +

    ("0." + now?substring(now?length-1) + now?substring(now?length-2))?number />

  <#if (randomNum > 1)>

    <#assign _rand = randomNum % 1 />

  <#else>

    <#assign _rand = randomNum />

  </#if>

  <#return (min + ((max - min) * _rand))?round />

</#function>

<#assign _rand = 0.36 />

[출처] http://freestyle-developments.co.uk/blog/?p=327


이렇게 하면 된단다. 근데 첨보는게 있다. .now ?? 일딴 테스트해보았으나 찾을 수 없단다!!! 왤까 싶어서 일딴 버젼을 확인해보기로 했다.

${.version}


사용중인 프리마커 버젼이 2.3.13이다. 이제 에러코드로 구글링을 해보았다

freemarker unknown built-in variable now


역시 영어로 검색하면 대충은 다 나오는 구나. 원인은 2.3.17부터 지원되는 것이였다.... 랜덤으로 노출하려면 실시간으로 변화하는 값이 필요한데 일딴 현재로써는 방법이 없다. 구지 찾으라면 자바에서 만들어서 내려주는 방법뿐인데... 이건 내키지 않는다. 그래서 그냥 스크립트로 작성했다. 다음 개편 때는 버전업을 해서 시도해보아야겠다.


[참고자료]

http://freemarker.org/docs/versions_2_3_17.html