마이그레이션 Tip & Tech
마이그레이션 과정에서 깨달은(^^;) 노하우를 알려주세요
사소한 것이라도 올려주시면 누군가에겐 큰 도움이 된답니다.
사소한 것이라도 올려주시면 누군가에겐 큰 도움이 된답니다.
글수 28
zb4 -> zbxe에 해당합니다.
클베 때부터 개인적인 경험을 토대로 정리해봤습니다.
1, 설치 경로 입력을 해도 뜨질 않습니다.
zb4의 아웃로그인을 설치 할 때, 제일 위에 붙이는 헤더의 경로를 생각하시면 됩니다.
zb4 admin 초기페이지에 나와있는 경로를 입력해주시면 됩니다.
2. 게이지 바가 차지 않고, 완료된 게시물이 0개 라고 나오는 경우...
- 아직 수정이 필요한 부분 같지만, 동작은 정상적으로 수행합니다.
3. 게시글이 루프가 돌아 훨씬 많은 양의 게시글, 혹은 적은 게시글이 옮겨질 경우
- 제로보드4 기본 설치버젼 위에 추가적인 필드를 사용했을 경우, 발생하는 문제인 듯 합니다.
추가한 필드를 모두 삭제하신 후에 (즉, 초기 제로보드4와 테이블 상태를 똑같이 맞춘 상태에서...)
마이그레이션을 시도해보십시오. 아니면 마이그레이션 xml exporter 소스에 추가적인 구문을 넣어주셔야 합니다.
4. 한개의 계정내에서도 마이그레이션이 가능합니다.
xe를 초기 설치할 때, 앞에 xe라는 필드명을 붙여주는 설정이 있습니다.
이 때문에 이전버젼과 필드명이 다 다르기 때문에 하나의 계정내에서 zb4의 zbxe의 두개 모두 설치가 가능합니다.
첨부파일의 경우에는 한개의 서버내에서 마이그레이션을 실행해주시면 통째로 복사가 됩니다.
5. 회원정보 이전시, 비밀번호가 맞지 않는 경우가 있습니다.
이건 마이그레이션 문제가 아니라 php 버젼의 차이입니다.
정확히 module/member/member_controller.php 의 마지만 함수가 문제입니다.
php5 이상은 처리가 되지만... php4 이하에서는 다른 결과를 보입니다.

몇시간동안 구글링해서 4버젼대에서 old password 알고리즘을 찾아냈습니다.
물론, 5버젼에서도 적용 가능합니다~
php 버젼이 4 인 분들은 반드시,
modules/member/member_controller.php 마지막 함수라인을 이렇게 넣어보세요.
확인결과 zb4에서 마이그레이션 후에 로그인 정상작동 됩니다.
/**
* @brief mysql old_password 의 php 구현 함수
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
* mysql의 password.c 소스 참조해서 구현함
**/
function mysql_pre4_hash_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
/** 5.0 이상일 경우
function mysql_pre4_hash_password($password) {
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
settype($password, "string");
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == '\t') continue;
$tmp = ord($password[$i]);
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
if($result1 == '80000000') $nr += 0x80000000;
if($result2 == '80000000') $nr2 += 0x80000000;
return sprintf("%08lx%08lx", $nr, $nr2);
}
**/
- 그 외에 추가적인 팁이나 해결안된 문제점이 있는 점은 보충해주세요.
클베 때부터 개인적인 경험을 토대로 정리해봤습니다.
1, 설치 경로 입력을 해도 뜨질 않습니다.
zb4의 아웃로그인을 설치 할 때, 제일 위에 붙이는 헤더의 경로를 생각하시면 됩니다.
zb4 admin 초기페이지에 나와있는 경로를 입력해주시면 됩니다.
2. 게이지 바가 차지 않고, 완료된 게시물이 0개 라고 나오는 경우...
- 아직 수정이 필요한 부분 같지만, 동작은 정상적으로 수행합니다.
3. 게시글이 루프가 돌아 훨씬 많은 양의 게시글, 혹은 적은 게시글이 옮겨질 경우
- 제로보드4 기본 설치버젼 위에 추가적인 필드를 사용했을 경우, 발생하는 문제인 듯 합니다.
추가한 필드를 모두 삭제하신 후에 (즉, 초기 제로보드4와 테이블 상태를 똑같이 맞춘 상태에서...)
마이그레이션을 시도해보십시오. 아니면 마이그레이션 xml exporter 소스에 추가적인 구문을 넣어주셔야 합니다.
4. 한개의 계정내에서도 마이그레이션이 가능합니다.
xe를 초기 설치할 때, 앞에 xe라는 필드명을 붙여주는 설정이 있습니다.
이 때문에 이전버젼과 필드명이 다 다르기 때문에 하나의 계정내에서 zb4의 zbxe의 두개 모두 설치가 가능합니다.
첨부파일의 경우에는 한개의 서버내에서 마이그레이션을 실행해주시면 통째로 복사가 됩니다.
5. 회원정보 이전시, 비밀번호가 맞지 않는 경우가 있습니다.
이건 마이그레이션 문제가 아니라 php 버젼의 차이입니다.
정확히 module/member/member_controller.php 의 마지만 함수가 문제입니다.
php5 이상은 처리가 되지만... php4 이하에서는 다른 결과를 보입니다.
몇시간동안 구글링해서 4버젼대에서 old password 알고리즘을 찾아냈습니다.
물론, 5버젼에서도 적용 가능합니다~
php 버젼이 4 인 분들은 반드시,
modules/member/member_controller.php 마지막 함수라인을 이렇게 넣어보세요.
확인결과 zb4에서 마이그레이션 후에 로그인 정상작동 됩니다.
/**
* @brief mysql old_password 의 php 구현 함수
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
* mysql의 password.c 소스 참조해서 구현함
**/
function mysql_pre4_hash_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
/** 5.0 이상일 경우
function mysql_pre4_hash_password($password) {
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
settype($password, "string");
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == '\t') continue;
$tmp = ord($password[$i]);
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
if($result1 == '80000000') $nr += 0x80000000;
if($result2 == '80000000') $nr2 += 0x80000000;
return sprintf("%08lx%08lx", $nr, $nr2);
}
**/
- 그 외에 추가적인 팁이나 해결안된 문제점이 있는 점은 보충해주세요.
2007.08.14 13:55:17 (*.103.60.67)
7. 카테고리 게시판은 카테고리 하나씩 가져와야합니다.
그리고 처음 마이그레이션 하는 분들은 잘 모를 것 같은데 카테고리가 있는 게시판은
카테고리 하나씩 XML 파일로 내보낸 후, 다시 게시판 복원할 때 또 하나씩 복원해줘야 합니다.
(개인적으로 전체 카테고리 정보도 같이 포함되서 일반 게시판처럼 뚝딱 해줬으면 좋겠습니다만
게시판 당 카테고리 하나씩 백업,복원 해줘야하니깐 일일이 귀찮더군
그리고 처음 마이그레이션 하는 분들은 잘 모를 것 같은데 카테고리가 있는 게시판은
카테고리 하나씩 XML 파일로 내보낸 후, 다시 게시판 복원할 때 또 하나씩 복원해줘야 합니다.
(개인적으로 전체 카테고리 정보도 같이 포함되서 일반 게시판처럼 뚝딱 해줬으면 좋겠습니다만
게시판 당 카테고리 하나씩 백업,복원 해줘야하니깐 일일이 귀찮더군
2007.08.22 21:10:56 (*.98.180.14)
낙훈님...
카테고리 게시판의 경우 카테고리 하나씩 가져올 필요없습니다.
전체 카테고리 정보 포함해서 하나의 게시판으로 이전이 가능합니다.
물론 이전 후 카테고리 정보도 아무런 문제 없이 연결이 됩니다.
방법은...
제로보드4에서 xml 파일 만드실 때 특정 카테고리 선택하는 부분에서 아무런 작업(즉, 특정 카테고리를 선택하지 마시라는 겁니다)도 하지 마시고 바로 다음 하시면 xml 파일 안에 게시판 전체의 내용을 담아 옵니다.
그리고 XE 관리자 화면에서 제로보드4 데이이타 이전을 하실 때 마찬가지로 카테고리 선택하는 부분에서 선택하지 마시고 바로 다음을 클릭하시면 됩니다.
제가 직접 해 본 것이기 때문에 장담을 합니다.. ^^;;;;
가급적 이 작업을 하실 때 XE에서 만들어둔 이전 데이타가 들어갈 게시판의 설정에서 분류사용을 체크해 두시기 바랍니다.
직접 해보시면 게시판 전체를 카테고리 그대로 고스란히 가져옵니다.. ^^
마이그레이션 센터쪽은 거의 안 보다 보니 이제야 댓글을 답니다.
카테고리 게시판의 경우 카테고리 하나씩 가져올 필요없습니다.
전체 카테고리 정보 포함해서 하나의 게시판으로 이전이 가능합니다.
물론 이전 후 카테고리 정보도 아무런 문제 없이 연결이 됩니다.
방법은...
제로보드4에서 xml 파일 만드실 때 특정 카테고리 선택하는 부분에서 아무런 작업(즉, 특정 카테고리를 선택하지 마시라는 겁니다)도 하지 마시고 바로 다음 하시면 xml 파일 안에 게시판 전체의 내용을 담아 옵니다.
그리고 XE 관리자 화면에서 제로보드4 데이이타 이전을 하실 때 마찬가지로 카테고리 선택하는 부분에서 선택하지 마시고 바로 다음을 클릭하시면 됩니다.
제가 직접 해 본 것이기 때문에 장담을 합니다.. ^^;;;;
가급적 이 작업을 하실 때 XE에서 만들어둔 이전 데이타가 들어갈 게시판의 설정에서 분류사용을 체크해 두시기 바랍니다.
직접 해보시면 게시판 전체를 카테고리 그대로 고스란히 가져옵니다.. ^^
마이그레이션 센터쪽은 거의 안 보다 보니 이제야 댓글을 답니다.
2007.08.14 14:50:25 (*.55.101.110)
몇시간동안 구글링한 결과 4버젼대에서 old password 알고리즘 찾아냈습니다.~~~~
(어이없게 php.net에 어떤 외국인이 답변달아 놓은게 있더군요...;;;)
php 버젼이 4 인 분들은
modules/member/member_controller.php 마지막 함수라인을 이렇게 넣어보세요.
확인결과 zb4에서 마이그레이션 후에 로그인 정상작동 됩니다.
/**
* @brief mysql old_password 의 php 구현 함수
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
* mysql의 password.c 소스 참조해서 구현함
**/
function mysql_pre4_hash_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
/** 5.0 이상일 경우
function mysql_pre4_hash_password($password) {
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
settype($password, "string");
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == '\t') continue;
$tmp = ord($password[$i]);
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
if($result1 == '80000000') $nr += 0x80000000;
if($result2 == '80000000') $nr2 += 0x80000000;
return sprintf("%08lx%08lx", $nr, $nr2);
}
**/
(어이없게 php.net에 어떤 외국인이 답변달아 놓은게 있더군요...;;;)
php 버젼이 4 인 분들은
modules/member/member_controller.php 마지막 함수라인을 이렇게 넣어보세요.
확인결과 zb4에서 마이그레이션 후에 로그인 정상작동 됩니다.
/**
* @brief mysql old_password 의 php 구현 함수
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
* mysql의 password.c 소스 참조해서 구현함
**/
function mysql_pre4_hash_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
/** 5.0 이상일 경우
function mysql_pre4_hash_password($password) {
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
settype($password, "string");
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == '\t') continue;
$tmp = ord($password[$i]);
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
if($result1 == '80000000') $nr += 0x80000000;
if($result2 == '80000000') $nr2 += 0x80000000;
return sprintf("%08lx%08lx", $nr, $nr2);
}
**/
2007.08.15 06:44:23 (*.103.60.67)
8. DQ 갤러리 스킨에서의 이동에 있어서..
우선 제목이 없는 게시물의 첨부파일은 연결이 되지 않습니다.
그래서 XML로 변환된 게시물에서 TITLE 란이 공백인 경우
타이틀을 입력 후에 복원해줘야합니다.
그래야지 대기 중인 첨부파일이 없게 됩니다.
9. DQ갤러리 스킨의 경우 첨부파일 2개 이상의 이미지를 첨부할 수 있습니다.
이 때 2개 이상의 첨부파일이 담긴 디큐 갤러리 스킨의 게시물을 마이그레이션해올 때
그냥 달랑 2개만 이미지가 첨부됩니다. 이 점 유의하시길.
우선 제목이 없는 게시물의 첨부파일은 연결이 되지 않습니다.
그래서 XML로 변환된 게시물에서 TITLE 란이 공백인 경우
타이틀을 입력 후에 복원해줘야합니다.
그래야지 대기 중인 첨부파일이 없게 됩니다.
9. DQ갤러리 스킨의 경우 첨부파일 2개 이상의 이미지를 첨부할 수 있습니다.
이 때 2개 이상의 첨부파일이 담긴 디큐 갤러리 스킨의 게시물을 마이그레이션해올 때
그냥 달랑 2개만 이미지가 첨부됩니다. 이 점 유의하시길.
2007.08.17 12:55:35 (*.103.60.67)
10. 마이그레이션한 순서별로 정렬이 됩니다.
하나의 게시판의 일반/질문/답변 3개의 카테고리가 이전 zb4에서 있었다면
하나씩 카테고리를 백업받아 마이그레이션 이전 작업을 합니다.
우선 일반, 두번째 질문, 세번째 답변. 이렇게 마이그레이션 작업을 하면
zb4에서 글 등록할 때의 순서대로 정렬되는 것이 아니라
마이그레이션 작업한 순서대로 글이 정렬됩니다.
맨 먼저 일반 글이 쌓이고 그 뒤를 이어 질문글, 그 뒤를 이어 답변글이 정렬되는 것이지요.
그런데 zeroboard.com 의 스터디는 날짜별 정렬이 되는데 말이죠.
http://www.zeroboard.com/4770313
이상 김성현, 정낙훈님의 질문이었습니다.
하나의 게시판의 일반/질문/답변 3개의 카테고리가 이전 zb4에서 있었다면
하나씩 카테고리를 백업받아 마이그레이션 이전 작업을 합니다.
우선 일반, 두번째 질문, 세번째 답변. 이렇게 마이그레이션 작업을 하면
zb4에서 글 등록할 때의 순서대로 정렬되는 것이 아니라
마이그레이션 작업한 순서대로 글이 정렬됩니다.
맨 먼저 일반 글이 쌓이고 그 뒤를 이어 질문글, 그 뒤를 이어 답변글이 정렬되는 것이지요.
그런데 zeroboard.com 의 스터디는 날짜별 정렬이 되는데 말이죠.
http://www.zeroboard.com/4770313
이상 김성현, 정낙훈님의 질문이었습니다.
2007.08.18 18:24:04 (*.103.60.67)
11. 이미지박스에 있는 글이 첨부 되지 않습니다.
마이그레이션센터 > Tip&Tech > 5. 이미지박스에 있는 사진을 가져올 때
라는 글을 참조하면 초보적인 해결 방법과 제로님의 대안이 나와있습니다.
http://www.zeroboard.com/4483413
위는 마이그레이션센터 > 질문 게시판의 정낙훈님과 삐돌군님의 의견입니다.
마이그레이션센터 > Tip&Tech > 5. 이미지박스에 있는 사진을 가져올 때
라는 글을 참조하면 초보적인 해결 방법과 제로님의 대안이 나와있습니다.
http://www.zeroboard.com/4483413
위는 마이그레이션센터 > 질문 게시판의 정낙훈님과 삐돌군님의 의견입니다.
2007.08.20 05:16:05 (*.103.60.67)
12. 제목이 없을 경우
제목 없는 글의 첨부파일의 경우 그 위치를 잃어버림
13. 글 제목이 있고 글 내용이 없을 경우
마이그레이션 작업 중 글 제목이 있고 글 내용이 없을 경우
이전 작업 후 이전 게시판에서 글 취급을 하지 않음
아래 현상과 같음
글을 선택하고 게시글 관리를 했는데 '선택된 글 수 0' 이라고 나옴
관리 > 문서 모듈 > 게시물관리에서도 동일함
위 7개 게시물을 선택 후 삭제를 누르면 7개의 게시물을 삭제했다는 메세지는 출력이 되는데
실제로는 저 2개 게시물은 지워지지 않은 상태임.
제목 없는 글의 첨부파일의 경우 그 위치를 잃어버림
13. 글 제목이 있고 글 내용이 없을 경우
마이그레이션 작업 중 글 제목이 있고 글 내용이 없을 경우
이전 작업 후 이전 게시판에서 글 취급을 하지 않음
아래 현상과 같음
글을 선택하고 게시글 관리를 했는데 '선택된 글 수 0' 이라고 나옴
관리 > 문서 모듈 > 게시물관리에서도 동일함
위 7개 게시물을 선택 후 삭제를 누르면 7개의 게시물을 삭제했다는 메세지는 출력이 되는데
실제로는 저 2개 게시물은 지워지지 않은 상태임.
2007.08.22 21:16:19 (*.98.180.14)
12, 13의 경우 낙훈님은 이미 알고 계시고 제로님도 파악이 되어 있는 상태입니다만, 다른 분들은 http://spring.zeroboard.com/251751를 참고하세요...





ZB5의 경우 입니다.