careermate 0.0.10 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/FAQ.md CHANGED
@@ -110,7 +110,7 @@ AI에게 "이 공고 저장하고 분석해줘"라고 하면서 URL이나 본문
110
110
  사용자 컴퓨터의 `~/.careermate`(Windows: `%USERPROFILE%\.careermate`)에만 저장됩니다.
111
111
  대시보드 **설정 > 데이터 저장 위치**에서 정확한 경로를 볼 수 있습니다. CareerMate가
112
112
  외부 서버로 개인 데이터를 보내는 일은 없습니다(외부 호출은 선택적 버전 확인과 공고
113
- 검색 시 검색 키워드뿐).
113
+ 검색 시 검색 키워드·직무 조건뿐).
114
114
 
115
115
  ### AI와 대화하면 내 데이터는 어디로 가나요?
116
116
  CareerMate 도구의 응답(프로필·이력서·자소서 등)은 **당신이 연결한 AI 클라이언트**
@@ -127,6 +127,5 @@ CareerMate 도구의 응답(프로필·이력서·자소서 등)은 **당신이
127
127
 
128
128
  ---
129
129
 
130
- 여기서 해결되지 않으면 [GitHub 이슈](https://github.com/osntak/careermate/issues)에 남겨
131
- 주세요. **보안 문제**는 이슈가 아니라 [`../SECURITY.md`](../SECURITY.md)의 비공개 절차를
132
- 이용해 주세요.
130
+ 여기서 해결되지 않으면 [이메일](mailto:osntak@gmail.com)로 문의해 주세요. 문의에는
131
+ 이름·연락처·자기소개서 본문 같은 개인정보를 붙여넣지 마세요.
@@ -19,7 +19,7 @@ Some features may use the network without changing the local-first model:
19
19
 
20
20
  - checking the npm registry for a newer CareerMate version
21
21
  - opening current installation documentation
22
- - searching supported public job-board endpoints using only the user's search keyword
22
+ - searching supported public job-board endpoints using only the user's search keyword and job category (locally, CareerMate only records which postings it has already seen: board, posting id, date)
23
23
  - loading the public product website or demo
24
24
  - public-site analytics on `careermate.life`
25
25
 
package/docs/MCP_TOOLS.md CHANGED
@@ -12,11 +12,11 @@ CareerMate는 **MCP-우선** 로컬 커리어 관리 도구입니다. 사용자
12
12
 
13
13
  ## 읽기 전용(read-only) 표기 안내
14
14
 
15
- 각 도구 항목의 **읽기전용** 열은 `tools.ts`의 `readOnly: true` 플래그를 그대로 반영합니다. 읽기전용 도구는 DB를 변경하지 않고 조회만 하며, 그 외 도구는 데이터를 생성·갱신하거나(쓰기) 브라우저를 여는 등의 부수효과를 가집니다.
15
+ 각 도구 항목의 **읽기전용** 열은 `tools.ts`의 `readOnly: true` 플래그를 그대로 반영합니다. 읽기전용 도구는 DB를 변경하지 않고 조회만 하며(예외: `search_jobs`는 공고를 처음 본 날짜를, `check_for_update`는 확인 결과를 로컬 캐시로 남긴다. 사용자 데이터는 바꾸지 않는다), 그 외 도구는 데이터를 생성·갱신하거나(쓰기) 브라우저를 여는 등의 부수효과를 가집니다.
16
16
 
17
17
  | 읽기전용(✅) 도구 | 쓰기/부수효과(✏️) 도구 |
18
18
  | --- | --- |
19
- | `read_document`, `read_inbox`, `get_onboarding_status`, `get_profile`, `get_resumes`, `get_experiences`, `get_projects`, `get_skills`, `get_cover_letters`, `get_job_posting`, `list_jobs`, `prescreen_job`, `search_jobs`, `compare_offers`, `get_offer`, `get_application_context`, `list_recent_activity`, `get_followups`, `get_pipeline_stats`, `get_workflow_guide`, `get_playbook`, `get_verifier`, `validate_cover_letter`, `get_writing_style_guide`, `check_for_update` | `open_inbox`, `save_profile`, `add_resume`, `delete_resume`, `add_experience`, `delete_experience`, `add_project`, `delete_project`, `add_skill`, `delete_skill`, `save_cover_letter_version`, `delete_cover_letter`, `set_verify_mode`, `save_job_posting`, `delete_job_posting`, `save_fit_analysis`, `update_application_status`, `save_interview_prep`, `save_offer`, `export_cover_letter`, `export_resume`, `export_profile`, `open_dashboard`, `open_application`, `update_careermate` |
19
+ | `read_document`, `read_inbox`, `get_onboarding_status`, `get_profile`, `get_resumes`, `get_experiences`, `get_projects`, `get_skills`, `get_cover_letters`, `get_job_posting`, `list_jobs`, `prescreen_job`, `search_jobs`, `find_job_categories`, `get_job_search_preferences`, `compare_offers`, `get_offer`, `get_application_context`, `list_recent_activity`, `get_followups`, `get_pipeline_stats`, `get_workflow_guide`, `get_playbook`, `get_verifier`, `validate_cover_letter`, `get_writing_style_guide`, `check_for_update` | `open_inbox`, `save_profile`, `add_resume`, `delete_resume`, `add_experience`, `delete_experience`, `add_project`, `delete_project`, `add_skill`, `delete_skill`, `save_cover_letter_version`, `delete_cover_letter`, `set_verify_mode`, `set_job_search_preferences`, `save_job_posting`, `delete_job_posting`, `save_fit_analysis`, `update_application_status`, `save_interview_prep`, `save_offer`, `export_cover_letter`, `export_resume`, `export_profile`, `open_dashboard`, `open_application`, `update_careermate` |
20
20
 
21
21
  ---
22
22
 
@@ -141,7 +141,10 @@ AI 클라이언트가 연결되면 이 도구를 가장 먼저 호출해 상태
141
141
 
142
142
  | 도구 | 목적 | 주요 입력 | 반환 | 언제 호출 | 읽기전용 |
143
143
  | --- | --- | --- | --- | --- | --- |
144
- | `search_jobs` | 키워드로 무인증 공개 잡보드(원티드·점핏)에서 공고를 *가져옴*(저장은 안 함) | `keyword`(필수), `sources?`, `limit?`(기본 10) | `{ query, results[](회사·직무·url·지역·경력·기술·마감), providers[] }` | 사용자가 "○○ 공고 찾아줘"라고 할 때. 결과를 보여주고 **고른 것만** save_job_posting | ✅ |
144
+ | `search_jobs` | 키워드나 직무 조건으로 무인증 공개 잡보드(원티드·점핏·리멤버·사람인)에서 공고를 *가져옴*(저장은 안 함). 여러 사이트의 같은 공고는 한 줄로 합침 | `keyword?`, `sources?`, `limit?`(사이트별, 기본 10, posted_since가 있으면 50, 최대 100), `remember_categories?`(["재무·회계·세무>회계결산"]), `saramin_categories?`(["322"]), `posted_since?`("today"·YYYY-MM-DD). keyword와 직무 조건을 모두 비우면 저장된 검색 조건 사용 | `{ query, results[](회사·직무·url·지역·경력·기술·마감·posted_at·first_seen_at·also_on, 사람인은 category_codes), providers[], filtered_out?, conditions, used_saved_preferences }` | "○○ 공고 찾아줘", "오늘 올라온 공고 보여줘". 결과를 보여주고 **고른 것만** save_job_posting. 원티드·점핏은 게시일이 없어 처음 본 날로 거름 | ✅ |
145
+ | `find_job_categories` | 직무 이름을 리멤버 분류("상위>하위")와 사람인 직무 코드로 변환(내장 분류표, 외부 통신 없음). 모든 직군 | `query`(쉼표로 여러 개), `limit?`(기본 20) | `{ query, remember[], saramin[](code·name·group·kind) }` 관련도순 | search_jobs·set_job_search_preferences에 직무 조건을 넣기 전 | ✅ |
146
+ | `get_job_search_preferences` | 저장된 공고 검색 조건 조회 | 없음 | `{ keyword, remember_categories, saramin_categories, updated_at }` | "내 검색 조건 뭐야?" | ✅ |
147
+ | `set_job_search_preferences` | 자주 볼 공고 검색 조건 저장(준 필드만 갱신). 리멤버 분류는 내장 분류표로 검증 | `keyword?`, `remember_categories?`, `saramin_categories?` | 저장된 조건 | 사용자 직무를 find_job_categories로 찾고 확인받은 뒤 | ✏️ |
145
148
  | `save_job_posting` | 채용공고 저장(있으면 갱신). 저장 시 지원(application) 항목 자동 생성 | `company`, `position`(필수), `url?`, `location?`, `employment_type?`, `description?`, `requirements?`, `keywords?`, `deadline?`, `source?`, `questions?`(회사 지정 자소서 문항·글자수: `question`·`min_chars`·`max_chars`·`count_mode`), `schedule?`(전형 일정: `label`·`date`(YYYY-MM-DD) 필수·`time`(HH:MM)·`note`) | 저장된 `JobRecord`(`job_id` 포함) | 공고를 DB에 등록/갱신할 때 | ✏️ |
146
149
  | `get_job_posting` | 공고 1건 상세 조회 | `job_id` | `{ job, fit, application, cover_letters, interview }` | 한 공고의 분석·상태·자소서·면접 자료를 한 번에 볼 때 | ✅ |
147
150
  | `list_jobs` | 저장된 모든 공고를 지원 상태·적합도 점수와 함께 목록화 | 없음 | 공고 메타 포함 배열 | 전체 공고를 훑어볼 때 | ✅ |
@@ -1,6 +1,6 @@
1
1
  # Career-OS — 외부 LLM 실행 진입점 (단일 입구)
2
2
 
3
- > ✅ **상태(2026-06): 이 라우팅·EOP 적용은 이제 런타임에 배선되어 있다(Phase B-1).** 연결된 AI는 `get_workflow_guide`로 작업별 실행 절차(EOP)와 적용할 플레이북·검증기 순서를 받고, `get_playbook`/`get_verifier`로 이 폴더의 지식을 실제로 받아 적용한다. `get_application_context`도 `recommended_route`·`verifier_sequence`·`next_tool`를 함께 돌려준다. 아직 구현하지 않은 범위(B-2: det 점수 계산·저장 게이트·마이그레이션)와 패키지 구조는 [`implementation/README.md`](https://github.com/osntak/careermate/blob/main/docs/career-os/implementation/README.md) 참고.
3
+ > ✅ **상태(2026-06): 이 라우팅·EOP 적용은 이제 런타임에 배선되어 있다(Phase B-1).** 연결된 AI는 `get_workflow_guide`로 작업별 실행 절차(EOP)와 적용할 플레이북·검증기 순서를 받고, `get_playbook`/`get_verifier`로 이 폴더의 지식을 실제로 받아 적용한다. `get_application_context`도 `recommended_route`·`verifier_sequence`·`next_tool`를 함께 돌려준다. 아직 구현하지 않은 범위(B-2: det 점수 계산·저장 게이트·마이그레이션)와 패키지 구조는 [`implementation/README.md`](implementation/README.md) 참고.
4
4
 
5
5
  > **여기서 시작하라.** CareerMate는 수동적 지식이 아니라, 외부 AI가 사용자 대면 결과를 내기 전에 적용해야 하는
6
6
  > **실행형 플레이북(EOP)·검증 루브릭·라우팅·출력 계약**을 제공한다. 두뇌=외부 AI(당신), CareerMate=실행 기질(substrate). 내부 LLM 없음.
@@ -9,7 +9,7 @@
9
9
  > 보조(런타임 아님): `validation/`(리서치 출처 + 다중 LLM(cross-vendor) 검증 하니스) · `implementation/`(CareerMate 개발자용 Phase B 내부 설계).
10
10
  >
11
11
  > EOP(Expert Operating Procedure) = 한 기능을 *시니어 전문가처럼* 수행하는 실행 절차. 검증된 리서치(`validation/research/`)에 근거하고
12
- > [`validation/PROTOCOL.md`](https://github.com/osntak/careermate/blob/main/docs/career-os/validation/PROTOCOL.md)의 다중 LLM(cross-vendor) 교차검증으로 단단해진다.
12
+ > [`validation/PROTOCOL.md`](validation/PROTOCOL.md)의 다중 LLM(cross-vendor) 교차검증으로 단단해진다.
13
13
 
14
14
  ## 0. 절대 원칙 — 근거 우선순위
15
15
  ```
package/package.json CHANGED
@@ -1,18 +1,11 @@
1
1
  {
2
2
  "name": "careermate",
3
- "version": "0.0.10",
3
+ "version": "0.0.13",
4
4
  "type": "module",
5
5
  "description": "CareerMate — an MCP-first, local-first career workspace. Your career database and documents stay on your machine; optional discovery and update features may use the internet without sending stored career data.",
6
6
  "license": "MIT",
7
7
  "author": "CareerMate",
8
8
  "homepage": "https://careermate.life",
9
- "repository": {
10
- "type": "git",
11
- "url": "git+https://github.com/osntak/careermate.git"
12
- },
13
- "bugs": {
14
- "url": "https://github.com/osntak/careermate/issues"
15
- },
16
9
  "keywords": [
17
10
  "career",
18
11
  "resume",
@@ -7,6 +7,7 @@ export * from './context.ts';
7
7
  export * from './services.ts';
8
8
  export * from './summary.ts';
9
9
  export * from './jobsearch.ts';
10
+ export * from './job-categories.ts';
10
11
  export * from './offers.ts';
11
12
  export * from './data-health.ts';
12
13
  export * from './fit-explain.ts';
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Job category tables for the boards that filter by category (generated, do not hand-edit).
3
+ * Snapshot taken 2026-11-04:
4
+ * - Remember: the "직무" filter dialog on career.rememberapp.co.kr (group → sub-category names;
5
+ * the search API takes the names as { level1, level2 }).
6
+ * - Saramin: the category JSON embedded in www.saramin.co.kr/zf_user/jobs/list/job-category
7
+ * (group → kind → [cat_kewd code, name]).
8
+ * Boards rarely rename categories; if a filter stops matching, re-take the snapshot.
9
+ */
10
+
11
+ export const REMEMBER_CATEGORIES: Record<string, string[]> = {
12
+ "경영·전략·기획": ["법인대표·CEO","전략기획(Corporate)","사업전략·기획","신사업 기획·개발","사업개발(BD)","사업분석(BA)","상품기획","기술기획","사업운영","PM·PMO(프로젝트)","기타 전략·기획직"],
13
+ "서비스기획·운영": ["서비스기획·PM/PO(프로덕트)","게임기획","서비스운영","CX·CS","기타 서비스기획·운영직"],
14
+ "재무·회계·세무": ["국내공인회계사","해외공인회계사","세무사","연결회계","회계결산","경영분석(FP&A)","내부회계","원가회계","해외법인관리","세무계획","세무신고","국제세무","자금계획","자금조달","자금운영","외환","IR·공시","기타 재무·회계"],
15
+ "HR·총무": ["노무사","인사기획","채용","급여·복리후생","평가·보상","HRD","노무·노사","총무","비서","헤드헌터","기타 HR·총무"],
16
+ "법무·컴플라이언스": ["변호사","변리사","법무사","법무","컴플라이언스·준법감시","내부감사","윤리경영·ESG·CSR","특허·지식재산권(IP)","판사·검사","기타 법무·컴플라이언스"],
17
+ "컨설팅": ["전략컨설팅","오퍼레이션컨설팅","IT컨설팅","보안컨설팅","인사컨설팅","교육컨설팅","기타 컨설턴트"],
18
+ "리서치·분석": ["인문·사회·경제","시장조사","기타 조사분석직"],
19
+ "마케팅·광고": ["마케팅 전략·기획","브랜드 마케팅","퍼포먼스 마케팅","CRM 마케팅","콘텐츠 마케팅","프로모션 마케팅","광고기획(AE)","카피라이터(CW)","아트디렉터(AD)","미디어(플래닝·바잉)","광고 관리·운영","기타 마케팅직"],
20
+ "홍보·대외협력": ["홍보·PR","홍보기획","전시·행사기획(MICE)","대외협력·대관","기타 홍보직"],
21
+ "영업": ["영업 전략·기획","영업관리·지원","점포개발","국내B2B영업","국내B2C영업","국내B2G영업","해외B2B영업","해외B2C영업","해외B2G영업","기술영업·SE","IT·솔루션영업","개인금융영업","법인금융영업","보험상품영업","제약영업","의료기기영업","기계·설비 영업","부품·소재 영업","텔레마케팅(TM)","기타 영업직"],
22
+ "금융": ["ECM","DCM","인수금융","인프라금융","인프라운용","부동산금융","부동산운용","구조화금융","주식운용","채권운용","ETF운용","M&A Advisory","엑셀러레이터","Venture Capital","그로스투자","Private Equity","펀드출자","펀드조성","펀드관리","PB/WM","외환거래(Dealing)","외환관리","증권 트레이딩","증권 리서치","기업신용평가","기업기술평가","여신심사","투자심사","채권관리","리스크관리","금융상품개발","보험상품개발","언더라이팅","보험심사","손해평가","손해사정사","보험설계사","보험계리사","기타 금융직"],
23
+ "SW개발": ["백엔드","프론트엔드","풀스택","iOS","안드로이드","크로스 플랫폼","게임 개발","응용 프로그램","임베디드","블록체인","ERP","웹퍼블리싱","DevOps","보안 엔지니어","네트워크 엔지니어","시스템 엔지니어","클라우드 엔지니어","데이터아키텍트","솔루션즈아키텍트","클라우드아키텍트","시스템아키텍트","소프트웨어아키텍트","테크니컬아키텍트","QA·테스터·검증","기술지원","SW개발 기타"],
24
+ "AI·데이터": ["AI·ML·DL","MLOps","DBA","데이터 엔지니어","데이터 사이언티스트","데이터 분석가","기타 AI·데이터"],
25
+ "연구개발직(R&D)": ["반도체 R&D","로봇 R&D","디스플레이 R&D","전기·전자 R&D","자동차·조선·항공 R&D","기계 R&D","금속·재료 R&D","제약·바이오 R&D","식품·건기식 R&D","화학·섬유 R&D","에너지·환경 R&D","기타 연구개발직"],
26
+ "설계직·엔지니어링": ["회로설계","공정설계","제어설계","기구설계","기계설계","통신·네트워크설계","금형설계","건축설계","토목설계","플랜트설계","도시·조경 설계","기계설비","전기설비","통신·네트워크설비","소방설비","기타 설계·엔지니어링"],
27
+ "디자인/UX": ["브랜드 디자인","산업·제품 디자인","IT프로덕트/UX디자인","UI/GUI 디자인","UX리서치","UX라이터","모션·영상 디자인","캐릭터·애니메이션 디자인","일러스트레이션","광고 디자인","출판·편집 디자인","패션 디자인","VMD·전시·공간 디자인","인테리어 디자인","디자인/UX 기타"],
28
+ "건설·부동산": ["건축사","CM","감리","시공","공무","현장관리","부동산 개발·분양·경매","건설안전관리","건설환경관리","시설·건물 관리","측량·계측","기타 건설·부동산 관련직"],
29
+ "생산·제조": ["생산관리","생산기술","공정관리","공무","품질관리","품질인증·보증","제조·가공","조립·포장","산업안전관리","산업환경관리","기타 생산·제조직"],
30
+ "유통·MD·무역·운송": ["관세사","물류기획","유통기획","온라인MD","영업MD","패션MD","뷰티MD","리테일MD","식품MD","구매·조달·소싱","유통관리","물류관리·SCM","수출입·무역사무·포워딩","자재·재고","배송·운송·운전","기타 유통·MD"],
31
+ "방송·미디어·문화": ["콘텐츠기획","문화·예술기획","감독·연출·PD","아나운서·앵커","기자·리포터","작가","배급·제작자","음악·음향","영상·사진","출판기획","출판편집·교정","인쇄·제본","기타 미디어·문화"],
32
+ "의료·보건": ["의사","치과의사","한의사","수의사","간호사","간호조무사","약사","한약사","의료기사","보건관리자","임상심리사","기타 의료·보건직"],
33
+ "제약·바이오": ["Medical Affairs","RA","QA","QC","PV","Market Access","임상","기타 제약·바이오"],
34
+ "교육": ["교육기획","기술·전문 교육 강사","대학교수","대학강사","학교·특수학교 교사","유치원·보육교사","학원·학교·방문 강사","기타 교육직"],
35
+ "생활·로컬 서비스직": ["숙박·여행","요식업","부동산 중개","운동·여가·레저","뷰티·패션·미용","경비·물리보안","설치·수리·정비","기타 서비스직"],
36
+ "공직자·종교인": ["공무원","군인","정치인","종교인","기타 공직자"],
37
+ "기타 전문직": ["번역·통역","감정평가사","사회복지사","행정사","기타 전문직"],
38
+ };
39
+
40
+ export const SARAMIN_CATEGORIES: Record<string, Record<string, [code: string, name: string][]>> = {
41
+ "기획·전략": {
42
+ "직무·직업": [["1624","게임기획"],["1625","경영기획"],["1626","광고기획"],["1627","교육기획"],["1628","기술기획"],["2205","기획"],["1629","마케팅기획"],["1630","문화기획"],["1631","법인장"],["1632","브랜드기획"],["1633","사업기획"],["1634","상품기획"],["1635","서비스기획"],["1636","앱기획"],["1637","웹기획"],["1638","인사기획"],["1639","전략기획"],["1640","지점관리자"],["1641","출판기획"],["1642","컨설턴트"],["1643","행사기획"],["1644","CEO"],["2257","CIO"],["1645","COO"],["2258","CSO"],["1646","CTO"],["1647","IT컨설팅"],["1648","PL(프로젝트리더)"],["1649","PM(프로젝트매니저)"],["1650","PMO"],["1651","PO(프로덕트오너)"]],
43
+ "전문분야": [["2225","경영관리"],["1652","경영분석"],["1653","경영컨설팅"],["1654","경영혁신(PI)"],["1655","금융컨설팅"],["1658","데이터분석"],["1656","레벨디자인"],["1657","리서치"],["2259","리스크 관리"],["1659","사업개발"],["1660","사업관리"],["1661","사업제휴"],["1662","스토리보드"],["1663","시장조사"],["1664","신사업기획"],["1665","신사업발굴"],["1666","실적관리"],["1667","엑셀러레이팅"],["1668","예산관리"],["1669","인큐베이팅"],["1670","자료조사"],["1671","조직관리"],["1672","지속가능경영"],["1673","창업컨설팅"],["1674","타당성검토"],["1675","투자전략"],["1676","트렌드분석"],["1677","프로토타이핑"],["1678","해외법인관리"],["1679","BPR"],["1680","BSC"],["1681","CSR"],["1682","ESG"],["1683","ISMP"],["1684","ISP"],["1685","KPI관리"],["1686","M&A"],["1687","MBO"],["1688","OKR"],["1689","RFP(제안요청서)"],["1690","UI/UX"]],
44
+ },
45
+ "마케팅·홍보·조사": {
46
+ "직무·직업": [["1422","광고PD"],["1421","광고마케팅"],["1423","글로벌마케팅"],["1424","기업홍보"],["1425","디지털마케팅"],["2201","마케팅"],["1412","마케팅기획"],["1413","마케팅전략"],["1426","모바일마케팅"],["1427","미디어플래너"],["1428","바이럴마케팅"],["1411","병원마케팅"],["1429","브랜드마케팅"],["1414","블로그마케팅"],["1430","비즈니스마케팅"],["1415","스포츠마케팅"],["1431","오프라인마케팅"],["1432","온라인마케팅"],["1416","인플루언서마케팅"],["1433","제휴마케팅"],["1434","조사원"],["1417","체험마케팅"],["1420","콘텐츠기획"],["1435","콘텐츠마케팅"],["1436","콘텐츠에디터"],["1437","퍼포먼스마케팅"],["1438","프로덕트마케팅"],["1418","행사기획"],["2210","홍보"],["1439","AD(아트디렉터)"],["1440","AE(광고기획자)"],["1441","AM(어카운트매니저)"],["1442","B2B마케팅"],["1443","BM(브랜드매니저)"],["2242","CBO"],["1444","CD(크리에이티브디렉터)"],["1445","CMO"],["1446","CRM마케팅"],["1447","CW(카피라이터)"],["1448","MW(메디컬라이터)"],["1419","SNS마케팅"]],
47
+ "전문분야": [["1449","검색광고"],["1450","광고주관리"],["1451","광고캠페인"],["1452","그로스해킹"],["2244","라이센싱"],["1453","매체관리"],["1454","배너광고"],["1455","비딩"],["1456","사보/뉴스레터"],["1457","사회조사"],["1458","설문조사"],["1459","세일즈프로모션"],["1460","시장조사"],["1461","언론홍보"],["1462","옥외광고"],["1463","이벤트프로모션"],["1464","채널관리"],["1465","키워드광고"],["1466","통계/분석"],["1467","퍼블리시티"],["1468","ATL"],["1469","BTL"],["1470","IMC"],["1471","MCN"],["1472","MICE"],["2243","PPL"],["1473","RFP(제안요청서)"],["1474","SEO"]],
48
+ },
49
+ "회계·세무·재무": {
50
+ "직무·직업": [["321","감사"],["322","경리"],["323","경리사무원"],["324","공인회계사"],["325","관세사"],["326","관세사무원"],["327","세무사"],["2220","재무"],["328","전산회계"],["2238","행정사"],["2197","회계"],["329","회계사"],["330","AICPA"],["331","CFA"],["332","CFO"],["333","IR/공시"],["334","KICPA"]],
51
+ "전문분야": [["337","계산서발행"],["338","관리회계"],["339","급여(Payroll)"],["340","기업회계"],["341","내부감사"],["335","더존"],["342","법인결산"],["343","법인세신고"],["344","부가세신고"],["345","세무기장"],["346","세무신고"],["347","세무조정"],["348","세무컨설팅"],["349","세무회계"],["350","손익관리"],["351","신고대리"],["352","연결회계"],["353","연말정산"],["354","예산관리"],["355","외부감사"],["356","외환관리"],["357","원가관리"],["358","원가회계"],["359","원천세신고"],["360","자금관리"],["361","자산관리"],["362","자산운용"],["363","자체기장"],["364","재무기획"],["365","재무제표"],["366","재무회계"],["367","전표입력"],["368","종합소득세"],["369","채권관리"],["370","출납"],["371","회계결산"],["372","ERP"],["373","IFRS"],["374","IPO"],["375","NDR"],["336","4대보험"]],
52
+ "근무장소": [["376","관세법인"],["377","세관"],["378","세무법인"],["379","세무사사무실"],["380","해외법인"],["381","회계법인"],["382","회계사무실"]],
53
+ },
54
+ "인사·노무·HRD": {
55
+ "직무·직업": [["430","노무사"],["2198","인사"],["432","잡매니저"],["433","직업상담사"],["431","채용담당자"],["434","헤드헌터"],["435","ER(노무관리)"],["437","HRD"],["438","HRM"],["436","HR컨설팅"]],
56
+ "담당분야": [["439","급여(Payroll)"],["440","면접/인터뷰"],["441","법정의무교육"],["442","복리후생"],["443","실적관리"],["444","아웃소싱"],["445","온보딩"],["446","인력관리"],["447","인사교육"],["448","인사기획"],["449","인사행정"],["450","인재발굴"],["451","임금협상"],["452","제증명발급"],["453","조직문화"],["454","직업훈련"],["455","채용공고관리"],["456","채용대행"],["457","채용설명회"],["458","파견관리"],["459","평가/보상"]],
57
+ },
58
+ "총무·법무·사무": {
59
+ "직무·직업": [["391","법률사무원"],["2215","법무"],["383","법무사"],["384","변리사"],["385","변호사"],["386","비서"],["387","사내변호사"],["388","사무직"],["389","서무"],["390","송무비서"],["392","수행기사"],["393","수행비서"],["394","안내데스크"],["395","임원비서"],["396","총무"],["397","컴플라이언스"],["398","특허명세사"]],
60
+ "전문분야": [["429","경영지원"],["399","교육행정"],["400","기술사업화"],["401","내방객응대"],["402","문서작성"],["403","비품관리"],["404","사내행사"],["405","사무보조"],["406","사무행정"],["407","사이트관리"],["408","상표관리"],["409","서류관리"],["410","시설관리"],["411","인/허가"],["412","자료입력"],["413","자료조사"],["414","자산관리"],["415","전산총무"],["416","전화응대"],["428","정보처리"],["417","제증명발급"],["418","콘텐츠관리"],["419","타이핑"],["420","특허관리"],["421","특허분석"],["422","특허컨설팅"],["423","Excel"],["424","IP(지식재산권)"],["425","OA"],["426","PhotoShop"],["427","PowerPoint"]],
61
+ },
62
+ "IT개발·데이터": {
63
+ "직무·직업": [["2247","개발PM"],["80","게임개발"],["81","기술지원"],["2248","데이터 사이언티스트"],["82","데이터분석가"],["83","데이터엔지니어"],["84","백엔드/서버개발"],["2239","보안관제"],["85","보안컨설팅"],["86","앱개발"],["87","웹개발"],["88","웹마스터"],["89","유지보수"],["90","정보보안"],["91","퍼블리셔"],["92","프론트엔드"],["2246","BI 엔지니어"],["93","CISO"],["94","CPO"],["95","DBA"],["96","FAE"],["97","GM(게임운영)"],["102","ICT컨설팅"],["98","IT컨설팅"],["99","QA/테스터"],["100","SE(시스템엔지니어)"],["101","SI개발"],["2229","SQA"]],
64
+ "전문분야": [["103","검색엔진"],["104","네트워크"],["105","데이터라벨링"],["106","데이터마이닝"],["107","데이터시각화"],["108","딥러닝"],["2256","루비온레일즈"],["109","머신러닝"],["2231","메타버스"],["110","모델링"],["111","모의해킹"],["112","미들웨어"],["113","반응형웹"],["114","방화벽"],["115","블록체인"],["116","빅데이터"],["117","빌링"],["118","솔루션"],["119","스크립트"],["120","신경망"],["180","아키텍쳐"],["121","악성코드"],["122","알고리즘"],["2251","암호화폐"],["123","영상처리"],["124","웹표준·웹접근성"],["125","음성인식"],["126","이미지프로세싱"],["183","인터페이스"],["127","인프라"],["128","임베디드"],["129","자율주행"],["130","정보통신"],["131","챗봇"],["132","취약점진단"],["133","컴퓨터비전"],["134","크로스브라우징"],["2255","크로스플랫폼"],["135","크롤링"],["136","클라우드"],["2249","클라이언트"],["137","텍스트마이닝"],["138","트러블슈팅"],["139","펌웨어"],["140","플러그인"],["141","핀테크"],["2230","헬스케어"],["181","AI(인공지능)"],["142","API"],["143","APM"],["144","AR(증강현실)"],["2253","Dapp"],["145","DBMS"],["146","DevOps"],["2254","DID"],["147","DLP"],["148","DW"],["149","ERP"],["150","ETL"],["151","FPGA"],["152","GIS"],["153","H/W"],["2250","HTTP"],["154","IDC"],["155","IIS"],["156","IoT"],["157","ISMS"],["158","MCU"],["2252","MMORPG"],["159","Nginx"],["160","NLP(자연어처리)"],["161","NLU(자연어이해)"],["162","OCR"],["163","OLAP"],["164","RDBMS"],["165","RPA"],["166","RTOS"],["167","S/W"],["168","SAP"],["169","SDK"],["170","SOA"],["171","STT"],["172","TTS"],["173","UTM"],["174","VDI"],["175","VMware"],["176","VoIP"],["177","VPN"],["178","VR(가상현실)"],["179","WCF"],["182","Windows"],["2260","3D"]],
65
+ "기술스택": [["185","그누보드"],["186","라즈베리파이"],["187","쉘스크립트"],["2234","스마트컨트랙트"],["319","아두이노"],["188","액션스크립트"],["189","어셈블리"],["190","와이어샤크"],["320","임베디드리눅스"],["191","파워빌더"],["2232","풀스택"],["184",".NET"],["192","ABAP"],["193","AIX"],["194","Ajax"],["195","Android"],["196","Angular"],["197","Apache"],["198","ArcGIS"],["199","ASP"],["200","ASP.NET"],["201","AWS"],["202","Azure"],["203","Bootstrap"],["204","C#"],["205","C++"],["207","CentOS"],["208","COBOL"],["209","CSS"],["210","CSS3"],["206","C언어"],["211","Delphi"],["212","Directx"],["213","Django"],["214","Docker"],["215","Eclipse"],["216","ECMAScript"],["217","ElasticStack"],["218","Flask"],["219","FLEX"],["220","Flutter"],["221","GCP"],["222","Git"],["223","GoLang"],["224","GraphQL"],["225","Groovy"],["226","Gulp"],["227","Hadoop"],["228","HBase"],["229","HTML"],["230","HTML5"],["231","IaaS"],["232","iBATIS"],["233","Ionic"],["234","iOS"],["235","Java"],["236","Javascript"],["237","Jenkins"],["238","JPA"],["239","jQuery"],["240","JSP"],["241","Kafka"],["242","Keras"],["243","Kotlin"],["244","Kubernetes"],["245","LabVIEW"],["246","Linux"],["247","Logstash"],["248","Lucene"],["249","MacOS"],["250","MariaDB"],["251","Matlab"],["252","Maven"],["253","MFC"],["254","MongoDB"],["255","MSSQL"],["256","MyBatis"],["257","MySQL"],["258","Node.js"],["259","NoSQL"],["260","Objective-C"],["261","OpenCV"],["262","OpenGL"],["263","OracleDB"],["264","OSS"],["265","PaaS"],["266","Pandas"],["267","Perl"],["268","PHP"],["269","PL/SQL"],["270","PostgreSQL"],["271","Pro-C"],["272","Python"],["273","Pytorch"],["274","QGIS"],["275","Qt"],["276","R"],["277","React"],["278","React-Native"],["279","ReactJS"],["280","Redis"],["281","Redux"],["282","RestAPI"],["283","Ruby"],["284","SaaS"],["285","SAS"],["286","Scala"],["287","Servlet"],["288","Solaris"],["2233","Solidity"],["289","Spark"],["290","Splunk"],["291","Spring"],["292","SpringBoot"],["293","SQL"],["294","SQLite"],["295","Storm"],["296","Struts"],["297","SVN"],["298","Swift"],["299","Sybase"],["300","Tensorflow"],["301","Tomcat"],["302","TypeScript"],["303","Ubuntu"],["304","Unity"],["305","Unix"],["306","Unreal"],["307","VB.NET"],["308","Verilog"],["309","Vert.x"],["310","VisualBasic"],["311","VisualC·C++"],["312","Vue.js"],["313","WAS"],["314","WebGL"],["315","Webpack"],["316","WebRTC"],["317","WPF"],["318","XML"]],
66
+ },
67
+ "디자인": {
68
+ "직무·직업": [["1475","가구디자인"],["1476","건축디자인"],["1477","게임디자인"],["1478","경관디자인"],["1479","공간디자인"],["1480","공공디자인"],["1482","공예디자인"],["1483","광고디자인"],["1484","그래픽디자인"],["1485","그림작가"],["1486","디지털디자인"],["1487","로고디자인"],["1488","모바일디자인"],["1489","무대디자인"],["1490","문구디자인"],["1491","배너디자인"],["1492","북디자인"],["1493","브랜드디자인"],["1494","산업디자인"],["1495","섬유디자인"],["1496","시각디자인"],["1497","실내디자인"],["1498","애니메이터"],["1499","앱디자인"],["1500","영상디자인"],["1501","완구디자인"],["1502","웹디자인"],["1503","의상디자인"],["1504","일러스트레이터"],["1505","자동차디자인"],["1506","잡화디자인"],["1507","전시디자인"],["1508","정보디자인"],["1510","조명디자인"],["1511","주얼리디자인"],["1512","캐릭터디자인"],["1513","컨셉디자인"],["1514","컬러리스트"],["1515","콘텐츠디자인"],["1516","패브릭디자인"],["1517","패키지디자인"],["1518","패턴디자인"],["1519","편집디자인"],["1520","폰트디자인"],["1521","표지디자인"],["1522","프로모션디자인"],["1523","환경디자인"],["1524","AD(아트디렉터)"],["1526","BI디자인"],["1527","BX디자인"],["1528","CI디자인"],["1529","UI/UX디자인"],["1525","VMD"]],
69
+ "전문분야": [["1532","가방"],["1533","간판"],["1534","남성의류"],["1535","니트"],["1536","데님"],["1537","도트/픽셀아트"],["1538","드로잉"],["1539","라이팅"],["1540","렌더링"],["1541","리플렛"],["1542","만화/웹툰"],["1543","명함"],["1544","모델링"],["1545","모션그래픽"],["1546","보정/리터칭"],["1547","브로슈어"],["1548","삽화"],["1549","상세페이지"],["1550","색보정"],["1551","샘플링"],["1552","속옷"],["1553","스포츠의류"],["1554","신발"],["1555","썸네일"],["1556","아동복"],["1557","아트워크"],["1558","어셋"],["1559","여성의류"],["1560","옥외광고"],["1561","우븐"],["1562","원화"],["1563","이모티콘"],["2222","인테리어"],["1564","인포그래픽"],["1565","자막"],["1566","작화"],["1567","잡지"],["1568","제안서"],["1569","조형물"],["1570","주방용품"],["1571","채색"],["1572","카드뉴스"],["1573","카탈로그"],["1574","캘리그라피"],["1575","컨셉아트"],["1576","타이포그래피"],["1577","템플릿"],["1578","팜플렛"],["1579","페인팅"],["1580","포스터"],["1581","프랍"],["1582","피규어"],["1583","합성"],["1584","현수막"],["1585","홈패션/홈데코"],["1586","홍보물"],["1587","CG"],["1588","DTP"],["1589","GUI"],["1590","POP"],["1591","SIGN"],["1592","VFX"],["1530","2D디자인"],["1531","3D디자인"]],
70
+ "작업Tool": [["1594","드림위버"],["1595","라이노"],["1596","베가스"],["1597","스케치업"],["1598","애프터이펙트"],["1599","인디자인"],["1600","일러스트"],["1601","지브러쉬"],["1602","코렐드로우"],["1603","파이널컷"],["1604","프리미어"],["1605","플래시"],["1606","Blender"],["1607","CAD"],["1608","Cinema4D"],["1609","Figma"],["1610","FLEX"],["1611","HTML"],["1612","Keyshot"],["1613","Maya"],["1614","PhotoShop"],["1615","QuarkXpress"],["1616","Sketch"],["1617","Substance"],["1618","TexPro"],["1619","Unity"],["1620","Unreal"],["1621","V-Ray"],["1622","XD"],["1623","Zeplin"],["1593","3DMax"]],
71
+ },
72
+ "영업·판매·무역": {
73
+ "직무·직업": [["708","가구판매"],["709","가전판매"],["710","건강식품판매"],["711","건설영업"],["689","관세사"],["690","관세사무원"],["712","광고영업"],["691","국제무역사"],["713","귀금속판매"],["714","기계판매"],["692","기술영업"],["715","네트워크영업"],["696","무역MR"],["693","무역경리"],["694","무역사무원"],["695","무역중개인"],["716","방문판매"],["697","보세사"],["2241","보안솔루션영업"],["717","부동산영업"],["718","상조영업"],["698","샵마스터"],["719","솔루션기술영업"],["720","시스템영업"],["721","식품/음료영업"],["722","식품/음료판매"],["2203","영업"],["702","영업MD"],["699","영업관리"],["2208","영업기획"],["723","영업마케팅"],["724","영업전략"],["700","영업지원"],["701","영업직"],["725","영업판촉"],["726","온라인판매"],["703","원산지관리사"],["727","의료기기영업"],["728","의류무역"],["729","의류판매"],["704","자동차딜러"],["730","자동차영업"],["731","자재판매"],["732","잡화판매"],["733","장비영업"],["734","정육판매"],["735","제약영업"],["736","주류영업"],["737","주류판매"],["753","증권영업"],["738","축산물판매"],["705","캐셔"],["739","컴퓨터판매"],["740","타이어판매"],["741","통신기기판매"],["742","티켓판매"],["706","판매직"],["707","포워더"],["743","항공무역"],["744","해상무역"],["745","해외시장개척"],["746","해외영업"],["747","핸드폰판매"],["748","호텔영업"],["749","화장품영업"],["750","화장품판매"],["751","IT영업"],["752","SI영업"]],
74
+ "담당분야": [["756","가맹점관리"],["757","가맹점영업"],["758","거래처관리"],["759","거래처납품"],["760","거래처영업"],["761","고객관리"],["762","공공영업"],["763","관세환급"],["764","기업영업"],["765","렌탈영업"],["766","마트영업"],["767","매장관리"],["768","매체영업"],["769","매출관리"],["770","무역거래"],["771","무역영어"],["772","바이어발굴/관리"],["773","백화점영업"],["774","벤더관리"],["775","부품수출"],["776","쇼핑몰관리"],["777","수/발주"],["778","수출입"],["779","실적관리"],["780","아울렛영업"],["781","여행사영업"],["782","온라인영업"],["783","유통영업"],["784","장기렌트영업"],["785","점포개발"],["786","정산관리"],["787","주문관리"],["788","진열관리"],["789","통관"],["790","학원영업"],["791","해외영업관리"],["792","해외영업지원"],["793","핸드폰영업"],["794","홈쇼핑영업"],["754","B2B"],["755","B2C"],["795","FTA"],["796","H/W"],["797","LC(신용장)"],["798","S/W"]],
75
+ },
76
+ "고객상담·TM": {
77
+ "직무·직업": [["1972","상담원"],["1979","섭외TM"],["1973","아웃바운드"],["1974","이미지컨설턴트"],["1975","인바운드"],["1976","텔레마케터"],["1977","CS"],["1978","CX매니저"]],
78
+ "담당분야": [["1980","게시판관리"],["1981","고객관리"],["1982","교육상담"],["1983","교환/반품"],["1984","기술상담"],["1985","단순안내"],["1986","대출상담"],["1987","메일상담"],["1988","민원상담"],["1989","방문상담"],["1990","배송상담"],["1991","상담품질관리"],["1992","원격상담"],["1993","전화상담"],["1994","접수/예약"],["1995","주문상담"],["1996","채팅상담"],["1997","콜센터/고객센터"],["1998","콜통계/분석"],["1999","통화품질분석"],["2000","해지방어"],["2001","해피콜"],["2002","A/S상담"],["2003","VOC분석"]],
79
+ },
80
+ "구매·자재·물류": {
81
+ "직무·직업": [["2227","구매"],["1750","구매관리"],["1758","구매기획"],["1759","국제물류"],["1751","물류관리"],["1760","물류기획"],["1752","물류사무원"],["1753","보세사"],["1761","유통관리"],["1754","자재관리"],["1755","재고관리"],["1756","창고관리"],["1757","포워더"],["2212","품질관리"],["1763","SCM"],["1762","SRM"]],
82
+ "전문분야": [["1765","개발구매"],["1766","거래처관리"],["1767","검품/검수"],["1768","견적관리"],["1769","구매대행/소싱"],["1770","납기관리"],["1771","물류자동화"],["1772","배차관리"],["1773","보세구역관리"],["1774","보세화물관리"],["1775","상하차"],["1776","선적"],["1777","수/발주"],["1778","수급관리"],["1779","수불관리"],["1780","양산구매"],["1781","외자구매"],["1782","외주관리"],["1783","원가관리"],["1784","입고/입하"],["1785","자재구매"],["1786","적재/하역"],["1787","전략구매"],["1788","정산관리"],["1789","조달구매"],["1790","집하/분류"],["1791","출고/출하"],["1792","패킹(포장)"],["1793","피킹(집품)"],["1794","화물관리"],["1795","ERP"],["1796","MRO"],["1797","WMS"],["1764","3PL운영"]],
83
+ },
84
+ "상품기획·MD": {
85
+ "직무·직업": [["1212","기획MD"],["1213","리테일MD"],["1214","바잉MD"],["1215","브랜드MD"],["1216","슈퍼바이저"],["2245","식품MD"],["1217","영업MD"],["1218","오프라인MD"],["1219","온라인MD"],["1220","유통MD"],["2237","패션MD"],["1221","AMD"],["1222","VMD"]],
86
+ "담당분야": [["1223","가공식품"],["1224","가구"],["1225","건강기능식품"],["1226","결품관리"],["1227","구매총괄"],["1228","남성의류"],["1229","납기관리"],["1230","로드샵"],["1231","리빙"],["1232","매출관리"],["1233","면세점"],["1234","문구"],["1235","백화점"],["1236","브랜드관리"],["1237","브랜드기획"],["1238","브랜드런칭"],["1239","브랜드확장"],["1240","브랜딩"],["1241","상품관리"],["1242","상품분석"],["1243","생활용품"],["1244","소셜커머스"],["1245","쇼핑몰"],["1246","스포츠용품"],["1247","스포츠의류"],["1248","시장조사"],["1249","시판"],["1250","식품"],["1251","아동복"],["1252","아이템선정"],["1253","여성의류"],["1254","영캐주얼"],["1255","오픈마켓"],["1256","완구"],["1257","유아용품"],["1258","이커머스"],["1259","자사몰관리"],["1260","전자제품"],["1261","제작관리"],["1262","주방"],["1263","주얼리/액세서리"],["1264","채널관리"],["1265","트렌드분석"],["1266","판매전략"],["1267","팝업스토어관리"],["1268","패션브랜드"],["1269","패션잡화"],["1270","퍼니싱"],["1271","편집샵"],["1272","프로모션기획"],["1273","홈쇼핑"],["1274","홈패션/홈데코"],["1275","화장품"],["1276","회원분석"],["1277","CS관리"],["1278","POP"],["1279","SNS"],["1280","SRM"]],
87
+ },
88
+ "운전·운송·배송": {
89
+ "직무·직업": [["633","납품운전원"],["634","대리운전"],["635","라이더(배달원)"],["636","물류기사"],["637","배송기사"],["660","배차관리"],["638","버스기사"],["639","보세운송"],["640","사택기사"],["661","선적"],["641","셔틀버스기사"],["642","수행기사"],["643","승합기사"],["2219","운전"],["653","육상운송"],["654","적재/하역"],["644","조종사"],["645","지상조업"],["655","지입"],["646","차량도우미"],["656","철도운송"],["647","퀵서비스"],["648","탁송기사"],["649","택배기사"],["650","택시기사"],["657","통관"],["651","포워더"],["652","포장이사"],["658","항공운송"],["659","해상운송"]],
90
+ "운송수단": [["668","견인차"],["669","선박"],["667","소형화물"],["670","오토바이"],["671","윙바디"],["673","탑차"],["674","탱크로리"],["675","트럭"],["676","트레일러"],["677","특수차량"],["672","화물차(카고)"],["662","1톤"],["663","2.5톤"],["664","3.5톤"],["665","4.5톤"],["666","5톤이상"]],
91
+ "중장비": [["678","덤프트럭"],["679","로우더"],["680","믹서트럭(레미콘)"],["681","암롤"],["682","전동지게차"],["683","지게차"],["684","집게차"],["685","컨테이너크레인"],["686","크레인"],["687","포크레인(굴삭기)"],["688","호이스트"]],
92
+ },
93
+ "서비스": {
94
+ "직무·직업": [["859","가사도우미"],["922","가전제품설치"],["860","검침원"],["861","경비원"],["862","경비지도사"],["863","경호원"],["864","관광가이드"],["865","관광통역안내사"],["866","나레이터"],["867","네일리스트"],["868","두피관리사"],["869","라이더(배달원)"],["870","룸메이드"],["871","매장매니저"],["872","매표/검표"],["873","미용사"],["874","미화원"],["875","바리스타"],["876","바텐더"],["877","발레파킹"],["878","벨멘/도어맨"],["928","보석감정사"],["879","보안요원"],["880","부주방장"],["881","뷰티매니저"],["882","산후도우미"],["883","세차원"],["884","소믈리에"],["885","스타일리스트"],["886","승무원"],["887","아쿠아리스트"],["888","안내데스크"],["889","안전요원"],["923","애견미용"],["924","애견훈련"],["890","양조사"],["2216","영양사"],["891","왁서"],["2214","요리사"],["892","웨딩플래너"],["893","육아도우미"],["894","입주도우미"],["895","장례지도사"],["896","정비기사"],["897","제과/제빵사"],["898","조리사"],["899","주방보조"],["900","주방장"],["901","주유원"],["902","주차요원"],["903","지배인"],["904","지상직"],["905","차량도우미"],["906","체형관리사"],["907","카페매니저"],["908","캐셔"],["909","커뮤니티매니저"],["910","커플매니저"],["911","탁송기사"],["912","테라피스트"],["2228","파티쉐"],["925","파티플래너"],["926","푸드스타일리스트"],["913","프로모터"],["914","플로리스트"],["858","피부관리사"],["915","하우스맨"],["916","해설가"],["917","행사도우미"],["918","호텔리어"],["919","홀매니저"],["920","홀서빙"],["921","A/S기사"],["927","GRO(컨시어지)"]],
95
+ "전문분야": [["929","객실관리"],["930","고객안내"],["931","고객응대"],["932","광택"],["933","기계수리"],["934","다이어트"],["935","동물관리"],["936","동물장례"],["937","라운딩"],["938","렌탈"],["939","마사지"],["2202","매장관리"],["940","메이크업"],["941","면세품인도"],["942","발권"],["943","방범"],["944","설비점검"],["945","세탁"],["946","소독"],["947","속눈썹"],["2235","시설관리"],["948","식단관리"],["949","썬팅"],["950","요금정산"],["951","의류수선"],["952","인터넷설치"],["953","자동차도장"],["2209","자동차정비"],["954","자동차튜닝"],["955","접수/예약"],["2207","청소"],["956","출력/제본/복사"],["957","케이터링"],["958","펜션관리"],["959","프론트"],["960","필터교체"],["961","해충방제"],["962","현금호송"],["963","LPG충전"]],
96
+ "근무장소": [["964","공항"],["965","관리사무소"],["966","급식소"],["967","네일샵"],["968","대형마트"],["969","드레스샵"],["970","리조트"],["971","미용실"],["972","백화점"],["973","서점"],["974","식당"],["975","에스테틱/스파"],["976","여객선"],["977","여행사"],["978","영화관"],["979","웨딩스튜디오"],["980","웨딩홀"],["981","장례식장"],["982","주방"],["983","주유소"],["984","카지노"],["985","카페"],["986","콘도"],["987","키즈카페"],["988","항공사"],["989","호텔"]],
97
+ },
98
+ "생산": {
99
+ "직무·직업": [["1019","계장설계"],["2223","공장장"],["2211","공정관리"],["1009","공정설계"],["1004","공정엔지니어"],["1011","구조해석/설계"],["1012","금형설계"],["1013","기계설계"],["990","기계조작원"],["1014","기구설계"],["1015","기술설계"],["1005","기술엔지니어"],["991","단순생산직"],["992","미싱사"],["1036","반도체설계"],["1016","부품설계"],["2196","생산"],["993","생산관리"],["2200","생산기술"],["1017","생산설계"],["1006","설계엔지니어"],["994","설비OP"],["995","세공사"],["1018","시스템설계"],["1021","안전보건관리자"],["996","외관검사원"],["997","용접원"],["1032","자동제어"],["1022","자동화설계"],["1023","장비설계"],["1033","장비제어"],["998","재단사"],["1024","전기설계"],["1034","전기제어"],["1035","전자제어"],["1020","전장설계"],["1030","절단가공"],["1031","절삭가공"],["999","제관사"],["2213","제조"],["1037","제조가공"],["1010","제품설계"],["1000","조색사"],["1026","조선설계"],["1007","캐드원"],["1025","펌프설계"],["1001","품질검사원"],["2195","품질관리"],["1027","프로그램설계"],["1028","플랜트설계"],["2221","항공정비"],["1029","회로설계"],["1008","PSM"],["1002","QA"],["1003","QC"]],
100
+ "전문분야": [["1041","계측기교정"],["1125","계측제어"],["1042","공구연마"],["1043","공구연삭"],["1044","광학/렌즈"],["1045","그라비아인쇄"],["1046","금속"],["1047","납땜"],["1123","농업"],["1048","다이캐스팅"],["1124","도료/페인트"],["1126","도면해독"],["1049","도장/도금/도색"],["1050","드릴링"],["1127","디스플레이"],["1051","레이저가공"],["1155","마스터캠"],["1128","메카트로닉스"],["1129","목재"],["1052","목형"],["1053","바닥재"],["1054","박스제조"],["1055","박판용접"],["1130","반도체"],["1056","방적/방사"],["1057","방전가공"],["1058","배관용접"],["1059","배합"],["1060","불량분석"],["1061","브러쉬"],["1062","비금속/요업"],["1063","사상/래핑"],["1064","사출금형"],["1065","사출성형"],["1066","샌딩"],["1131","생산자동화"],["1067","석유화학"],["1068","선박엔진"],["1132","설계보조"],["1069","섬유/의류"],["1070","세척밸리데이션"],["1156","솔리드엣지"],["1157","솔리드웍스"],["1133","스마트팩토리"],["2224","식품"],["1071","실링"],["1072","실크인쇄"],["1073","아노다이징"],["1074","아크릴가공"],["1075","아크용접"],["1076","알곤용접"],["1077","압연"],["1078","압출성형"],["1134","에너지관리"],["1079","에칭"],["1080","열처리"],["1135","열해석"],["1081","와이어컷팅"],["1136","유동해석"],["1082","인발"],["1158","인벤터"],["1083","인서트"],["1084","자동용접"],["2218","자동차"],["1085","자동화라인"],["1086","작물재배"],["1087","장비/공구"],["1088","전계장"],["1089","전기용접"],["1090","제련"],["1091","제약/바이오"],["1092","조립"],["1093","주얼리/액세서리"],["1094","주조/단조"],["1095","증착"],["1096","충진"],["1097","칭량"],["1098","코팅"],["1099","터닝"],["1159","파워밀"],["1100","판금"],["1101","패션잡화"],["1102","펀칭"],["1137","펌웨어"],["1103","편조"],["1104","평면연마"],["1105","평면연삭"],["1106","포밍"],["2199","포장"],["2204","품질보증"],["1138","품질분석"],["1107","프레스금형"],["1139","플라스틱"],["1160","하이퍼밀"],["1108","합형"],["1140","항공기"],["1141","화공약품"],["1142","화장품"],["1109","후가공"],["1161","Altium"],["1143","ASIC"],["1162","AutoCAD"],["1144","AUTOSAR"],["1110","BBT"],["1145","BLU"],["1163","CAD"],["1164","CATIA"],["1111","Co2용접"],["1165","Creo(Pro-E)"],["1112","CVD"],["1146","EDA"],["1113","ERP"],["1147","FA(공장자동화)"],["1114","FPCB"],["1148","FPGA"],["1149","H/W"],["1115","Haccp"],["1150","HMI"],["1116","LCD"],["1117","LED"],["1151","MEMS"],["1118","MES"],["1166","NX(UG)"],["1152","OLED"],["1167","OrCAD"],["1168","Pads"],["1119","PCB"],["1169","PSpice"],["1120","PVC"],["1121","PVD"],["1153","S/W"],["1154","SMPS"],["1122","SMT"],["1170","Sputter"],["1171","Tribon"],["1172","Verilog"],["1173","VHDL"],["1038","2D설계"],["1039","3D설계"],["1040","3차원측정"]],
101
+ "작업도구": [["1176","감속기"],["1177","고속가공기"],["1178","라우터"],["1179","레디알"],["1180","범용밀링"],["1181","범용보링"],["1182","범용선반"],["1183","변압기"],["1184","복합기"],["1185","성형기"],["1186","세륜기"],["1187","압출기"],["1188","연마기"],["1189","연삭기"],["1190","자동선반"],["1191","절곡기"],["1192","지그"],["1193","천공기"],["1194","톱기계"],["1195","파쇄기/분쇄기"],["1196","프레스"],["1197","CAM"],["1198","MCT"],["1199","NC/CNC밀링"],["1200","NC/CNC보링"],["1201","NC/CNC선반"],["1202","NCT"],["1203","PLC"],["1174","3축가공기"],["1175","5축가공기"]],
102
+ "근무형태": [["1206","상주근무"],["1207","야간근무"],["1208","일용직"],["1209","입식근무"],["1210","좌식근무"],["1211","주간근무"],["1204","2교대"],["1205","3교대"]],
103
+ },
104
+ "건설·건축": {
105
+ "직무·직업": [["2005","가스기능사"],["2006","감리원"],["2007","감정평가사"],["2008","건물관리자"],["2009","건설견적원"],["2010","건설경리"],["2011","건축가"],["2057","건축구조설계"],["2012","건축기사"],["2013","검침원"],["2014","공무"],["2015","공인중개사"],["2016","공조냉동기사"],["2017","기계기사"],["2018","기술도해사"],["2019","기전기사"],["2020","내선전공"],["2064","내진설계"],["2021","다기능공"],["2022","대기환경기사"],["2065","도시설계"],["2023","도장공"],["2024","목공"],["2025","방수공"],["2026","배관공"],["2066","배관설계"],["2067","배전반설계"],["2027","보건관리자"],["2028","보일러기사"],["2029","보조공"],["2030","분양상담사"],["2031","비파괴검사원"],["2032","산림기사"],["2058","산림설계"],["2068","설계보조"],["2055","설계엔지니어"],["2069","소방설계"],["2070","수자원설계"],["2033","수질환경기사"],["2034","시공관리자"],["2035","시공기사"],["2036","신호수"],["2037","안전관리자"],["2056","안전보건관리자"],["2038","용접부"],["2039","작업반장"],["2040","전기기사"],["2071","전기설계"],["2054","전산/기술직"],["2041","제관사"],["2072","조경설계"],["2042","중개보조원"],["2004","지역개발컨설팅"],["2043","취부사"],["2044","캐드원"],["2045","토목기술자"],["2059","토목설계"],["2046","토양환경기사"],["2060","통신설계"],["2047","폐기물처리기사"],["2048","현장관리자"],["2049","현장기사"],["2050","환경관리자"],["2061","환경설계"],["2051","CM(건설사업관리)"],["2052","QA"],["2053","QC"],["2062","2D설계"],["2063","3D설계"]],
106
+ "전문분야": [["2074","가스설비"],["2075","간판시공"],["2076","강구조"],["2077","건설관리"],["2078","건설노무"],["2079","건조설비"],["2206","건축설계"],["2080","건축설비"],["2081","건축전기"],["2082","경량철골"],["2083","골조"],["2084","공조설비"],["2085","관급공사"],["2086","교량/가설"],["2087","굴착"],["2088","그라우팅"],["2089","단열"],["2090","대기측정분석"],["2091","덕트"],["2092","도배/벽지"],["2093","도시가스"],["2094","도시개발"],["2095","도시교통"],["2096","리모델링"],["2097","마감재"],["2098","마루"],["2099","미장"],["2100","바닥재"],["2101","반송설비"],["2073","방사선안전관리"],["2102","방음/방벽"],["2103","벌목"],["2104","부대토목"],["2105","부동산"],["2106","분전반"],["2107","빌트인"],["2108","산업설비"],["2109","산업플랜트"],["2110","상/하수도"],["2111","샵드로잉"],["2112","석공사"],["2113","석면조사"],["2114","석재"],["2115","설비보수"],["2116","소방/방재"],["2117","소음/진동"],["2118","수장공사"],["2119","수치해석"],["2182","스케치업"],["2120","시설관리"],["2121","실내건축시공"],["2122","실내공기질측정"],["2123","아크용접"],["2124","아파트건축"],["2177","에너지관리"],["2125","에폭시"],["2126","엘리베이터"],["2127","열교환기"],["2128","영선"],["2129","옹벽"],["2130","욕실"],["2131","위생설비"],["2132","위험성평가"],["2133","유리시공"],["2134","인테리어공사"],["2135","자동문"],["2136","자동제어"],["2137","작업환경측정"],["2138","잡철"],["2139","전계장"],["2140","전기설비"],["2141","전기시공"],["2178","전기제어"],["2142","조경공사"],["2179","지역개발"],["2143","차선도색"],["2144","창호/샤시"],["2145","철골공사"],["2146","철근콘크리트"],["2147","측량/계측"],["2148","친환경건축"],["2149","커튼월"],["2150","컬러링"],["2151","케이블설치"],["2152","타일시공"],["2153","토목건축"],["2154","토목공사"],["2155","토목공학"],["2156","통신공사"],["2157","파이프"],["2158","판넬시공"],["2159","폐수처리장관리"],["2160","플랜트건설"],["2161","플랜트설비"],["2162","플랜트전기"],["2163","플랜트토목"],["2164","플레이트"],["2165","필름시공"],["2166","하자보수"],["2167","하자진단"],["2168","하천"],["2169","해양조사"],["2170","홈인테리어"],["2171","화학플랜트"],["2172","환경분석"],["2173","환경영향평가"],["2174","환경플랜트"],["2183","Abaqus"],["2184","AutoCAD"],["2175","BIM"],["2176","CCTV공사"],["2180","HVAC"],["2185","TEKLA"],["2181","3DMax"]],
107
+ "작업도구": [["2186","계전기"],["2187","광파기"],["2188","용접기"],["2189","천공기"],["2190","크레인"],["2191","트윈모션"],["2192","CAD"],["2193","Navisworks"],["2194","Revit"]],
108
+ },
109
+ "의료": {
110
+ "의료전문직": [["462","간호사"],["500","간호조무사"],["463","놀이치료사"],["464","도수치료사"],["465","마취간호사"],["466","물리치료사"],["467","미술치료사"],["468","방사선사"],["519","보건의료정보관리사"],["2236","보험심사청구사"],["469","산업간호사"],["470","상담간호사"],["471","수간호사"],["472","수의사"],["473","수의테크니션"],["474","심리치료사"],["475","심사간호사"],["499","안경사"],["476","약사"],["477","언어치료사"],["478","운동치료사"],["479","음악치료사"],["480","의공기사"],["481","의사"],["482","인지치료사"],["483","임상병리사"],["484","임상심리사"],["485","작업치료사"],["486","재활치료사"],["487","전공의"],["488","전문의"],["489","책임간호사"],["490","청능사/청각사"],["491","초음파사"],["461","치과위생사"],["492","치기공사"],["493","한약사"],["494","한의사"],["495","CRA(임상연구원)"],["496","CRC(임상시험코디네이터)"],["497","CRM(임상연구전문가)"],["498","QPS간호사"]],
111
+ "의료종사직": [["501","간병인"],["502","구급차기사"],["503","두피관리사"],["504","병동보호사"],["505","병원경리"],["506","병원총무"],["507","병원코디네이터"],["508","병원행정사"],["509","보건관리자"],["510","비만관리사"],["511","상담실장"],["512","심리운동사"],["513","약국전산원"],["514","영양사"],["515","요양보호사"],["516","운동처방사"],["517","위생사"],["518","응급구조사"],["520","의지보조기기사"],["521","정신과보호사"],["522","MR"]],
112
+ "전문분야": [["523","기능검사"],["524","드레싱보조"],["525","모발이식"],["526","방문간호"],["527","병원경영"],["528","병원관리"],["529","보건진단"],["530","수술"],["531","수술보조"],["532","스포츠마사지"],["533","외래"],["534","원무"],["535","의료영상"],["536","의약사무"],["537","임상시험"],["538","입원관리"],["539","접수/예약"],["540","제약QA"],["541","조제보조"],["550","조직병리"],["542","진료보조"],["543","채혈"],["544","처방"],["545","침구실보조"],["546","행동치료"],["547","환자안내"],["548","환자이송"],["549","RA"]],
113
+ "진료과": [["551","가정의학과"],["552","감염내과"],["553","구강내과"],["554","구강외과"],["555","내과"],["556","내분비내과"],["557","대장항문외과"],["558","마취통증의학과"],["559","병리과"],["560","비뇨기과"],["561","산부인과"],["562","성형외과"],["563","소아과"],["564","소화기내과"],["565","순환기내과"],["566","신경외과"],["567","신장내과"],["568","안과"],["569","알레르기내과"],["570","약제과"],["571","영상의학과"],["572","외과"],["573","이비인후과"],["574","재활의학과"],["575","정신과"],["576","정형외과"],["577","직업환경의학과"],["578","진단검사의학과"],["579","치과"],["580","통증의학과"],["581","피부과"],["582","한방과"],["583","핵의학과"],["584","혈액종양내과"],["585","호흡기내과"],["586","흉부외과"]],
114
+ "근무장소": [["597","개인병원"],["598","검진센터"],["587","내시경실"],["599","노인전문병원"],["600","대학병원"],["601","동물병원"],["602","보건소"],["603","비만클리닉"],["604","산후조리원"],["590","신생아실"],["605","심혈관센터"],["606","아동병원"],["607","암센터"],["608","약국"],["609","여성병원"],["610","여성의원"],["611","요양병원"],["591","응급실"],["592","인공신장실"],["612","일반병원"],["613","재활센터"],["614","정신병원"],["615","종합병원"],["595","주사실"],["616","주야간보호센터"],["593","중환자실"],["594","처치실"],["617","척추병원"],["596","촬영실"],["618","치과병원"],["619","치과의원"],["620","한방병원"],["621","한의원"],["622","혈액원"],["588","호스피스"],["589","회복실"]],
115
+ "근무형태": [["625","당직"],["626","D-Keep"],["627","D/E"],["628","D/N"],["629","E-Keep"],["630","E/N"],["631","N-Keep"],["632","S-Keep"],["623","2교대"],["624","3교대"]],
116
+ },
117
+ "연구·R&D": {
118
+ "직무·직업": [["799","대기측정분석사"],["800","로봇엔지니어"],["801","연구원"],["802","인증심사원"],["803","임상DM"],["804","임상PM"],["805","임상STAT"],["806","환경측정분석사"],["807","CRA(임상연구원)"],["808","CRC(임상시험코디네이터)"],["809","CRM(임상연구전문가)"],["810","R&D"],["811","R&D기획"]],
119
+ "전문분야": [["812","고분자"],["813","광학설계"],["814","기술연구"],["815","기후변화"],["816","농업"],["817","도료/페인트"],["818","동물실험"],["819","로봇설계"],["820","메뉴개발"],["821","무인항공기/드론"],["822","미생물"],["823","바이러스"],["2217","반도체"],["824","분자진단"],["825","생명과학"],["826","세포배양"],["827","세포실험"],["828","수질분석"],["829","시료분석"],["830","시료채취"],["831","식품연구"],["832","신소재"],["833","신재생에너지"],["834","실험보조"],["835","알고리즘개발"],["836","원자력"],["837","유기합성"],["838","유전자"],["839","유해화학물질"],["840","의료기기연구"],["841","의약외품연구"],["842","이미지프로세싱"],["843","이화학시험"],["844","임상개발"],["845","임상시험"],["846","자율주행"],["847","전자파"],["848","정책연구"],["849","제약/바이오"],["850","제제연구"],["851","제형연구"],["852","줄기세포"],["853","토양환경"],["854","학술연구"],["855","환경오염"],["856","AI(인공지능)"],["857","FT-IR분석"]],
120
+ },
121
+ "교육": {
122
+ "직무·직업": [["1798","공부방교사"],["1799","과외"],["1800","교관"],["1825","교수설계"],["1826","교육운영"],["1801","교육컨설턴트"],["1827","교육콘텐츠개발"],["1828","교육콘텐츠기획"],["1829","교재개발"],["1802","교직원"],["1803","대학강사"],["1804","돌봄교사"],["1805","바리스타강사"],["1830","방과후교사"],["1806","방문교사"],["1807","보건강사"],["1808","보육교사"],["1809","보조강사"],["1810","상담교사"],["1811","원어민강사"],["1812","입학사정관"],["1813","조교"],["1832","직업훈련"],["1814","청소년지도사"],["1833","컴퓨터교육"],["1815","코치"],["1816","특수교사"],["1817","파트강사"],["1818","퍼포먼스강사"],["1831","평생교육사"],["1819","학습매니저"],["1820","학원강사"],["1821","학원보조"],["1822","훈련교사"],["1823","CS강사"],["1824","IT강사"]],
123
+ "전문분야": [["1834","교구수업"],["1835","기업교육"],["1836","동화구연"],["1837","미대입시"],["1838","수능강의"],["1839","영어교재"],["1840","온라인교육"],["1841","요양보호사교육"],["1842","유아교육"],["1843","이러닝"],["1844","인성교육"],["1845","인큐베이팅"],["1846","입시컨설팅"],["1847","진로상담"],["1848","체대입시"],["1849","쿠킹클래스"],["1850","학생지도"],["1851","학습상담"],["1852","학습지"],["1853","학원생관리"],["1854","LMS"]],
124
+ "근무장소": [["1855","간호학원"],["1856","검정고시학원"],["1857","고등학교"],["1858","공무원학원"],["1859","국제학교"],["1861","대안학교"],["1862","대학교"],["1863","대학원"],["1864","도서관"],["1865","문화센터"],["1866","미용학원"],["1867","방과후학교"],["1868","보습학원"],["1869","복지시설"],["1870","상담센터"],["1871","속셈학원"],["1872","승무원학원"],["1873","아동센터"],["1874","어린이집/유치원"],["1875","어학원"],["1877","요리학원"],["1878","운전학원"],["1860","유아놀이학원"],["1876","유아영어학원"],["1879","유학원"],["1880","입시학원"],["1881","중학교"],["1882","직업전문학교"],["1883","초등학교"]],
125
+ "교육과목": [["1884","게임개발"],["1885","경제"],["1886","공연예술"],["1887","과학"],["2240","국어"],["1888","기술가정"],["1889","네일아트"],["1890","논술/글쓰기"],["1891","농구"],["1892","댄스"],["1893","도덕"],["1894","디자인"],["1895","만화/웹툰"],["1896","메이크업"],["1897","메카트로닉스"],["1909","물리"],["1898","미술"],["1899","발레"],["1912","사회"],["1910","생물"],["1900","생활체육"],["1901","세계사"],["1902","수영"],["1903","수학"],["1904","스피치"],["1905","애니메이션"],["1906","연극"],["1907","영어"],["1908","윤리"],["1913","음악"],["1914","일본어"],["1915","전산회계"],["1916","정보보호교육"],["1917","제2외국어"],["1918","중국어"],["1919","지구과학"],["1920","지리"],["1921","코딩"],["1922","태권도"],["1923","피아노"],["1911","한국사"],["1924","한국어"],["1925","한문"],["1926","화학"],["1927","CG"]],
126
+ },
127
+ "미디어·문화·스포츠": {
128
+ "직무·직업": [["1281","가수"],["1295","기상캐스터"],["1282","기술감독"],["1283","기자"],["1284","도슨트"],["1285","리포터"],["1286","방송BJ"],["1331","방송엔지니어"],["1287","사운드엔지니어"],["1288","선수"],["1289","성우"],["1290","쇼호스트"],["1291","스크립터"],["1292","스포츠강사"],["1293","스포츠에이전트"],["1294","아나운서"],["1296","에디터"],["1297","연예매니저"],["1298","영상디자이너"],["1299","영화감독"],["1325","영화기획"],["1326","영화미술"],["1327","영화제작"],["1328","음반기획"],["1329","음반유통"],["1300","인플루언서"],["1301","작가"],["2226","작곡"],["1302","재활치료사"],["1303","촬영감독"],["1304","캐디"],["1330","캐스팅매니저"],["1305","컬러리스트"],["1306","코치"],["1307","큐레이터"],["1308","크리에이터"],["1309","테크니컬라이터"],["1310","통/번역"],["1311","트레이너"],["1312","패션모델"],["1313","포토그래퍼"],["1314","프리뷰어"],["1315","피팅모델"],["1316","해설가"],["1317","AD(아트디렉터)"],["1318","AE(광고기획자)"],["1319","CW(카피라이터)"],["1320","DJ"],["1321","FC(피트니스카운셀러)"],["1322","MC"],["1323","PD/AD/FD"],["1324","VJ"]],
129
+ "전문분야": [["1332","골프"],["1333","공연기획"],["1334","공연예술"],["1335","교열"],["1336","국악"],["1337","나레이션"],["1338","농구"],["1339","뉴미디어"],["1340","당구"],["1341","댄스"],["1402","드라마"],["1403","라이브커머스"],["1342","레저"],["1343","레크레이션"],["1404","만화/웹툰"],["1344","모델에이전시"],["1345","무대제작"],["1346","문화재"],["1347","뮤지컬"],["1348","미디어플래너"],["1349","미술관"],["1350","바이올린"],["1351","박물관"],["1352","발레"],["1353","방송송출"],["1354","배구"],["1355","배드민턴"],["1356","보정/리터칭"],["1357","보조출연"],["1358","보컬레슨"],["1359","복싱"],["1360","볼링"],["1361","생활체육"],["1362","수영"],["1363","순수미술"],["1364","스토리텔링"],["1365","승마"],["1405","신문"],["1366","실용음악학원"],["1367","애니메이션"],["1368","야구"],["1369","에어로빅"],["1370","엔터테인먼트"],["1371","영상자막"],["1372","영상제작"],["1373","영상편집"],["1374","영어"],["1406","영화"],["1375","요가"],["1376","원고작성"],["1407","유튜브"],["1377","음악회"],["1378","음원"],["1379","인제스트/인코딩"],["1380","일본어"],["1408","잡지"],["1381","재즈"],["1382","제2외국어"],["1383","조명"],["1384","중국어"],["1385","첼로"],["1386","촬영"],["1387","촬영보조"],["1388","축구"],["1389","콘서트"],["1390","크로스핏"],["1391","태권도"],["1392","테마파크"],["1393","편성"],["1394","포스트프로덕션"],["1395","피아노"],["1396","필라테스"],["1397","합창"],["1398","헬스"],["1399","A&R"],["1409","CF광고"],["1400","e-Sports"],["1410","TV"],["1401","VOD서비스"]],
130
+ },
131
+ "금융·보험": {
132
+ "직무·직업": [["1698","금융사무"],["1699","금융상품영업"],["1691","대출상담사"],["1700","보험상담"],["1701","보험상품개발"],["1692","보험설계사"],["1702","보험심사"],["1693","손해사정사"],["1694","심사역"],["1695","애널리스트"],["1696","텔러"],["1697","펀드매니저"]],
133
+ "전문분야": [["1703","기업금융"],["1704","기업분석"],["1705","기업심사"],["1706","담보대출"],["1707","대출심사"],["1708","배상"],["1709","배상책임"],["1710","보험사고"],["1711","보험청구"],["1712","부동산투자"],["1713","손해보험"],["1714","손해평가"],["1715","신탁"],["1716","여신심사"],["1717","외환관리"],["1718","위험관리"],["1719","위험분석"],["1720","자산운용"],["1721","재무분석"],["1722","재물손해사정"],["1723","주식영업"],["1724","주식투자"],["1725","채권관리"],["1726","채권추심"],["1727","투자검토"],["1728","투자분석"],["1729","투자심사"],["1730","투자자문"],["1731","투자자산"],["1732","펀드"],["1733","환전"],["1734","DCM"],["1735","ECM"],["1736","NPL"],["1737","PF영업"]],
134
+ "금융기관": [["1738","공제기관"],["1739","사금융권"],["1740","생명보험사"],["1741","선물중개회사"],["1742","손해보험사"],["1743","일반은행"],["1744","자산운용사"],["1749","저축은행"],["1745","제2금융권"],["1746","증권사"],["1747","투자자문사"],["1748","특수은행"]],
135
+ },
136
+ "공공·복지": {
137
+ "직무·직업": [["1950","감각통합치료사"],["1943","군인·부사관"],["1929","도서관사서"],["1931","돌봄교사"],["1934","목회자"],["1944","병역특례"],["1932","보호상담원"],["1933","사무국장"],["1935","사무직"],["1936","사회복지사"],["1937","생활복지사"],["1938","생활지도원"],["1939","생활지원사"],["1940","심리치료사"],["1951","언어치료사 "],["1941","요양보호사"],["1942","임기제공무원"],["1945","재활교사"],["1946","직업상담사"],["1947","청소년지도사"],["1928","캠페이너"],["1948","특수교사"],["1930","평생교육사"],["1949","활동지원사"]],
138
+ "전문분야": [["1952","가족상담"],["1953","노인복지"],["1954","놀이치료"],["1955","도서관리"],["1956","미술치료"],["1957","방과후아카데미"],["1958","방문목욕"],["1959","방문요양"],["1960","사례관리"],["1961","아동보육"],["1962","아동복지"],["1963","음악치료"],["1964","인지치료"],["1965","자원봉사"],["1966","작업치료"],["1967","장애인복지"],["1968","청소년복지"],["1969","호스피스"],["1970","EAP상담"],["1971","MARC구축"]],
139
+ },
140
+ };
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Local lookup over the Remember/Saramin category snapshots, so the AI can turn a
3
+ * user's role ("경리", "데이터 분석가", "간호사") into each board's filter values.
4
+ * No network: the tables ship with CareerMate (job-categories.data.ts).
5
+ */
6
+
7
+ import { REMEMBER_CATEGORIES, SARAMIN_CATEGORIES } from './job-categories.data.ts';
8
+
9
+ export interface SaraminCategory {
10
+ code: string;
11
+ name: string;
12
+ group: string;
13
+ kind: string;
14
+ }
15
+
16
+ export interface JobCategoryMatches {
17
+ query: string;
18
+ /** Values for search_jobs' remember_categories: "group>sub", or a whole "group". */
19
+ remember: string[];
20
+ saramin: SaraminCategory[];
21
+ }
22
+
23
+ const norm = (s: string) => s.toLowerCase().replace(/[\s·/(),&.\-]/g, '');
24
+
25
+ /**
26
+ * Does `hay` contain `needle` (already normalized)? Short Latin needles ("AI", "IT", "QA") must
27
+ * stand alone in the raw text, or "AI" would match "AICPA" and "IT" would match "Git".
28
+ */
29
+ function contains(hayRaw: string, needle: string): boolean {
30
+ if (/^[a-z0-9]{1,3}$/.test(needle)) return new RegExp(`(?<![a-z0-9])${needle}(?![a-z0-9])`).test(hayRaw.toLowerCase());
31
+ return norm(hayRaw).includes(needle);
32
+ }
33
+
34
+ /**
35
+ * 3 = same name, 2 = name contains the term, 1 = term contains the name ("데이터 분석가 신입" →
36
+ * "데이터분석가") or a word of the term is the name, 0.5 = a word of the term is inside the name
37
+ * ("회계 담당자" → "회계결산").
38
+ */
39
+ function score(name: string, terms: string[]): number {
40
+ const n = norm(name);
41
+ if (n.length < 2) return 0;
42
+ let best = 0;
43
+ for (const term of terms) {
44
+ const t = norm(term);
45
+ if (n === t) return 3;
46
+ if (contains(name, t)) best = Math.max(best, 2);
47
+ else if (contains(term, n)) best = Math.max(best, 1);
48
+ for (const word of term.split(/\s+/).map(norm)) {
49
+ if (word.length < 2 || word === t) continue;
50
+ if (word === n) best = Math.max(best, 1);
51
+ else if (contains(name, word)) best = Math.max(best, 0.5);
52
+ }
53
+ }
54
+ return best;
55
+ }
56
+
57
+ /** Roles as comma/newline separated terms, e.g. "경리, 회계". Results are ranked, best first. */
58
+ export function findJobCategories(query: string, limit = 20): JobCategoryMatches {
59
+ const terms = (query ?? '').split(/[,\n]/).map((t) => t.trim()).filter((t) => norm(t).length >= 2);
60
+ const remember: { v: string; s: number }[] = [];
61
+ for (const [group, subs] of Object.entries(REMEMBER_CATEGORIES)) {
62
+ const gs = score(group, terms);
63
+ if (gs) remember.push({ v: group, s: gs - 0.5 }); // a whole group is broader than a matching sub
64
+ for (const sub of subs) {
65
+ const s = score(sub, terms);
66
+ if (s) remember.push({ v: `${group}>${sub}`, s });
67
+ }
68
+ }
69
+ const saramin: (SaraminCategory & { s: number })[] = [];
70
+ for (const [group, kinds] of Object.entries(SARAMIN_CATEGORIES)) {
71
+ for (const [kind, list] of Object.entries(kinds)) {
72
+ for (const [code, name] of list) {
73
+ // Job titles first; skill/tool/place facets (기술스택, 근무장소 ...) rank just below.
74
+ const s = score(name, terms) - (kind === '직무·직업' ? 0 : 0.25);
75
+ if (s > 0) saramin.push({ code, name, group, kind, s });
76
+ }
77
+ }
78
+ }
79
+ return {
80
+ query,
81
+ remember: remember.sort((a, b) => b.s - a.s).slice(0, limit).map((r) => r.v),
82
+ saramin: saramin
83
+ .sort((a, b) => b.s - a.s)
84
+ .slice(0, limit)
85
+ .map(({ s: _s, ...c }) => c),
86
+ };
87
+ }
88
+
89
+ /** "group>sub" or "group" exactly as in the snapshot; Remember silently ignores anything else. */
90
+ export function isRememberCategory(value: string): boolean {
91
+ const parts = value.split('>').map((s) => s.trim());
92
+ if (parts.length > 2) return false;
93
+ const [group, sub] = parts;
94
+ const subs = REMEMBER_CATEGORIES[group];
95
+ return !!subs && (sub === undefined || subs.includes(sub));
96
+ }
97
+
98
+ let saraminCodes: Set<string> | undefined;
99
+
100
+ /** A cat_kewd code from the snapshot. Unknown codes are rejected rather than risk an unfiltered list. */
101
+ export function isSaraminCategory(code: string): boolean {
102
+ saraminCodes ??= new Set(
103
+ Object.values(SARAMIN_CATEGORIES).flatMap((kinds) => Object.values(kinds).flatMap((list) => list.map(([c]) => c))),
104
+ );
105
+ return saraminCodes.has(code);
106
+ }