phpBB3에서 WP/Discourse로 이관 시 사용자 데이터 손상

가끔, 기존 phpBB3 기반 사이트에서 사용자 데이터를 새로 가져온 직후, WP에서 Discourse로의 동기화 과정에서 일부 사용자 데이터가 다른 사용자의 데이터와 섞여 손상되는 문제가 발생하고 있습니다. 이 문제는 자주 발생하지 않고, 원하는 시점에 재현할 수 없어 안타깝게도 개발팀이 이 문제를 사실상 무시하고 있습니다.

첫 번째 사례에서는 데이터의 신규 가져오기 과정에서 제 테스트 사용자 계정 중 하나가 삭제되었는데, 가져오기가 완료된 후 해당 테스트 사용자의 아바타가 다른 사용자의 프로필에 할당되었고, 저는 그 사용자로 로그인된 상태가 되었습니다.

두 번째 사례에서는 WP에서 테스트 사용자를 등록했는데, Discourse와의 동기화가 이루어질 때 이 테스트 사용자가 Discourse에 이미 존재하는 사용자의 사용자 이름을 가져갔고, 일부 커스텀 프로필 및 그룹 데이터까지 함께 가져갔습니다. 스크린샷을 참조하세요.

이 두 사례 모두에서 Discourse의 중복 사용자가 테스트 사용자 계정의 손상과 관련이 있었습니다. 예: agmolnar와 agmolnar1, tbm960c와 tbm960c1

저희는 이러한 중복 사용자가 여러 명 있었는데, 아마도 가져온 phpBB3 데이터 파일의 익명 사용자들에서 비롯된 것으로 추정됩니다.

혹시 비슷한 현상을 경험하신 분이나, 이 문제의 원인에 대한 단서를 알고 계신 분이 있을까요? 새로 가져오기 전에 phpBB3 가져오기 파일에서 익명 사용자를 제거하는 것이 가치가 있을까요?

제안해 주시면 감사하겠습니다.

라이언, 안녕하세요.

아래 파일들을 확인해 보시면 유용한 정보를 찾으실 수 있을지도 모릅니다:

그리고:

그리고:

이 부분을 수정하여 익명 사용자를 가져오지 않도록 하거나, 이상한 문제가 발생하는 원인을 찾을 수 있는 단서를 찾아보시면 어떨까요.

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로 사용하여 새 로그인이 일치하는 이메일 주소를 가진 기존 계정에 연결되도록 하는 방법입니다.

후자가 분명히 가장 저항이 적은 방법입니다 :+1:

@kiefferr 첨부하신 이미지 중 일부 세부 사항을 확인하여, 의도치 않게 공유하셨을 수 있으니 삭제했습니다. 필요하시면 이미지를 다시 업로드해 주세요. :slight_smile: :+1:

혹시 지금 discourse와 phpbb3 커뮤니티를 동시에 운영하면서, 주기적으로 phpbb3에서 데이터를 다시 가져오는 것이 맞나요?

지금 시점에서 그렇게 보여줄 수 있지만, 새로운 WP/Discourse 사이트 개발이 지연되고 있음에도 불구하고, 아니, Discourse는 여전히 개발 단계에 있습니다. 우리는 phpbb3를 기반으로 구축된 기존 커스텀 사이트를 대체하고 있습니다.

처음으로 데이터를 가져온 후, 최종 전환 전 마지막 가져오기 전에 테스트용 가져오기를 한 번 더 하기로 결정했습니다. 다행히 그렇게 했는데요, 라이브 사이트에서 이런 버그들을 뒤쫓고 싶지는 않으니까요.

여러분, 혹시 괜찮으시다면 후속 질문이 하나 있습니다. 이전에 말씀드린 내용들을 개발팀과 공유했는데, 그 내용은 라이브 전환 직전의 최종 임포트/마이그레이션 시 외부 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 데이터에 존재합니다.

Discourse 사용자명 "edacted_username1"과 연결된 이메일은 "anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid"입니다. 이는 "redacted_username"이라는 사용자명이 이미 익명 사용자에게 사용 중이었으며, 해당 익명 사용자가 자신의 사용자명에 "1"을 추가했다는 것을 시사합니다.

향후 임포트에서 이러한 상황이 발생하지 않도록 하려면, 익명 사용자 및 기타 원치 않는 사용자를 제외하고 새로운 데이터를 가져와야 합니다.

phpBB와 Discourse 사이의 사용자 수 차이는 19명입니다. phpBB 데이터에는 계정에 연결된 이메일이 없는 사용자가 53명 있습니다.

Discourse에서 “anonymous” 사용자를 검색하면 현재 정지 상태인 익명 이메일을 가진 32명의 사용자가 반환됩니다. 이러한 익명 사용자에게 할당된 사용자명은 phpBB 데이터에서 찾을 수 없습니다. 이는 Discourse가 익명 사용자에게 가상의 사용자명을 부여하고 있음을 의미하며, 이로 인해 향후 오류가 발생할 수 있습니다.

요약하자면, 이메일이 없는 19명의 사용자는 임포트되지 않았고, 32명의 사용자는 가상의 사용자명과 함께 익명 이메일로 동기화되었습니다.

임포트할 수 있도록 깨끗한 phpBB 데이터를 공유해 주세요.

또한, 이 문제에 대해 의견이 있으시면 알려 주시기 바랍니다.

데이터베이스에서 해당 사용자를 삭제할 계획이 없다면, 스크립트를 수정하여 해당 사용자를 무시하도록 하는 것이 좋습니다. 부분적인 덤프를 가져오는 것은 쉽게 반복할 수 있는 작업이 아닐 가능성이 큽니다.

현재 사이트에서 해당 사용자를 삭제할 수 있다면, 그것이 좋은 해결책이 될 것입니다. 저의 경우, 이러한 상황에서는 덤프를 반복적으로 전송하기보다 라이브 데이터베이스를 직접 읽는 방식을 선호합니다.