LimeSurvey 7 필드명 리팩터링
From LimeSurvey Manual
필드명 및 응답 테이블 리팩터링 - LimeSurvey 7
LimeSurvey 7에서는 응답 테이블과 필드명이 생성되는 방식을 대대적으로 정리했습니다. 이번 업데이트는 오래된 내부 명명 규칙을 현대화하고, 플러그인, 통합 기능 및 향후 개발을 위한 보다 예측 가능하고 견고한 기반을 마련합니다.
이 페이지에서는 응답 테이블과 필드명 리팩터링에 대해 설명합니다.
이는 구조적인 변경이므로, 기존 명명 방식에 의존하는 사용자 지정 작업은 업데이트가 필요할 수 있습니다. 이 페이지에서는 무엇이 바뀌는지, 안전하게 테스트하는 방법, 그리고 업그레이드를 준비하는 방법을 설명합니다.
1. 변경 사항
1.1 새로운 테이블 이름
LimeSurvey는 이제 응답 관련 테이블에 일관된 명명 체계를 사용합니다.
| 기존 테이블 이름 | 새 테이블 이름 |
|---|---|
old_survey_<sid>_<timestamp>
|
old_responses_<sid>_<timestamp>
|
old_survey_<sid>_timings_<timestamp>
|
old_timings_<sid>_<timestamp>
|
survey_<sid>
|
responses_<sid>
|
survey_<sid>_timings
|
timings_<sid>
|
이 테이블을 참조하는 SQL 쿼리, 통합 기능 또는 플러그인은 수정이 필요할 수 있습니다.
1.2 새로운 필드명 구조
필드명은 이제 예측 가능하고 일관된 형식을 따릅니다. 예시:
Q<questionId>- 루트 질문Q<questionId>_S<subquestionId>- 하위 질문Q<questionId>_C<suffix>- 해설 또는 기타 필드- 순위 필드:
Q<questionId>_S<subquestionId>- 순위 항목은 이제 하위 질문입니다(1.3 참조) - 응답 시간 필드: 상황에 따라 질문 수준 또는 그룹 수준
이는 기존의 sidXgidXqid 기반 명명 방식을 대체합니다.
1.3 순위 질문
순위 질문은 이제 하위 질문 기반의 다른 질문 유형과 동일하게 작동합니다:
- 항목은 하위 질문입니다. 순위를 매길 수 있는 항목은 응답 옵션이 아니라 하위 질문(유형
R)으로 저장됩니다. - 필드명은 표준 하위 질문 형식
Q<questionId>_S<subquestionId>을 사용합니다(순위가 매겨진 항목당 하나). - 답변은 하나의 JSON 열
Q<questionId>에 항목 코드의 정렬된 배열로 저장되며, 위치가 곧 순위입니다. 예:["3", "1", "2"]
2. 이 변경이 중요한 이유
이번 정리는 오랜 기간 공식적으로 정의되어 사용되어 온 명명 패턴을 다루며, 앞으로의 발전을 위해 일관되고 견고한 구조로 만들어 줍니다.
이와 같은 구조적 변경은 간단한 경우가 드뭅니다. 많은 플러그인과 통합 기능이 의존하는 시스템 부분을 건드리기 때문에, 복잡성 때문에 종종 미뤄지곤 합니다. 하지만 일관성과 예측 가능성을 유지하는 것은 장기적인 안정성을 위해 중요합니다.
이를 지금 해결함으로써, 겉으로는 거의 드러나지 않는 변경이더라도 LimeSurvey를 더 깔끔하고 확장하기 쉽게 만들 수 있습니다.
3. 새 필드명 미리보기 방법
기존 필드명이 새로운 LS7 구조로 어떻게 매핑되는지 확인하려면 다음 단계를 수행하십시오:
- 데이터베이스를 백업하십시오. 변경 사항은 되돌릴 수 없으며, 문제가 발생할 경우 변경 이전의 데이터베이스가 있으면 복구하는 데 유용합니다.
- develop-major 브랜치를 체크아웃하십시오:
git checkout develop-major
또는 https://github.com/LimeSurvey/LimeSurvey/tree/develop-major 에서 해당 브랜치의 프로젝트를 직접 클론/다운로드하십시오. - 관리자 페이지를 로드하여 변경 스크립트를 실행하십시오.
- 변경 스크립트를 실행하는 동안 오류가 발생하면 보고하십시오.
- 새로운 테이블 이름과 필드명을 살펴보십시오.
- 플러그인/테마를 테스트하고 테이블 이름 및/또는 필드명과 관련된 오류를 수정하십시오.
기존 필드명을 새 필드명으로 변환하는 데 사용되는 함수는 다음과 같습니다:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
매개변수
- $tableName - 원래 테이블 이름
- $fieldName - 원래 필드명
- $questions - 루트 질문과 그 하위 질문
- $sid - 설문조사 ID
- $gid - 그룹 ID
- $cd - 조건 디자이너 로직 적용 여부
결과
이 함수는 해당 답변 필드에 대한 새로운 LS7 필드명을 반환합니다.
4. 변경 사항을 안전하게 테스트하는 방법
운영 시스템을 업그레이드하기 전에 전용 환경에서 LS7을 테스트할 것을 강력히 권장합니다.
4.1 별도의 환경에 LS7 설치
다음 위치에서 최신 LS7을 다운로드하십시오:
https://community.limesurvey.org
현재 사용 중인 환경과는 별도로 설치하십시오.
4.2 기존 자산 가져오기
다음 항목으로 테스트하십시오.
- 설문조사
- 설문조사 테마
- 관리자 테마
- 질문 테마
- 플러그인
- 사용자 지정 JavaScript
- 직접 구축한 모든 사용자 지정 통합
새로운 테이블 및 필드 이름 체계에서 모든 것이 예상대로 작동하는지 확인하십시오. 이전 이름 체계에 의존하는 코드는 모두 업데이트하십시오.
4.3 마이그레이션은 어떻게 실행하나요?
테스트 설치 환경에서 마이그레이션 로직을 미리보기하려면 다음과 같이 하십시오.
- 데이터베이스를 백업하십시오.
- LS7 버전을 설치하십시오.
- 아무 관리자 페이지나 로드하여 마이그레이션 스크립트를 실행하십시오.
- 테이블 및 필드 이름 변경 사항을 검토하십시오.
- 애플리케이션을 테스트하십시오.
- 필요한 경우 사용자 지정 코드를 업데이트하십시오.
4.4 문제 보고
이른 시기에 테스트해 주셔서 감사합니다. 코어에서 이상한 점을 발견하시면 가능한 한 빨리 수정할 수 있도록 보고해 주십시오.
5. 업데이트가 필요할 수 있는 항목
다음 항목은 수정이 필요할 수 있습니다.
- 이전 필드 이름 또는 테이블 이름을 참조하는 플러그인
- 직접 구축한 모든 사용자 지정 통합
- 필드 이름 기반 선택자를 사용하는 JavaScript
- 답변 관련 식별자와 상호 작용하는 사용자 지정 테마
- 이전 이름 체계에 의존하는 통합
- 설문조사, 테마, 질문 테마 등 이전 내보내기 파일 가져오기
이는 예상된 동작이며 업그레이드 과정의 일부입니다.
6. 요약
- LS7은 응답 테이블 및 필드 이름 체계를 전면적으로 정리합니다.
- 이는 LS7의 주요 백엔드 구조 변경입니다.
- 별도의 환경에서 테스트하는 것을 강력히 권장합니다.
getFieldName()은 앞으로 적용될 이름 체계를 미리보기하는 데 도움이 됩니다.- 필요한 경우 사용자 지정 코드를 업데이트하십시오.
- 최종 릴리스를 안정화할 수 있도록 문제를 일찍 보고해 주십시오.