🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기
비교 대상 선택
추가 0줄 삭제 0줄 변경 2줄 동일 125줄
r2 고아 링크 삭제
2026-04-17 19:04

#마이그레이션 #NSFW

요약

이 문서는 “예전 문서 설명이 아직 남아 있거나, server 모드 중심 사고방식이 남아 있는 상태”에서 9.1.0의 NSFWJS 구조로 넘어갈 때 꼭 바꿔야 할 관점을 정리합니다.

무엇이 바뀌었는가

예전 관점

  • 브라우저 NSFW 파일을 자체 추론 엔진 또는 워커 메시지 중심으로 이해
  • 서버 API 문서를 현행 기본 경로처럼 설명
  • UI와 분류 엔진의 경계를 명확히 나누지 않음

9.1.0 관점

  • 브라우저 NSFW 파일은 NSFWJS 래퍼
  • 현행 기본 경로는 browser 모드
  • 기존 UI는 유지하고, 엔진만 교체
  • self-hosted vendor 경로를 운영 기준으로 문서화
  • 결과를 safe / suspect / unsafe / error로 해석

문서에서 반드시 바꿔야 하는 표현

바꾸기 전바꾼 뒤
“핵심 엔트리 포인트는 nsfw_api_server.php”“기본 권장 경로는 nsfw_api_browser.js이며, server 경로는 레거시 또는 대체 경로로 본다”
“워커 메시지를 처리한다”“NSFWJS 모델 로드와 결과 정규화를 담당한다”
“단순 nsfw 여부를 반환한다”“safe / suspect / unsafe / error 라벨을 반환한다”
“CDN 또는 외부 경로 사용”“self-hosted vendor 구조를 우선 고려한다”

코드 관점의 변경 체크리스트

1. 설정값 추가

  • T2_NSFW_RUNTIME_ASSET_BASE
  • T2_NSFW_BROWSER_MODEL
  • T2_NSFW_BROWSER_MODEL_TYPE
  • T2_NSFW_BROWSER_MODEL_URL
  • T2_NSFW_BROWSER_BACKEND_PRIORITY

2. 브라우저 API 책임 변경

  • 워커 중심 설명 제거
  • NSFWFilterAPI 중심 설명 추가
  • load, _selectBackend, classify, dispose 문서화

3. 이미지 플러그인 정책 변경

  • checkNSFW(file) 결과 구조 업데이트
  • applyNSFWFilter()에서 suspect 처리 추가
  • 업로드 모달 상태 배지와 하단 상태바를 새 라벨 체계에 맞춤

4. 운영 문서 변경

  • /vendor 구조 문서화
  • T2EDITOR_URL과 실제 설치 URL 일치 여부 강조
  • WebGPU 실패 시 폴백 전략 문서화

테스트 관점의 변경 체크리스트

테스트 항목확인 포인트
모델 로딩model.json이 정상적으로 열리는가
백엔드 선택WebGPU 또는 폴백이 정상적으로 선택되는가
상태 표시미리보기 카드와 상태바가 결과를 반영하는가
경고 정책suspectunsafe가 정책대로 처리되는가
오류 처리모델 로딩 실패 시 error가 보이는가
문서 유지보수 팁

레거시 구조와 새 구조를 한 문서에 섞어 쓰면 혼란이 커집니다. 가능하면 “현재 기본 경로”와 “레거시 호환 경로”를 별도 절로 나누어 서술하는 편이 좋습니다.

수정 요약

마이그레이션의 핵심은 “파일 교체”보다 “관점 교체”입니다.

  • 브라우저 모드를 기본 경로로 재정의
  • NSFWJS 기반 엔진으로 문서 갱신
  • self-hosted 운영 문서 추가
  • 이미지 UI 문서에서 suspect 상태를 별도 취급
r3 어휘 수정
2026-04-18 01:04

#마이그레이션 #NSFW

요약

이 문서는 “예전 문서 설명이 아직 남아 있거나, server 모드 중심 사고방식이 남아 있는 상태”에서 9.1.0의 NSFWJS 구조로 넘어갈 때 꼭 바꿔야 할 관점을 정리합니다.

무엇이 바뀌었는가

9.0.0

  • 브라우저 NSFW 파일을 자체 추론 엔진 또는 워커 메시지 중심으로 이해
  • 서버 API 문서를 현행 기본 경로처럼 설명
  • UI와 분류 엔진의 경계를 명확히 나누지 않음

9.1.0

  • 브라우저 NSFW 파일은 NSFWJS 래퍼
  • 현행 기본 경로는 browser 모드
  • 기존 UI는 유지하고, 엔진만 교체
  • self-hosted vendor 경로를 운영 기준으로 문서화
  • 결과를 safe / suspect / unsafe / error로 해석

문서에서 반드시 바꿔야 하는 표현

바꾸기 전바꾼 뒤
“핵심 엔트리 포인트는 nsfw_api_server.php”“기본 권장 경로는 nsfw_api_browser.js이며, server 경로는 레거시 또는 대체 경로로 본다”
“워커 메시지를 처리한다”“NSFWJS 모델 로드와 결과 정규화를 담당한다”
“단순 nsfw 여부를 반환한다”“safe / suspect / unsafe / error 라벨을 반환한다”
“CDN 또는 외부 경로 사용”“self-hosted vendor 구조를 우선 고려한다”

코드 관점의 변경 체크리스트

1. 설정값 추가

  • T2_NSFW_RUNTIME_ASSET_BASE
  • T2_NSFW_BROWSER_MODEL
  • T2_NSFW_BROWSER_MODEL_TYPE
  • T2_NSFW_BROWSER_MODEL_URL
  • T2_NSFW_BROWSER_BACKEND_PRIORITY

2. 브라우저 API 책임 변경

  • 워커 중심 설명 제거
  • NSFWFilterAPI 중심 설명 추가
  • load, _selectBackend, classify, dispose 문서화

3. 이미지 플러그인 정책 변경

  • checkNSFW(file) 결과 구조 업데이트
  • applyNSFWFilter()에서 suspect 처리 추가
  • 업로드 모달 상태 배지와 하단 상태바를 새 라벨 체계에 맞춤

4. 운영 문서 변경

  • /vendor 구조 문서화
  • T2EDITOR_URL과 실제 설치 URL 일치 여부 강조
  • WebGPU 실패 시 폴백 전략 문서화

테스트 관점의 변경 체크리스트

테스트 항목확인 포인트
모델 로딩model.json이 정상적으로 열리는가
백엔드 선택WebGPU 또는 폴백이 정상적으로 선택되는가
상태 표시미리보기 카드와 상태바가 결과를 반영하는가
경고 정책suspectunsafe가 정책대로 처리되는가
오류 처리모델 로딩 실패 시 error가 보이는가
문서 유지보수 팁

레거시 구조와 새 구조를 한 문서에 섞어 쓰면 혼란이 커집니다. 가능하면 “현재 기본 경로”와 “레거시 호환 경로”를 별도 절로 나누어 서술하는 편이 좋습니다.

수정 요약

마이그레이션의 핵심은 “파일 교체”보다 “관점 교체”입니다.

  • 브라우저 모드를 기본 경로로 재정의
  • NSFWJS 기반 엔진으로 문서 갱신
  • self-hosted 운영 문서 추가
  • 이미지 UI 문서에서 suspect 상태를 별도 취급
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 마이그레이션: 레거시 NSFW 구조에서 NSFWJS로 2 title: 마이그레이션: 레거시 NSFW 구조에서 NSFWJS로
3 document_id: migration-legacy-nsfw-to-nsfwjs 3 document_id: migration-legacy-nsfw-to-nsfwjs
4 slug: migration-legacy-nsfw-to-nsfwjs 4 slug: migration-legacy-nsfw-to-nsfwjs
5 target_editor_version: 9.1.0 5 target_editor_version: 9.1.0
6 document_type: migration-guide 6 document_type: migration-guide
7 doc_type: migration-guide 7 doc_type: migration-guide
8 target_readers: [웹마스터, 개발자, AI agent] 8 target_readers: [웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: Medium 10 dependency: Medium
11 core_type: Guide 11 core_type: Guide
12 stability: [Version-Bound] 12 stability: [Version-Bound]
13 stable_anchor: [] 13 stable_anchor: []
14 version_bound: 14 version_bound:
15 - 9.1.0의 브라우저 NSFW 구조 15 - 9.1.0의 브라우저 NSFW 구조
16 - MobileNetV2Mid 모델 기준 임계값 해석 16 - MobileNetV2Mid 모델 기준 임계값 해석
17 related_docs: 17 related_docs:
18 - guide-nsfwjs-overview 18 - guide-nsfwjs-overview
19 - core-nsfw_api_browser-js 19 - core-nsfw_api_browser-js
20 - config-nsfwjs-runtime-settings 20 - config-nsfwjs-runtime-settings
21 related_files: 21 related_files:
22 - 9.1.0/t2editor/config/nsfw_api_browser.js 22 - 9.1.0/t2editor/config/nsfw_api_browser.js
23 - 9.1.0/t2editor/config/nsfw_api_server.php 23 - 9.1.0/t2editor/config/nsfw_api_server.php
24 - 9.1.0/t2editor/plugin/image/image.js 24 - 9.1.0/t2editor/plugin/image/image.js
25 related_functions: 25 related_functions:
26 - checkNSFW 26 - checkNSFW
27 - applyNSFWFilter 27 - applyNSFWFilter
28 related_classes_modules: 28 related_classes_modules:
29 - NSFWFilterAPI 29 - NSFWFilterAPI
30 related_features: 30 related_features:
31 - 브라우저 모드 전환 31 - 브라우저 모드 전환
32 - UI 유지형 엔진 교체 32 - UI 유지형 엔진 교체
33 related_ui: 33 related_ui:
34 - 이미지 업로드 모달 34 - 이미지 업로드 모달
35 - NSFW 경고 모달 35 - NSFW 경고 모달
36 change_risk: 엔진만 바뀌는 것이 아니라 결과 해석 방식과 운영 경로까지 함께 바뀌므로, 단순 파일 교체로 끝났다고 보면 안 됩니다. 36 change_risk: 엔진만 바뀌는 것이 아니라 결과 해석 방식과 운영 경로까지 함께 바뀌므로, 단순 파일 교체로 끝났다고 보면 안 됩니다.
37 reading_order: 22 37 reading_order: 22
38 summary: 기존 자체 브라우저 추론 또는 서버 추론 중심 구조에서 NSFWJS 기반 브라우저 구조로 옮길 때 체크해야 할 변경점을 정리합니다. 38 summary: 기존 자체 브라우저 추론 또는 서버 추론 중심 구조에서 NSFWJS 기반 브라우저 구조로 옮길 때 체크해야 할 변경점을 정리합니다.
39 description: 레거시 NSFW 구조의 문서, 설정, 운영, UI 연동 포인트를 9.1.0 NSFWJS 구조에 맞춰 재해석하는 마이그레이션 문서입니다. 39 description: 레거시 NSFW 구조의 문서, 설정, 운영, UI 연동 포인트를 9.1.0 NSFWJS 구조에 맞춰 재해석하는 마이그레이션 문서입니다.
40 tags: [migration, NSFWJS, legacy, browser-mode, T2Editor] 40 tags: [migration, NSFWJS, legacy, browser-mode, T2Editor]
41 version_tag: 9.1.0 41 version_tag: 9.1.0
42 maintenance_difficulty: Medium 42 maintenance_difficulty: Medium
43 test_requirement: High 43 test_requirement: High
44 ai_agent_risk: Medium 44 ai_agent_risk: Medium
45 source_basis: [현재 코드 분석 기반] 45 source_basis: [현재 코드 분석 기반]
46 beginner_section_included: false 46 beginner_section_included: false
47 webmaster_section_included: true 47 webmaster_section_included: true
48 developer_section_included: true 48 developer_section_included: true
49 --- 49 ---
50   50  
51 [목차] 51 [목차]
52   52  
53 [[분류:마이그레이션]] 53 [[분류:마이그레이션]]
54 [[분류:NSFW]] 54 [[분류:NSFW]]
55   55  
56 [note(요약)] 56 [note(요약)]
57 이 문서는 “예전 문서 설명이 아직 남아 있거나, server 모드 중심 사고방식이 남아 있는 상태”에서 9.1.0의 NSFWJS 구조로 넘어갈 때 꼭 바꿔야 할 관점을 정리합니다. 57 이 문서는 “예전 문서 설명이 아직 남아 있거나, server 모드 중심 사고방식이 남아 있는 상태”에서 9.1.0의 NSFWJS 구조로 넘어갈 때 꼭 바꿔야 할 관점을 정리합니다.
58 [/note] 58 [/note]
59   59  
60 # 무엇이 바뀌었는가 60 # 무엇이 바뀌었는가
61   61  
62 ## 62 ## 9.0.0
63 - 브라우저 NSFW 파일을 자체 추론 엔진 또는 워커 메시지 중심으로 이해 63 - 브라우저 NSFW 파일을 자체 추론 엔진 또는 워커 메시지 중심으로 이해
64 - 서버 API 문서를 현행 기본 경로처럼 설명 64 - 서버 API 문서를 현행 기본 경로처럼 설명
65 - UI와 분류 엔진의 경계를 명확히 나누지 않음 65 - UI와 분류 엔진의 경계를 명확히 나누지 않음
66   66  
67 ## 9.1.0 67 ## 9.1.0
68 - 브라우저 NSFW 파일은 **NSFWJS 래퍼** 68 - 브라우저 NSFW 파일은 **NSFWJS 래퍼**
69 - 현행 기본 경로는 **browser 모드** 69 - 현행 기본 경로는 **browser 모드**
70 - 기존 UI는 유지하고, 엔진만 교체 70 - 기존 UI는 유지하고, 엔진만 교체
71 - self-hosted vendor 경로를 운영 기준으로 문서화 71 - self-hosted vendor 경로를 운영 기준으로 문서화
72 - 결과를 `safe / suspect / unsafe / error`로 해석 72 - 결과를 `safe / suspect / unsafe / error`로 해석
73   73  
74 ## 문서에서 반드시 바꿔야 하는 표현 74 ## 문서에서 반드시 바꿔야 하는 표현
75   75  
76 ||= 바꾸기 전 ||= 바꾼 뒤 || 76 ||= 바꾸기 전 ||= 바꾼 뒤 ||
77 || “핵심 엔트리 포인트는 nsfw_api_server.php” || “기본 권장 경로는 nsfw_api_browser.js이며, server 경로는 레거시 또는 대체 경로로 본다” || 77 || “핵심 엔트리 포인트는 nsfw_api_server.php” || “기본 권장 경로는 nsfw_api_browser.js이며, server 경로는 레거시 또는 대체 경로로 본다” ||
78 || “워커 메시지를 처리한다” || “NSFWJS 모델 로드와 결과 정규화를 담당한다” || 78 || “워커 메시지를 처리한다” || “NSFWJS 모델 로드와 결과 정규화를 담당한다” ||
79 || “단순 nsfw 여부를 반환한다” || “safe / suspect / unsafe / error 라벨을 반환한다” || 79 || “단순 nsfw 여부를 반환한다” || “safe / suspect / unsafe / error 라벨을 반환한다” ||
80 || “CDN 또는 외부 경로 사용” || “self-hosted vendor 구조를 우선 고려한다” || 80 || “CDN 또는 외부 경로 사용” || “self-hosted vendor 구조를 우선 고려한다” ||
81   81  
82 ## 코드 관점의 변경 체크리스트 82 ## 코드 관점의 변경 체크리스트
83   83  
84 ### 1. 설정값 추가 84 ### 1. 설정값 추가
85 - `T2_NSFW_RUNTIME_ASSET_BASE` 85 - `T2_NSFW_RUNTIME_ASSET_BASE`
86 - `T2_NSFW_BROWSER_MODEL` 86 - `T2_NSFW_BROWSER_MODEL`
87 - `T2_NSFW_BROWSER_MODEL_TYPE` 87 - `T2_NSFW_BROWSER_MODEL_TYPE`
88 - `T2_NSFW_BROWSER_MODEL_URL` 88 - `T2_NSFW_BROWSER_MODEL_URL`
89 - `T2_NSFW_BROWSER_BACKEND_PRIORITY` 89 - `T2_NSFW_BROWSER_BACKEND_PRIORITY`
90   90  
91 ### 2. 브라우저 API 책임 변경 91 ### 2. 브라우저 API 책임 변경
92 - 워커 중심 설명 제거 92 - 워커 중심 설명 제거
93 - `NSFWFilterAPI` 중심 설명 추가 93 - `NSFWFilterAPI` 중심 설명 추가
94 - `load`, `_selectBackend`, `classify`, `dispose` 문서화 94 - `load`, `_selectBackend`, `classify`, `dispose` 문서화
95   95  
96 ### 3. 이미지 플러그인 정책 변경 96 ### 3. 이미지 플러그인 정책 변경
97 - `checkNSFW(file)` 결과 구조 업데이트 97 - `checkNSFW(file)` 결과 구조 업데이트
98 - `applyNSFWFilter()`에서 `suspect` 처리 추가 98 - `applyNSFWFilter()`에서 `suspect` 처리 추가
99 - 업로드 모달 상태 배지와 하단 상태바를 새 라벨 체계에 맞춤 99 - 업로드 모달 상태 배지와 하단 상태바를 새 라벨 체계에 맞춤
100   100  
101 ### 4. 운영 문서 변경 101 ### 4. 운영 문서 변경
102 - `/vendor` 구조 문서화 102 - `/vendor` 구조 문서화
103 - `T2EDITOR_URL`과 실제 설치 URL 일치 여부 강조 103 - `T2EDITOR_URL`과 실제 설치 URL 일치 여부 강조
104 - WebGPU 실패 시 폴백 전략 문서화 104 - WebGPU 실패 시 폴백 전략 문서화
105   105  
106 ## 테스트 관점의 변경 체크리스트 106 ## 테스트 관점의 변경 체크리스트
107   107  
108 ||= 테스트 항목 ||= 확인 포인트 || 108 ||= 테스트 항목 ||= 확인 포인트 ||
109 || 모델 로딩 || `model.json`이 정상적으로 열리는가 || 109 || 모델 로딩 || `model.json`이 정상적으로 열리는가 ||
110 || 백엔드 선택 || WebGPU 또는 폴백이 정상적으로 선택되는가 || 110 || 백엔드 선택 || WebGPU 또는 폴백이 정상적으로 선택되는가 ||
111 || 상태 표시 || 미리보기 카드와 상태바가 결과를 반영하는가 || 111 || 상태 표시 || 미리보기 카드와 상태바가 결과를 반영하는가 ||
112 || 경고 정책 || `suspect`와 `unsafe`가 정책대로 처리되는가 || 112 || 경고 정책 || `suspect`와 `unsafe`가 정책대로 처리되는가 ||
113 || 오류 처리 || 모델 로딩 실패 시 `error`가 보이는가 || 113 || 오류 처리 || 모델 로딩 실패 시 `error`가 보이는가 ||
114   114  
115 [tip(문서 유지보수 팁)] 115 [tip(문서 유지보수 팁)]
116 레거시 구조와 새 구조를 한 문서에 섞어 쓰면 혼란이 커집니다. 116 레거시 구조와 새 구조를 한 문서에 섞어 쓰면 혼란이 커집니다.
117 가능하면 “현재 기본 경로”와 “레거시 호환 경로”를 별도 절로 나누어 서술하는 편이 좋습니다. 117 가능하면 “현재 기본 경로”와 “레거시 호환 경로”를 별도 절로 나누어 서술하는 편이 좋습니다.
118 [/tip] 118 [/tip]
119   119  
120 ## 수정 요약 120 ## 수정 요약
121   121  
122 마이그레이션의 핵심은 “파일 교체”보다 “관점 교체”입니다. 122 마이그레이션의 핵심은 “파일 교체”보다 “관점 교체”입니다.
123   123  
124 - 브라우저 모드를 기본 경로로 재정의 124 - 브라우저 모드를 기본 경로로 재정의
125 - NSFWJS 기반 엔진으로 문서 갱신 125 - NSFWJS 기반 엔진으로 문서 갱신
126 - self-hosted 운영 문서 추가 126 - self-hosted 운영 문서 추가
127 - 이미지 UI 문서에서 `suspect` 상태를 별도 취급 127 - 이미지 UI 문서에서 `suspect` 상태를 별도 취급
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내