diff --git a/linkareer-data-mapping-guide.md b/linkareer-data-mapping-guide.md index c7bf496c..8d4315e6 100644 --- a/linkareer-data-mapping-guide.md +++ b/linkareer-data-mapping-guide.md @@ -1,10 +1,12 @@ -# 링커리어 데이터 → Picklab DB 적재 AI 변환 가이드 +# 링커리어 데이터 -> Picklab DB 적재 변환 가이드 -링커리어에서 크롤링한 비정형 CSV 데이터를 Picklab DB 스키마에 맞게 변환할 때 AI에게 전달하는 기준 지침이다. +링커리어에서 크롤링한 `linkareer.csv` 데이터를 Picklab 활동 테이블과 enum 값에 맞게 변환하는 기준이다. + +적재 값은 화면 표시용 한글 라벨이 아니라 **DB/API enum name**을 사용한다. 한글은 판단을 돕는 설명으로만 사용한다. --- -## 입력 데이터 컬럼 (linkareer.csv) +## 1. 입력 데이터 컬럼 | 컬럼명 | 설명 | |--------|------| @@ -12,215 +14,318 @@ | `활동유형` | 대외활동 / 공모전/해커톤 / 교육 / 강연/세미나 | | `출처` | 링커리어 | | `제목` | 활동 제목 | -| `주최기관` | 기관명 → **`organizer` 컬럼에 그대로 저장** (기업형태 판단에도 활용) | -| `기업형태` | 링커리어의 원본 분류 값 | -| `참여대상` | 링커리어의 원본 참여 대상 | -| `접수기간` | 예: `2026.02.25 ~ 2026.03.08` | -| `활동기간` | 예: `26.3 ~ 26.10` | -| `모집인원` | 예: `10명`, `00명` (00명은 인원 미정으로 처리) | -| `모임지역` | 링커리어의 지역 분류 | -| `홈페이지` | 외부 링크 | -| `공모분야` | 공모전 도메인 분류 (링커리어 자체 분류) | +| `주최기관` | 기관명. `organizer` 컬럼에 저장 | +| `기업형태` | 링커리어의 주최 기관 유형 | +| `참여대상` | 링커리어의 참여 대상 | +| `접수기간` | 예: `2026.02.25 ~ 2026.03.08`, `2026.04.29 ~ 상시모집`, `2026.04.29 ~ 모집 시 마감` | +| `활동기간` | 예: `26.3 ~ 26.10`, `2026.05.17 ~ 2026.08.07`, `-` | +| `모집인원` | DB 적재 대상 아님 | +| `모임지역` | 대외활동/교육/강연·세미나의 지역 분류 | +| `홈페이지` | 외부 링크. `activity_homepage_url`에 저장 | +| `공모분야` | 공모전 도메인 분류 | | `활동분야` | 대외활동 분야 분류 | | `비용/시상규모` | 교육 비용 또는 공모전 시상 금액 | -| `썸네일이미지` | 썸네일 URL | -| `상세이미지` | 상세 이미지 URL (`;`로 복수 구분) | -| `상세내용` | 활동 상세 설명 텍스트 | +| `썸네일이미지` | `activity_thumbnail_url`에 저장 | +| `상세이미지` | 필요 시 `activity_upload_file`에 이미지 URL별로 저장 | +| `상세내용` | `description`에 저장 | --- -## 출력 필드별 변환 규칙 +## 2. 공통 필드 변환 -### 0. 주최기관명 (organizer) → `organizer` 컬럼 +### activity_type -링커리어의 `주최기관` 값을 **그대로** `organizer` 컬럼(VARCHAR)에 저장한다. 변환 없음. +| 링커리어 값 | Picklab enum | +|------------|--------------| +| 대외활동 | `EXTRACURRICULAR` | +| 공모전/해커톤 | `COMPETITION` | +| 교육 | `EDUCATION` | +| 강연/세미나 | `SEMINAR` | -예시: -- `(사)한국이스포츠협회` → `organizer = "(사)한국이스포츠협회"` -- `방송콘텐츠진흥재단` → `organizer = "방송콘텐츠진흥재단"` +위 값에 없는 활동유형은 적재하지 않는다. ---- +### title -### 1. 활동유형 (ActivityType) +- `제목`을 저장한다. +- DB/API 제한은 50자다. +- 50자를 초과하면 앞 47자를 사용하고 `...`을 붙여 총 50자로 만든다. +- 제목이 비어 있으면 적재하지 않는다. -| 링커리어 값 | Picklab 값 | -|------------|-----------| -| 대외활동 | `대외활동` | -| 공모전/해커톤 | `공모전` | -| 교육 | `교육` | -| 강연/세미나 | `강연/세미나` | +### organizer ---- +- `주최기관` 값을 그대로 저장한다. +- 현재 `organizer` DB 컬럼은 `VARCHAR(100)`이고, 현재 `linkareer.csv`의 최대 기관명 길이는 50자라 별도 축약하지 않는다. +- 값이 비어 있으면 `null`로 저장한다. -### 2. 기업형태 (OrganizerType) → `organizer_type` 컬럼 +### organizer_type -링커리어의 `기업형태` 컬럼 값과 `주최기관` 기관명을 함께 보고 판단한다. +`기업형태`가 있으면 우선 사용하고, 값이 비어 있거나 애매하면 `주최기관`, `홈페이지`, `상세내용`을 함께 보고 판단한다. 그래도 확실하지 않으면 `ETC`로 저장한다. -| 링커리어 값 | Picklab DB 값 (`organizer_type`) | 비고 | -|------------|----------------------------------|------| -| 대기업 | `LARGE_CORPORATION` | | -| 중견기업 | `MEDIUM_CORPORATION` | | -| 중소기업 | `SMALL_CORPORATION` | | -| 공공기관/공기업 | `PUBLIC_ORGANIZATION` | | -| 외국계기업 | `FOREIGN_CORPORATION` | | -| 스타트업 | `STARTUP` | | -| 금융권 | `FINANCIAL_INSTITUTION` | | -| 병원 | `HOSPITAL` | | -| 기타 | `ETC` | | -| 비영리단체/협회/재단 | **기관명으로 판단** | 아래 규칙 적용 | +| 링커리어 값 | Picklab enum | +|------------|--------------| +| 대기업 | `LARGE_CORPORATION` | +| 중견기업 | `MEDIUM_CORPORATION` | +| 중소기업 | `SMALL_CORPORATION` | +| 공공기관/공기업 | `PUBLIC_ORGANIZATION` | +| 외국계기업 | `FOREIGN_CORPORATION` | +| 비영리단체/협회/재단 | `NON_PROFIT` | +| 스타트업 | `STARTUP` | +| 금융권 | `FINANCIAL_INSTITUTION` | +| 병원 | `HOSPITAL` | +| 기타 | `ETC` | +| 동아리/학생자치단체 | `ETC` | +| 비어 있음 | 본문/기관명으로 판단, 불명확하면 `ETC` | -**비영리단체/협회/재단 분리 규칙:** -- `주최기관` 이름에 **"재단"** 이 포함되면 → `NON_PROFIT` (재단 포함) -- 나머지는 → `NON_PROFIT` +판단 보조 규칙: +- 기관명에 `시청`, `구청`, `도청`, `교육청`, `공사`, `공단`, `진흥원`, `정부`, `부처`, `대학교`, `대학`, `공공` 등이 명확하면 `PUBLIC_ORGANIZATION`을 우선 고려한다. +- 기관명에 `재단`, `협회`, `사단법인`, `사회복지관`, `복지센터`, `비영리` 등이 명확하면 `NON_PROFIT`을 우선 고려한다. +- `주식회사`, `(주)`, `회사`, `아카데미`, `학원`, `캠프`, `부트캠프` 등만으로 규모 판단이 어려우면 `ETC`로 둔다. -> 현재 `OrganizerType`에 재단/협회 세분화가 없으므로 모두 `NON_PROFIT`으로 통일한다. +### target_audience -예시: -- `(사)한국이스포츠협회` → `NON_PROFIT` -- `(재)제천문화재단` → `NON_PROFIT` -- `방송콘텐츠진흥재단` → `NON_PROFIT` +`target_audience`는 필수 enum이므로 `null`로 저장하지 않는다. ---- +| 링커리어 값 | Picklab enum | +|------------|--------------| +| 대학생 | `UNIVERSITY_STUDENT` | +| 직장인/일반인 | `WORKER` | +| 대상 제한 없음 | `ALL` | +| 청소년 포함 | `ALL` | +| 복수 대상 | `ALL` | +| 비어 있음 | 본문/제목으로 판단, 불명확하면 `ALL` | -### 3. 참여대상 (TargetAudience) +본문 판단 보조 규칙: +- `대학생`, `대학(원)생`, `재학생`, `휴학생`, `졸업예정자` 중심이면 `UNIVERSITY_STUDENT`. +- `직장인`, `재직자`, `구직자`, `일반인`, `예비창업자`, `청년`, `누구나`, `제한 없음`이거나 여러 대상이 섞이면 `ALL`. +- 교육 데이터처럼 참여대상이 비어 있고 본문에서도 제한이 명확하지 않으면 `ALL`로 저장한다. -링커리어의 `참여대상` 컬럼을 아래 규칙으로 단일 값으로 변환한다. +### recruitment_start_date, recruitment_end_date, recruitment_end_type -| 링커리어 값 | Picklab 값 | -|------------|-----------| -| `대학생` | `대학생` | -| `직장인/일반인` | `직장인 및 일반인` | -| `대상 제한 없음` | `대상 제한 없음` | -| `청소년` 포함 | `대상 제한 없음` | -| `청소년, 대학생` 등 복수 | `대상 제한 없음` | -| `대학생, 직장인/일반인` 등 복수 | `대상 제한 없음` | -| 비어 있음 (null) | `null` 로 적재 | +`접수기간`을 파싱한다. -**규칙 요약:** 참여 대상이 두 개 이상이거나 청소년이 포함된 경우, 대상 제한이 없는 것으로 간주하여 `대상 제한 없음`으로 설정한다. +| 접수기간 형태 | recruitment_start_date | recruitment_end_date | recruitment_end_type | +|---------------|------------------------|----------------------|----------------------| +| `2026.02.25 ~ 2026.03.08` | 시작일 | 종료일 | `FIXED` | +| `2026.02.27 ~ 상시모집` | 시작일 | `null` | `ALWAYS_OPEN` | +| `2026.04.29 ~ 모집 시 마감` | 시작일 | `null` | `CLOSE_ON_HIRE` | ---- +`recruitment_end_type = FIXED`이면 `recruitment_end_date`는 반드시 있어야 한다. + +### start_date, end_date, duration -### 4. 활동분야 (ActivityField) — 대외활동 한정 +`활동기간`을 파싱한다. -링커리어의 `활동분야` 컬럼을 Picklab 분류로 변환한다. `;`로 구분된 복수 값은 각각 매핑 후 대표 값 하나를 선택하거나 복수 태그로 처리한다. +- `26.3 ~ 26.10`은 `2026-03-01 ~ 2026-10-01`처럼 월 첫날로 변환한다. +- `2026.05.17 ~ 2026.08.07`은 해당 날짜 그대로 변환한다. +- `-` 또는 비어 있으면 `start_date = recruitment_start_date`, `end_date = null`, `duration = -1`로 저장한다. +- 기간 계산이 가능하면 `duration`은 시작일과 종료일 사이의 일수로 저장한다. -| 링커리어 값 | Picklab 값 | -|------------|-----------| -| 서포터즈 | `서포터즈` | -| 마케터 | `마케터` | -| 멘토링 | `멘토링` | -| 기자단 | `기자단` | -| 봉사단-국내 | `국내봉사` | -| 해외봉사 | `해외봉사` | -| **해외탐방** | `해외봉사` (해외봉사와 동일하게 처리) | -| **강연** | `강연/세미나` | -| 기타 | `기타` | +### status + +- 기본값은 `OPEN`. +- 모집 종료 유형이 `FIXED`이고 `recruitment_end_date`가 적재일 기준 과거면 `CLOSED`. +- `ALWAYS_OPEN`은 `OPEN`. +- `CLOSE_ON_HIRE`는 원문에 마감/종료 표현이 명확하지 않으면 `OPEN`. + +### URL, 이미지, 본문 + +- `홈페이지` -> `activity_homepage_url` +- `/상세링크` -> `activity_application_url`. 상대경로이면 링커리어 도메인을 붙여 절대 URL로 만든다. +- `썸네일이미지` -> `activity_thumbnail_url` +- `상세내용` -> `description` +- `description`은 2000자 제한이다. 2000자를 초과하면 핵심 모집 정보가 남도록 1997자 이내로 줄이고 `...`을 붙인다. +- `benefit`은 본문에서 혜택이 명확히 분리될 때만 추출하고, 불명확하면 빈 문자열로 둔다. --- -### 5. 모임지역 (MeetingRegion) - -| 링커리어 값 | Picklab 값 | -|------------|-----------| -| `지역 제한없음` | `지역 제한없음` | -| 서울 포함 (`서울 강남구`, `서울 종로구` 등) | `서울/인천` | -| 인천 포함 | `서울/인천` | -| 경기 포함 | `경기/강원` | -| 강원 포함 | `경기/강원` | -| 대전 포함 | `대전/세종/충남` | -| 충청 포함 | `대전/세종/충남` | -| 부산 포함 | `부산/대구/경상` | -| 대구 포함 | `부산/대구/경상` | -| 울산 포함 | `부산/대구/경상` | -| 경상 포함 | `부산/대구/경상` | -| 광주 포함 | `광주/전라` | -| 전라 포함 | `광주/전라` | -| 제주 포함 | `제주` | -| 해외 포함 | `해외` | -| 복수 지역이 포함된 경우 | `지역 제한없음` | +## 3. 대외활동 전용 필드 + +### activity_field + +대외활동은 `activity_field`가 필수다. `활동분야`가 복수이면 아래 우선순위로 대표값 하나를 선택한다. + +우선순위: `SUPPORTERS` > `MARKETER` > `MENTORING` > `PRESS` > `DOMESTIC_VOLUNTEER` > `OVERSEAS_VOLUNTEER` > `LECTURE` > `ETC` + +| 링커리어 값 | Picklab enum | +|------------|--------------| +| 서포터즈 | `SUPPORTERS` | +| 마케터 | `MARKETER` | +| 멘토링 | `MENTORING` | +| 기자단 | `PRESS` | +| 봉사단-국내 | `DOMESTIC_VOLUNTEER` | +| 봉사단-해외 | `OVERSEAS_VOLUNTEER` | +| 해외탐방-유료 | `OVERSEAS_VOLUNTEER` | +| 해외탐방-무료 | `OVERSEAS_VOLUNTEER` | +| 강연 | `LECTURE` | +| 기타 | `ETC` | +| 비어 있음/판단 불가 | `ETC` | + +### location + +| 링커리어 값 | Picklab enum | +|------------|--------------| +| 지역 제한없음 | `ALL` | +| 서울 포함 | `SEOUL_INCHEON` | +| 인천 포함 | `SEOUL_INCHEON` | +| 경기 포함 | `GYEONGGI_GANGWON` | +| 강원 포함 | `GYEONGGI_GANGWON` | +| 대전/세종/충청/충남 포함 | `DAEJEON_SEJONG_CHUNGNAM` | +| 부산/대구/울산/경상 포함 | `BUSAN_DAEGU_GYEONGSANG` | +| 광주/전라 포함 | `GWANGJU_JEOLLA` | +| 제주 포함 | `JEJU` | +| 해외 포함 | `OVERSEAS` | +| 복수 권역 포함 | `ALL` | +| 비어 있음/판단 불가 | `ALL` | --- -### 6. 도메인 (Domain) — 공모전 한정 +## 4. 교육 전용 필드 + +교육 데이터는 `기업형태`와 `참여대상`이 비어 있는 경우가 많다. 그래도 현재 생성 API 기준으로 `organizer_type`, `target_audience`, `location`, `cost`, `cost_type`, `education_format`은 채워야 한다. + +### location + +대외활동의 location 규칙과 동일하게 매핑한다. + +### cost, cost_type -링커리어의 `공모분야` 컬럼 값과 `제목`, `상세내용`을 종합적으로 분석하여 Picklab 도메인으로 분류한다. +`비용/시상규모`를 금액과 비용 유형으로 나누어 저장한다. -**Picklab 도메인 목록:** -`SaaS`, `웹 (Web)`, `모바일 (App)`, `클라우드`, `AI`, `사물인터넷 (IoT)`, `교육`, `금융`, `게임 및 엔터테인먼트`, `생활과학 및 헬스케어`, `커머스`, `콘텐츠 및 소셜`, `교통 및 물류`, `AR 및 VR`, `전자기술 및 로보틱스`, `비즈니스 및 엔터프라이즈`, `기타` +| 원본 값 | cost | cost_type | +|---------|------|-----------| +| 무료 | `0` | `FREE` | +| 무료(국비지원) | `0` | `FULLY_GOVERNMENT` | +| 4만원 | `40000` | `PAID` | +| 4만원(국비지원) | `40000` | `PARTIALLY_GOVERNMENT` | +| 비어 있음/파싱 불가 | `0` | `FREE` | -**링커리어 공모분야 참고 매핑:** +### education_format -| 링커리어 공모분야 | 우선 고려 Picklab 도메인 | -|-----------------|------------------------| -| 과학/공학 | `AI`, `전자기술 및 로보틱스`, `사물인터넷 (IoT)` 중 상세내용 보고 판단 | -| 기획/아이디어, 창업 | `비즈니스 및 엔터프라이즈` 또는 상세내용 보고 판단 | -| 사진/영상/UCC | `콘텐츠 및 소셜` | -| 문학/시나리오 | `콘텐츠 및 소셜` | -| 디자인/순수미술/공예 | `콘텐츠 및 소셜` | -| 캐릭터/만화/게임 | `게임 및 엔터테인먼트` | -| 네이밍/슬로건 | `콘텐츠 및 소셜` | -| 학술 | `교육` | -| 기타 | `기타` | +`education_format`은 현재 API 필수값이므로 `null`로 저장하지 않는다. -**중요:** 공모분야가 위 목록에 없거나 맞는 도메인이 불분명한 경우 반드시 `기타`로 설정한다. 억지로 매핑하지 않는다. +| 판단 근거 | Picklab enum | +|-----------|--------------| +| 온라인, 비대면, Zoom, ZOOM, 줌, 메타버스, 실시간 온라인 | `ONLINE` | +| 오프라인, 대면, 현장, 센터, 캠퍼스, 강의장, 지역 주소 | `OFFLINE` | +| 온라인과 오프라인이 모두 명시됨 | `ALL` | +| 판단 불가 | `ALL` | --- -### 7. 시상규모 (PrizeRange) — 공모전 한정 +## 5. 공모전/해커톤 전용 필드 -링커리어의 `비용/시상규모` 컬럼에서 금액을 파싱하여 아래 기준으로 분류한다. +### domain -| 조건 | Picklab 값 | -|------|-----------| -| 시상 금액 합계 또는 최고 상금이 **500만 원 미만** | `5백만원 미만` | -| 시상 금액 합계 또는 최고 상금이 **500만 원 이상 ~ 5,000만 원 미만** | `5백만원 이상` | -| 시상 금액 합계 또는 최고 상금이 **5,000만 원 이상** | `5천만원 이상` | -| 금액 없음 (`-`, 비어 있음, 파싱 불가) | `null` 로 적재 | +`공모분야`, `제목`, `상세내용`을 함께 보고 하나의 `DomainType`을 선택한다. 불명확하면 `ETC`로 저장한다. -금액 표기 예시 처리: -- `300만 원` → 300만 원 → `5백만원 미만` -- `1280만 원` → 1280만 원 → `5백만원 이상` -- `4000만 원` → 4000만 원 → `5백만원 이상` -- `1억 250만 원` → 1억 250만 원 → `5천만원 이상` -- `600억 원`, `800억 원` → `5천만원 이상` -- `-` → `null` +| 링커리어 공모분야 | 우선 고려 Picklab enum | +|------------------|------------------------| +| 과학/공학 | `AI`, `ELECTRONICS_ROBOTICS`, `IOT` 중 본문 기준 판단 | +| 기획/아이디어 | `BUSINESS_ENTERPRISE` | +| 창업 | `BUSINESS_ENTERPRISE` | +| 사진/영상/UCC | `CONTENT_SOCIAL` | +| 문학/시나리오 | `CONTENT_SOCIAL` | +| 디자인/순수미술/공예 | `CONTENT_SOCIAL` | +| 캐릭터/만화/게임 | `GAME_ENTERTAINMENT` | +| 네이밍/슬로건 | `CONTENT_SOCIAL` | +| 학술 | `EDUCATION` | +| 광고/마케팅 | `CONTENT_SOCIAL` 또는 `BUSINESS_ENTERPRISE` 중 본문 기준 판단 | +| 건축/건설/인테리어 | `ETC` | +| 전시/페스티벌 | `CONTENT_SOCIAL` | +| 예체능/패션 | `CONTENT_SOCIAL` | +| 해외 | `ETC` | +| 기타 | `ETC` | + +### cost + +공모전의 `cost`는 구간 라벨이 아니라 **원 단위 Long 금액**으로 저장한다. 구간 표시는 FE 또는 검색 필터가 담당한다. + +금액이 여러 개 나오면 전체 시상 총액을 우선 사용하고, 총액이 없으면 최고 상금을 사용한다. + +예시: +- `300만 원` -> `3000000` +- `1280만 원` -> `12800000` +- `4000만 원` -> `40000000` +- `1억 250만 원` -> `102500000` +- `600억 원` -> `60000000000` +- `-`, 비어 있음, 파싱 불가 -> `0` --- -### 8. 교육 온/오프라인 (OnOffline) — 교육 한정 +## 6. 강연/세미나 전용 필드 + +### location -**적재 제외.** 교육 활동의 온/오프라인 필터는 데이터 충족률이 낮아 이번 적재에서 제외한다. 해당 필드는 `null`로 유지한다. +대외활동의 location 규칙과 동일하게 매핑한다. --- -## 적재 제외 케이스 +## 7. 적재 제외 케이스 -다음에 해당하는 row는 DB에 적재하지 않는다: +다음 row는 적재하지 않는다. -- `활동유형`이 위 매핑 표에 없는 경우 +- `활동유형`이 매핑 표에 없는 경우 - `제목`이 비어 있는 경우 +- `FIXED` 모집인데 모집 종료일을 파싱할 수 없는 경우 +- 타입별 필수 필드를 위 규칙으로도 채울 수 없는 경우 --- -## 처리 예시 +## 8. 처리 예시 -**입력:** -``` +### 공모전 예시 + +입력: + +```text 활동유형: 공모전/해커톤 제목: 2026 방콘진 혁신 방송 신기술 상용화 지원 공모 사업 주최기관: 방송콘텐츠진흥재단 기업형태: 비영리단체/협회/재단 참여대상: 대학생, 직장인/일반인 +접수기간: 2026.02.25 ~ 2026.03.08 공모분야: 기획/아이디어; 과학/공학 비용/시상규모: 4000만 원 ``` -**출력:** +출력: + +```text +activity_type: COMPETITION +title: 2026 방콘진 혁신 방송 신기술 상용화 지원 공모 사업 +organizer: 방송콘텐츠진흥재단 +organizer_type: NON_PROFIT +target_audience: ALL +recruitment_start_date: 2026-02-25 +recruitment_end_date: 2026-03-08 +recruitment_end_type: FIXED +domain: BUSINESS_ENTERPRISE +cost: 40000000 ``` -활동유형: COMPETITION -organizer: "방송콘텐츠진흥재단" ← 주최기관 그대로 저장 -organizer_type: NON_PROFIT ← 기관명에 "재단" 포함이지만 enum은 NON_PROFIT 통일 -참여대상: ALL ← 복수 대상 → ALL -도메인: BUSINESS_ENTERPRISE ← 기획/아이디어 기반, 상세내용 보고 판단 -시상규모: 5백만원 이상 ← 4000만 원 → 500만~5000만 원 구간 + +### 교육 예시 + +입력: + +```text +활동유형: 교육 +주최기관: 이스트소프트 +기업형태: +참여대상: +모임지역: 지역 제한없음 +비용/시상규모: 무료(국비지원) +상세내용: 비 수도권 100% 비대면 수업 가능 +``` + +출력: + +```text +activity_type: EDUCATION +organizer: 이스트소프트 +organizer_type: ETC +target_audience: ALL +location: ALL +cost: 0 +cost_type: FULLY_GOVERNMENT +education_format: ONLINE ``` diff --git a/src/main/kotlin/picklab/backend/activity/domain/enums/ActivityFieldType.kt b/src/main/kotlin/picklab/backend/activity/domain/enums/ActivityFieldType.kt index 51f37cad..156d3716 100644 --- a/src/main/kotlin/picklab/backend/activity/domain/enums/ActivityFieldType.kt +++ b/src/main/kotlin/picklab/backend/activity/domain/enums/ActivityFieldType.kt @@ -10,6 +10,7 @@ enum class ActivityFieldType( OVERSEAS_VOLUNTEER("해외봉사"), DOMESTIC_VOLUNTEER("국내봉사단"), LECTURE("강연"), + ETC("기타"), ; companion object {