포럼

제가 프로그램쪽은 잘 몰라서 지식이 많이 부족합니다.
앞으로 이야기하는 내용에 잘못된 점은 지적해주시고 좋은 방법이 있다면 이야기해주셨으면 합니다.


XE의 core중 core는 sequence설계입니다. XE는 그 sequence를 담을 정수형을 bigint로 설정하였습니다.

bigint

-2^63(-9223372036854775808) ~ 2^63-1(9223372036854775807) 8바이트


최대수인 값을 직접 document_srl에 입력 한 후 돌려보았습니다. 문제없이 조회, 수정 되었습니다. 하지만 저의 고민은 이곳이 아닌 다른곳에서부터 시작되었습니다.


function getNumberingPath($no, $size=3) {
    $mod = pow(10, $size);
    $output = sprintf('%0'.$size.'d/', $no%$mod);
    if($no >= $mod) $output .= getNumberingPath((int)$no/$mod, $size);
    return $output;
}

echo getNumberingPath(9223372036854775807);


결과

-01/000


일반 php로는 수를 담고 출력은 되지만 연산이 들어가게되면 올바른 처리를 하지못하게 됩니다.

9.22337203685E+18


실제 저런 터무니 없는 수까지 도달은 상당히 어려우니 일단 어느자릿수부터 문제가 나왔는지 테스트해보았습니다.

echo getNumberingPath(999999999);

결과

999/999/999


php의 조건상 9자리실제 10자리까지가 한계입니다.

XE는 sequence가 9자리를 넘어가게되면 모든 기능이 전부다 정상적인 동작이 되지 못하며, 첨부파일 등 sequence를 연산하는 곳에 대해서 문제가 발생하고 맙니다. 이 말은 결국 XE가 사용하가능한 데이터의 수는 000000000~999999999 = 1000000000 이라는 결과가 됩니다.

9.22337203685E+18처럼 나오는 수를 숫자모양처럼 나오게는 가능합니다.


function getNumberingPath($no, $size=3) {
    $mod = pow(10, $size);
    $output = sprintf('%0'.$size.'d/', sprintf("%.0f",$no)%$mod);
    if($no >= $mod) $output .= getNumberingPath((int)sprintf("%.0f",$no)/$mod, $size);
    return $output;
}
    
echo getNumberingPath(9223372036854775807);

결과

647/484/147/002/


하지만 이것은 그냥 그럴듯하게 보이게할뿐 결코 올바른 정보가 아닙니다. 입력한 숫자가 10자릿수를 넘는 순간 저 수만 나오게되니까요.


제가 이 문제 때문에 짧은 시간이지만 몇일간 여러 자료를 보고 검색을 해보았지만 결국 일반 php를 이용해서는 극복이 안되는걸로 결론을 냈습니다. 만약 이 부분에 대해서 규칙에 얽매이지 않고 연산처리없이 받은 수 그대로 폴더를 생성해낸다면 XE가 사용가능한 데이터 수는 bigint 자료형 그대로 사용되지 않을까 생각합니다.
연산처리 외에 기본적인 처리에 대해서는 pico님께서 이슈를 이미 남기셨더군요.


XE공홈에 sequence는 현재 8자리이네요. 앞에 설명한대로 10자리부터 이상증상이 나온걸 고려해본다면 9자리의 도달은 지극히 일반적이며 결코 무한이 아니라고 봅니다.


위의 문제점에 대해서 XE개발팀 이하 고수여러분들께서 좋은 방법이나 해결 방향을 고민하고 계시다면 어떠한 방법을 해보고계신지 이야기해주셨으면 합니다.

글쓴이 제목 최종 글
socialskyo 게시판 검색하다 본 글 개발자 vs 유저 file  
treasurej 안녕하세요~ 새해 복 많이 받으세요~^^ [5] file 2014.01.01 by 쿡래빗
socialskyo G 보드에 대해서 [4] 2014.01.01 by socialskyo
퍼니엑스이 XE 기본 디자인에 신경을 좀 써주셨으면 해요. [9] 2014.01.01 by socialskyo
쭌별★ php-clamav와 xe 연동? [1] 2014.01.01 by 퍼니엑스이
샤로우 위젯에 권한 옵션은 왜 없는걸까요? [2] 2014.01.01 by 쿡래빗
라돌체 PHP 개발자가 사용하기에 무리 없는 노트북 [7] 2014.01.01 by 권태성 
jambox XE의 서드파티 개발자분들에게 아쉬움을 많이 느낍니다. [45] 2014.01.01 by XE만세
궁굼자 트랙백(엮인글)기능 많이 사용하시나요? [4] 2013.12.31 by Trickle
푸시아 반드시 정독하고 꼭 따르도록 합시다. [3] 2013.12.31 by KrteamENT
또별 저는 메뉴와 모듈 연결방식이 너무 불편한데..나만 그런가요? [4] 2013.12.31 by explode
푸시아 [ggshop] 카드 승인 심사를 진행하고 있습니다. [11] 2013.12.31 by 매직헌터
멀티비타민 혹시 확장 컴포넌트 설문조사 잘되나요? [7] 2013.12.30 by 멀티비타민
푸시아 XE 자체 마켓 URL 모음 (수시 업데이트) [11] 2020.03.14 by socialskyo
갸라레 모듈에 action을 추가하는게 잘 안되네요..... [3] 2020.03.14 by Lansi
Vegarian Sketchbook 게시판 스킨을 문서 페이지 스킨에도 적용해보고 싶습니다만 [2] 2013.12.30 by Vegarian
정도의길을걷기싫다 XE에 이런 기능이 있나요? [1] 2013.12.30 by 銀童
쿡래빗 내년 2014년도엔 공모전이 다시한번 열리기를.. [1] 2013.12.29 by 퍼니엑스이
socialskyo 쇼케이스 업데이트 [2] 2013.12.29 by explode
정도의길을걷기싫다 다운로드 자료실에 카테고리 - [기타] 하나 만들어주세요