SI-DATA 콘텐츠 공통요소 설계 문서
작성일: 2026-01-07
수정일: 2026-03-09
버전: 2.0
1. 개요
섹션 제목: “1. 개요”SI-DATA(서울연구데이터서비스)의 기존 5개 콘텐츠 타입에 동일한 8개 공통요소 필드를 추가합니다. 이 문서는 공통요소의 설계와 아이템 계층 구조 구현에 대해 설명합니다.
1.1 대상 콘텐츠 타입
섹션 제목: “1.1 대상 콘텐츠 타입”| # | 콘텐츠 타입 | 기존 CMS 머신명 | 용도 |
|---|---|---|---|
| 1 | 데이터로 본 서울(콘텐츠) | data_seoul | 데이터로 본 서울 콘텐츠 |
| 2 | DXPR Layout | drag_and_drop_page | DXPR 빌더 기반 콘텐츠 |
| 3 | 인사이트리포트 | insight_report | 인사이트 리포트 |
| 4 | 조사데이터 | si_survey | 설문조사 데이터 |
| 5 | 서울의 근현대유산 | archi | 근현대 유산 데이터 |
1.2 제외 콘텐츠 타입
섹션 제목: “1.2 제외 콘텐츠 타입”| 콘텐츠 타입 | 머신명 | 상태 |
|---|---|---|
| HTML 콘텐츠 | (미정) | 신규 생성 여부를 고객과 별도 협의 예정 |
| 사진 콘텐츠 | (기존 CMS) | 별도의 공통요소를 적용할 예정 — 이 문서에서 제외 |
2. 공통 필드 구조
섹션 제목: “2. 공통 필드 구조”5개 기존 콘텐츠 타입에 동일한 공통요소 필드를 추가합니다.
- 공통요소: 모든 대상 콘텐츠 타입에 동일하게 적용되는 8개 필드
- 개별요소/구조/관리: 콘텐츠 타입별로 기존 필드 구성을 유지
2.1 공통요소 (8개 필드)
섹션 제목: “2.1 공통요소 (8개 필드)”분류 및 메타데이터 관련 필드입니다. 5개 대상 콘텐츠 타입에 동일하게 적용됩니다.
| # | 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|---|
| 1 | 제목 | title | String | 콘텐츠 제목 (기본 필드) |
| 2 | ITEM명 | field_service | Entity Reference (Taxonomy) | 중간 분류 선택 (2단 셀렉트박스) |
| 3 | 주제분류 | field_topic | Entity Reference (Taxonomy) | 주제별 분류 (중복선택 가능) |
| 4 | 시기분류 | field_decade | Entity Reference (Taxonomy) | 시기별 분류 (중복선택 가능) |
| 5 | 핵심 키워드 | field_keyword | Text (plain) | 검색용 키워드 |
| 6 | 디스크립션 | field_description | Text (formatted, long) | 상세 설명 |
| 7 | 공공누리 | field_ggnuri | List (text) | 저작권 유형 |
| 8 | 종간콘텐츠 여부 | field_legacy | Boolean | 종간 콘텐츠 여부 |
2.2 콘텐츠 타입별 필드 구성
섹션 제목: “2.2 콘텐츠 타입별 필드 구성”개별요소, 구조, 관리 필드는 기존 콘텐츠 타입의 필드 구성을 유지합니다. 각 콘텐츠 타입의 상세 필드 구성은 아래 문서를 참조하세요.
| 콘텐츠 타입 | 문서 |
|---|---|
| 데이터로 본 서울(콘텐츠) | data_seoul 필드 구성 |
| DXPR Layout | drag_and_drop_page 필드 구성 |
| 인사이트리포트 | insight_report 필드 구성 |
| 조사데이터 | si_survey 필드 구성 |
| 서울의 근현대유산 | archi 필드 구성 |
3. 아이템 계층 구조
섹션 제목: “3. 아이템 계층 구조”3.1 아이템 계층 구조 개요
섹션 제목: “3.1 아이템 계층 구조 개요”콘텐츠 분류를 위한 2단 AJAX 연동 셀렉트박스 구조입니다.
┌─────────────────────────────────────────────────────────────┐│ ITEM명 — depth 0 셀렉트박스 (field_service) ││ └─ ITEM 서비스 택소노미 (depth 0, 9개 term) ││ 예: 데이터로 본 서울, 지도로 본 서울, 통계로 본 서울... │└─────────────────────────────────────────────────────────────┘ │ ▼ AJAX 연동┌─────────────────────────────────────────────────────────────┐│ ITEM명 — depth 1 셀렉트박스 (field_service) ││ └─ ITEM 서비스 택소노미 (depth 1, 21개 term) ││ 예: 지도로 본 서울 2000, 지도로 본 서울 2007... │└─────────────────────────────────────────────────────────────┘3.2 AJAX 연동 흐름
섹션 제목: “3.2 AJAX 연동 흐름”- depth 0 셀렉트박스에서 상위 분류 선택 (예: “지도로 본 서울”)
- AJAX 연동으로 depth 1 셀렉트박스가 갱신됨 (예: “지도로 본 서울 2000”, “2007”, “2013”)
- 자식이 1개인 경우 자동 선택
상세 구현 내용은 아이템 계층 구조 구현 문서를 참조하세요. (구현 문서는 마이그레이션 완료에 따라 제거되었습니다 → 마이그레이션 보고서)
3.3 ITEM 서비스 택소노미 구조
섹션 제목: “3.3 ITEM 서비스 택소노미 구조”ITEM 서비스 택소노미├── 데이터로 본 서울 (TID: 342) ← depth 0│ └── 데이터로 본 서울 (TID: 275) ← depth 1│├── 서울과 세계대도시 (TID: 343)│ └── 서울과 세계대도시 (TID: 276)│├── 지도로 본 서울 (TID: 344)│ ├── 지도로 본 서울 2000 (TID: 277)│ ├── 지도로 본 서울 2007 (TID: 278)│ └── 지도로 본 서울 2013 (TID: 279)│├── 지표로 본 서울 (TID: 345)│ ├── 지표로 본 서울 2003 (TID: 280)│ ├── 지표로 본 서울 2010 (TID: 281)│ └── 지표로 본 서울 2015 (TID: 282)│├── 통계로 본 서울 (TID: 346)│ ├── 통계로 본 서울 인구 (TID: 283)│ ├── 통계로 본 서울 경제 (TID: 284)│ ├── 통계로 본 서울 교통 (TID: 285)│ ├── 통계로 본 서울 주거 (TID: 286)│ └── Seoul Statistical Series (영문판) (TID: 287)│├── 서울도시기본계획 모니터링 (TID: 347)│ ├── 서울도시기본계획 모니터링 2024 (TID: 288)│ ├── 서울도시기본계획 모니터링 2023 (TID: 289)│ ├── 서울도시기본계획 모니터링 2022 (TID: 290)│ ├── 서울도시기본계획 모니터링 2021 (TID: 291)│ └── 서울도시기본계획 모니터링 2015~2020 (TID: 292)│├── 조사데이터 (TID: 348)│ └── 설문조사 (TID: 293)│└── 서울의 근현대유산 (TID: 349) └── 서울의 근현대 유산 (TID: 294)4. 분류체계 및 검색 패싯
섹션 제목: “4. 분류체계 및 검색 패싯”콘텐츠 분류 및 검색 필터링에 사용되는 필드입니다.
| # | 분류명 | 필드명 | 타입 | 용어 목록 |
|---|---|---|---|---|
| 1 | 주제분류 | field_topic | Taxonomy (category_topic) | 용어 목록 |
| 2 | 시기분류 | field_decade | Taxonomy (category_decade) | 용어 목록 |
| 3 | 공공누리 | field_ggnuri | List (text) | 제1~4유형 |
| 4 | 핵심키워드 | field_keyword | Text (plain) | 자유 입력 |
4.1 검색 패싯 구현 현황
섹션 제목: “4.1 검색 패싯 구현 현황”통합검색 (/si/search)에서 사용되는 패싯 필터입니다. 2026-03-05 기준 5개 패싯 그룹 구현 완료.
| # | 패싯 (UI) | ES 필드 | 택소노미 | 필터 파라미터 | 상태 |
|---|---|---|---|---|---|
| 1 | ITEM 타입 | field_service | item_service (9개) | itemType | 동작 |
| 2 | 간행물 | service_title.keyword | — | service | 동작 |
| 3 | 주제분류 | field_category_data | category_data (17개) | category | 동작 |
| 4 | 시기분류 | field_series | category_period (4개) | period | UI 완료 (ES 미인덱싱) |
| 5 | 형태분류 | field_format | category_format (4개) | format | UI 완료 (ES 미인덱싱) |
참고: 시기분류/형태분류는 UI에 전체 택소노미 용어가 표시되나, ES 인덱스에 해당 필드가 아직 추가되지 않아 count=0으로 표시됩니다.
상세 구현: 검색시스템 문서
5. 필드 상세 설명
섹션 제목: “5. 필드 상세 설명”5.1 분류 필드 그룹
섹션 제목: “5.1 분류 필드 그룹”| 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|
| ITEM명 | field_service | Entity Reference (Taxonomy) | 2단 셀렉트박스로 콘텐츠의 분류 선택 (depth 0 → depth 1 AJAX 연동) |
| 주제분류 | field_topic | Entity Reference (Taxonomy) | 콘텐츠의 주제별 분류 (중복선택 가능) |
| 시기분류 | field_decade | Entity Reference (Taxonomy) | 콘텐츠의 시기별 분류 (중복선택 가능) |
5.2 메타데이터 필드 그룹
섹션 제목: “5.2 메타데이터 필드 그룹”| 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|
| 핵심 키워드 | field_keyword | Text (plain) | 검색을 위한 핵심 키워드 |
| 데이터 연도 | field_data_year | Text (plain) | 데이터의 기준 연도 |
| 발행일자 | field_date | Text (plain) | 콘텐츠 발행 일자 |
| 디스크립션 | field_description | Text (formatted, long) | 콘텐츠에 대한 상세 설명 |
5.3 미디어 필드 그룹
섹션 제목: “5.3 미디어 필드 그룹”| 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|
| 대표이미지 | field_thumbnail | Image | 콘텐츠의 썸네일 이미지 |
| 첨부파일 | field_attached_file | File | 다운로드 가능한 첨부 파일 |
5.4 콘텐츠 구성 필드 그룹
섹션 제목: “5.4 콘텐츠 구성 필드 그룹”| 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|
| 콘텐트 | field_content | Paragraphs | 동적 콘텐츠 구성을 위한 Paragraphs 필드 |
| 연관 콘텐츠 | field_related_data | Paragraphs | 관련 콘텐츠 연결을 위한 Paragraphs 필드 |
5.5 시스템 필드 그룹
섹션 제목: “5.5 시스템 필드 그룹”| 필드명 | 머신명 | 타입 | 설명 |
|---|---|---|---|
| 공공누리 | field_ggnuri | List (text) | 저작권 유형 선택 |
| 검색제외 | field_es | Boolean | 검색 결과에서 제외할지 여부 |
| 종간콘텐츠 여부 | field_legacy | Boolean | 종간 콘텐츠 여부 (기본값: 체크 해제) |
6. 구현 및 설정
섹션 제목: “6. 구현 및 설정”7. 폼 UI 개선사항
섹션 제목: “7. 폼 UI 개선사항”노드 편집 폼의 사용자 경험 개선을 위한 UI 구현입니다.
7.1 체크박스 그리드 레이아웃
섹션 제목: “7.1 체크박스 그리드 레이아웃”주제분류, 시기분류 필드의 체크박스를 그리드 형태로 배치하여 공간을 효율적으로 사용합니다.
| 필드 | 레이아웃 | 설명 |
|---|---|---|
주제분류 (field_topic) | 5열 그리드 | 18개 항목을 5열로 배치 |
시기분류 (field_decade) | 4열 그리드 | 4개 항목을 한 줄에 배치 |
반응형 대응:
- 태블릿 (992px 이하): 3열
- 모바일 (768px 이하): 2열
- 작은 모바일 (480px 이하): 1열
7.2 주제 설명 아코디언
섹션 제목: “7.2 주제 설명 아코디언”주제분류 체크박스 아래에 각 주제에 대한 설명을 아코디언 형태로 제공합니다.
UI 구조:
주제분류☐ 인구가구 ☐ 주택 ☐ 토지이용 ☐ 도시계획 ☐ 산업경제☐ 기업경영 ☐ 교통 ☐ 사회 ☐ 복지 ☐ 보건...콘텐츠의 주제를 선택합니다. 복수 선택 가능합니다.
▶ 주제 설명 보기 ← 클릭 시 펼침펼쳤을 때:
▼ 주제 설명 보기┌────────────┬────────────────────────────────────────┐│ 인구가구 │ 인구구조, 가구유형, 이동, 인구변동 ││ 주택 │ 주택현황, 주거환경, 주거비, 임대... ││ ... │ ... │└────────────┴────────────────────────────────────────┘구현 방식:
- HTML5
<details>+<summary>태그 사용 (JavaScript 불필요) - 설명 데이터:
category_topic택소노미 term의 description 필드 활용
7.3 관련 파일
섹션 제목: “7.3 관련 파일”| 파일 | 설명 |
|---|---|
web/modules/custom/si_data/si_data.module | si_data_form_alter() - 폼에 아코디언 마크업 삽입 |
web/modules/custom/si_data/si_data.module | si_data_build_topic_descriptions() - 주제 설명 마크업 생성 |
web/modules/custom/si_data/css/si-data.css | 체크박스 그리드, 아코디언 스타일 |
web/modules/custom/si_data/si_data.libraries.yml | CSS 라이브러리 정의 |
8. 향후 고려사항
섹션 제목: “8. 향후 고려사항”-
분류 택소노미 용어 정리
- 주제분류(category_topic): 18개 용어 정의 완료
- 관련 문서: 주제분류
-
HTML 콘텐츠 타입 결정
- 고객과 별도 협의 후 신규 생성 여부 확정 예정
-
사진 콘텐츠 공통요소
- 별도의 공통요소 설계를 진행할 예정
-
브레드크럼 구현 (보류)
- 목록 페이지 및 메뉴 변경 작업 시 함께 진행 예정
-
검색 연동
Elasticsearch 검색에서 신규 콘텐츠 타입의 분류 체계 반영- 통합검색 패싯 5개 구현 완료 (2026-03-05)
- 남은 작업: ES 인덱스에
field_series,field_format,field_keyword필드 추가
-
권한 설정
- 콘텐츠 타입별 생성/편집/삭제 권한 설정
9. 관련 문서
섹션 제목: “9. 관련 문서”변경 이력
섹션 제목: “변경 이력”| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| 1.0 | 2026-01-15 | 초기 문서 작성 |
| 1.1 | 2026-01-29 | 폼 UI 개선사항 섹션 추가, 문서 링크 경로 수정 |
| 1.2 | 2026-03-05 | 검색 패싯 구현 현황 추가 (5개 패싯 그룹) |
| 2.0 | 2026-03-09 | 정책 변경 반영 — 7개 신규 콘텐츠 타입 → 기존 5개 콘텐츠 타입에 8개 공통요소 필드 추가 방식으로 전환. field_item_type, field_chapter 제거. AJAX 3단→2단 축소. html_content/photo_content 제외 처리 |