가끔, 기존 phpBB3 기반 사이트에서 사용자 데이터를 새로 가져온 직후, WP에서 Discourse로의 동기화 과정에서 일부 사용자 데이터가 다른 사용자의 데이터와 섞여 손상되는 문제가 발생하고 있습니다. 이 문제는 자주 발생하지 않고, 원하는 시점에 재현할 수 없어 안타깝게도 개발팀이 이 문제를 사실상 무시하고 있습니다.
첫 번째 사례에서는 데이터의 신규 가져오기 과정에서 제 테스트 사용자 계정 중 하나가 삭제되었는데, 가져오기가 완료된 후 해당 테스트 사용자의 아바타가 다른 사용자의 프로필에 할당되었고, 저는 그 사용자로 로그인된 상태가 되었습니다.
두 번째 사례에서는 WP에서 테스트 사용자를 등록했는데, Discourse와의 동기화가 이루어질 때 이 테스트 사용자가 Discourse에 이미 존재하는 사용자의 사용자 이름을 가져갔고, 일부 커스텀 프로필 및 그룹 데이터까지 함께 가져갔습니다. 스크린샷을 참조하세요.
Coin-coin 님, 감사합니다. 가져오기 전에 사용자 데이터 파일에서 익명 사용자를 제거하면, 익명 게시물이 어쨌든 ‘system’ 사용자에게 할당될 것이라고 가정합니다. phpBB 인스턴스의 익명 사용자를 가져오기 파일에 유지해야 하는 제가 모르는 이유가 있을까요?
이 내용과 New Wordpress users connecting to existing Discourse users - #5 by jord8on 와 같은 다른 스레드들을 통해 파악한 바로는, 우리에게 문제가 되는 부분은 익명 사용자들인 것 같습니다. 이들은 기본적으로 WP에 존재하지 않는 중복된 사용자들입니다. 새로 가져오기(Fresh import) 시 WP 테스트 사용자를 제거하면 WP 사용자 ID 구조는 변경되지만 Discourse ID는 변경되지 않으며, Discourse는 우선적으로 외부 WP ID를 통해 사용자를 연결하려고 합니다.
새로 가져오기를 수행하면 데이터베이스에서 일부 WP 테스트 사용자가 삭제됩니다. 제가 검색해 본 몇몇 익명 phpBB 사용자의 사용자 ID는 모두 Discourse에서 가장 큰 정수 사용자 ID(4505, 4506 등)를 가진 것으로 보입니다. 따라서 새로 가져오기를 실행하고 WP에서 테스트 계정을 삭제하면, WP에서 새로 생성된 사용자가 이제 존재하지 않는 기존 테스트 사용자의 구 ID로 동기화되는 것 같습니다.
위에서 링크한 5번째 게시물에 설명된 대로, 새로 가져오기 과정에서 외부 ID 대신 이메일 주소를 기준으로 사용자를 일치시키도록 강제하면, 기존 사용자와 새 사용자의 원치 않는 병합 가능성을 사전에 방지할 수 있을 것입니다.
이 방식의 문제는 고유한 사용자에게 대한 게시물 귀속 관계가 손실된다는 점입니다. 모든 게시물이 단일 system 사용자로부터 온 것처럼 보이므로, 대화의 흐름을 따라가는 것이 어려워지고 서로 다른 참가자를 구별할 수 없게 됩니다.
그렇습니다. 개념적으로 두 가지 선택지가 있습니다. 현재 상태를 유지하고 관리자 사용자 프로필 UI를 수동으로 사용하여 동일해야 하는 사용자를 병합하는 방법, 아니면 제안하신 대로 이메일을 외부 ID로 사용하여 새 로그인이 일치하는 이메일 주소를 가진 기존 계정에 연결되도록 하는 방법입니다.
여러분, 혹시 괜찮으시다면 후속 질문이 하나 있습니다. 이전에 말씀드린 내용들을 개발팀과 공유했는데, 그 내용은 라이브 전환 직전의 최종 임포트/마이그레이션 시 외부 ID가 아닌 이메일로 사용자를 매칭하도록 강제하는 것, 그리고 SSO 기록을 삭제하여 깨끗하게 재전파되도록 하는 것이었습니다.
하지만 현재 개발팀은 원래 phpBB3 내보내기 데이터에 문제가 있었던 것 같다고 생각하는 것 같습니다. 구체적으로 해당 데이터에 중복되거나 익명인 사용자가 있으며, 이메일이 연결되지 않은 phpBB 사용자도 몇 명 있다는 것입니다. phpBB3 데이터를 임포트하는 과정에서 이러한 상황들을 Discourse가 처리할 수 있어야 한다고 생각합니다. 제 생각이 틀린 건가요? 특히 Discourse가 익명 사용자에게 가상의 사용자명을 부여하는 방식의 경우, 이는 표준 운영 절차(standard operating procedure)입니다.
만약 현재 phpBB3 설치 환경에서 더 깨끗한 데이터를 가져와야 한다면, 아마도 그렇게 할 수 있을 것입니다. 하지만 phpBB 데이터를 건드릴 필요도, 그렇게 해야 할 이유도 없어 보입니다. 그게 근본적인 문제는 아니었거든요.
우리는 Discourse를 새로 설치하고 phpBB에서 데이터를 성공적으로 임포트했습니다.
우리의 조사 결과는 다음과 같습니다:
“…_users” 테이블에는 총 3,270개의 레코드가 포함되어 있습니다.
Discourse에서 임포트된 사용자를 다운로드해 보니, Discourse에는 3,251명의 사용자가 있는 것으로 확인되었습니다.
분석 과정에서, Discourse 사용자명에 "1"이 추가된 여러 사용자를 발견했는데, 이는 실제로 phpBB 데이터의 사용자명에서 유래한 것입니다. "redacted_username1"이라는 특정 사용자 1명만 phpBB 데이터에 존재하지 않습니다. 그러나 "redacted_username"이라는 사용자는 phpBB 데이터에 존재합니다.
향후 임포트에서 이러한 상황이 발생하지 않도록 하려면, 익명 사용자 및 기타 원치 않는 사용자를 제외하고 새로운 데이터를 가져와야 합니다.
phpBB와 Discourse 사이의 사용자 수 차이는 19명입니다. phpBB 데이터에는 계정에 연결된 이메일이 없는 사용자가 53명 있습니다.
Discourse에서 “anonymous” 사용자를 검색하면 현재 정지 상태인 익명 이메일을 가진 32명의 사용자가 반환됩니다. 이러한 익명 사용자에게 할당된 사용자명은 phpBB 데이터에서 찾을 수 없습니다. 이는 Discourse가 익명 사용자에게 가상의 사용자명을 부여하고 있음을 의미하며, 이로 인해 향후 오류가 발생할 수 있습니다.
요약하자면, 이메일이 없는 19명의 사용자는 임포트되지 않았고, 32명의 사용자는 가상의 사용자명과 함께 익명 이메일로 동기화되었습니다.