# Phase 7: Event Lookup & Parameter Library Web App Google Apps Script를 활용한 Event Taxonomy Sheet 기반 업무 지원용 앱 배포. ## Objectives 1. Event Taxonomy 데이터 조회 앱 2. 실시간 파라미터 참조 도구 3. 비개발자용 Self-service 도구 4. 팀 간 일관된 이벤트 정보 공유 ## App Architecture ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Google Sheets │────▶│ Apps Script │────▶│ Web App │ │ (Taxonomy DB) │ │ (Backend) │ │ (Frontend) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ## Google Sheets Data Source ### Required Sheets - Events Master - Parameters Reference - Custom Definitions - Platform Mapping ### Column Requirements → Phase 4 참조: [phase4-taxonomy.md](phase4-taxonomy.md) ## Apps Script Setup ### 1. Project Creation ``` 1. Google Sheets 열기 2. Extensions > Apps Script 3. 프로젝트 이름 설정 ``` ### 2. Core Functions #### Data Retrieval ```javascript function getEventsData() { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('Events Master'); const data = sheet.getDataRange().getValues(); const headers = data[0]; return data.slice(1).map(row => { const obj = {}; headers.forEach((header, i) => { obj[header] = row[i]; }); return obj; }); } function getParametersData() { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('Parameters Reference'); const data = sheet.getDataRange().getValues(); const headers = data[0]; return data.slice(1).map(row => { const obj = {}; headers.forEach((header, i) => { obj[header] = row[i]; }); return obj; }); } ``` #### Search Function ```javascript function searchEvents(query) { const events = getEventsData(); const searchTerm = query.toLowerCase(); return events.filter(event => event.event_name.toLowerCase().includes(searchTerm) || event.event_category.toLowerCase().includes(searchTerm) || event.notes.toLowerCase().includes(searchTerm) ); } function getEventDetails(eventName) { const events = getEventsData(); const params = getParametersData(); const event = events.find(e => e.event_name === eventName); if (!event) return null; const eventParams = event.parameters.split(',').map(p => p.trim()); const paramDetails = params.filter(p => eventParams.includes(p.parameter_name) ); return { event: event, parameters: paramDetails }; } ``` ### 3. Web App Handler ```javascript function doGet(e) { return HtmlService.createHtmlOutputFromFile('index') .setTitle('GTM Event Lookup') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } function doPost(e) { const action = e.parameter.action; switch(action) { case 'search': return ContentService.createTextOutput( JSON.stringify(searchEvents(e.parameter.query)) ).setMimeType(ContentService.MimeType.JSON); case 'details': return ContentService.createTextOutput( JSON.stringify(getEventDetails(e.parameter.eventName)) ).setMimeType(ContentService.MimeType.JSON); default: return ContentService.createTextOutput( JSON.stringify({error: 'Invalid action'}) ).setMimeType(ContentService.MimeType.JSON); } } ``` ### 4. HTML Frontend (index.html) ```html

🏷️ GTM Event Lookup

``` ## Deployment ### 1. Deploy as Web App ``` 1. Deploy > New deployment 2. Type: Web app 3. Execute as: Me 4. Access: Anyone within organization (또는 Anyone) 5. Deploy ``` ### 2. Get Web App URL ``` 배포 후 제공되는 URL 복사 https://script.google.com/macros/s/[ID]/exec ``` ### 3. Share with Team - URL을 Notion/Slack에 공유 - 북마크 권장 ## Features Roadmap ### Phase 1 (MVP) - [x] 이벤트 검색 - [x] 파라미터 조회 - [x] 우선순위 필터 ### Phase 2 - [ ] DataLayer 코드 스니펫 복사 - [ ] 플랫폼별 코드 예시 - [ ] 최근 조회 히스토리 ### Phase 3 - [ ] 이벤트 추가/수정 폼 - [ ] 변경 이력 추적 - [ ] Slack 알림 연동 ## Maintenance ### Data Update 1. Google Sheets 원본 데이터 수정 2. Web App 자동 반영 (실시간) ### Code Update 1. Apps Script 수정 2. Deploy > Manage deployments 3. New version 배포 ### Backup - Google Sheets 자동 버전 히스토리 - 주기적 수동 백업 권장 ## Access Control | Role | Access Level | |------|--------------| | Admin | 시트 편집 + 스크립트 수정 | | Editor | 시트 편집 | | Viewer | Web App 조회만 | ## Troubleshooting | Issue | Solution | |-------|----------| | 앱 로딩 느림 | 데이터 캐싱 구현 | | 검색 결과 없음 | 검색어 확인, 데이터 존재 확인 | | 권한 오류 | 배포 설정에서 접근 권한 확인 | | 데이터 미반영 | 시트 새로고침, 캐시 클리어 | ## Integration with Notion Web App URL을 Notion에 embed: ``` /embed [Web App URL] ``` 또는 iframe으로 직접 삽입.