DSc T2Editor Developers
DocumentationFoundations
Foundations

에디터 설계 철학

글의 주권, 교체 가능성, 한국형 블록 작성 경험과 보안 경계에 관한 기준입니다.

에디터 설계 철학

T2Editor는 문장을 대신 소유하는 플랫폼이 아니라, 사람이 자기 문장을 오래 다룰 수 있게 하는 도구를 지향한다. 저장 형식과 배포 경로, 확장 기능의 선택권은 가능한 한 작성자와 운영자 쪽에 남아 있어야 한다.

저자의 문학적 서문

도구는 글보다 앞설 수 없다. CMS와 설치 환경이 달라질 때마다 에디터 코어를 다시 고치는 일은 같은 문제를 반복해서 해결하는 자원의 낭비이며, 결국 그 비용은 개발자와 운영자, 글을 쓰는 사람 모두에게 돌아간다.

충분히 숙고되지 않은 설계가 개발사의 편의나 표준이라는 이름으로 강행될 때, 기술은 사용자를 돕는 도구에서 사용자의 환경을 통제하는 규칙으로 변한다. 우리는 사람이 도구의 사정에 맞추는 대신, 도구가 사람의 환경과 선택을 존중해야 한다고 믿는다.

그래서 T2Editor는 특정 CMS나 플랫폼을 생존 조건으로 삼지 않는다. 연결할 수 있지만 종속되지 않고, 필요하면 교체할 수 있으며, 하나의 서비스가 사라져도 작성된 글과 나머지 생태계는 계속 남아야 한다. 교체 가능성은 실패에 대비한 기능이 아니라 사용자의 주권을 인정하는 설계 원칙이다.

한국의 게시글은 텍스트만으로 이루어지지 않는다. 이미지와 파일, 영상과 표, 코드와 링크가 한 화면에서 섞이고 모바일과 데스크톱, 게시판과 커뮤니티를 오간다. T2Editor는 이 환경을 외국 제품의 축소판으로 다루지 않고, 필요한 기능을 레고처럼 조립하고 분리할 수 있는 블록형 작성 경험으로 해석한다.

우리가 말하는 한국형 위지윅 웹 에디터란 국적을 장식처럼 붙인 제품이 아니다. 한국의 실제 글쓰기 환경을 관찰하고 그 불편에 책임 있게 응답하는 도구다. 코어는 작고 단단하게, 생태계는 자유롭게 확장되며, 사용자의 글은 언제나 에디터보다 오래 남아야 한다.

문서의 주권

  • 작성 결과는 특정 서비스 화면 안에서만 살아 있는 데이터가 아니라, 옮기고 백업하고 다시 읽을 수 있는 콘텐츠여야 한다.
  • 코어와 확장, 공개 자산과 비공개 상태를 나누어 운영자가 교체 가능한 부분을 분명히 한다.
  • 탈중앙화는 중앙 서버 하나를 없애는 구호가 아니라, 한 운영자나 한 마켓이 생태계 전체의 생존 조건이 되지 않게 하는 구조적 선택이다.

Open T2Editor가 중단되어도 독립 저장소와 Provider Market은 각자의 도메인에서 계속 배포할 수 있어야 한다. 반대로 독립 마켓 하나가 사라져도 에디터 코어와 다른 제공자의 배포 경로는 영향을 받지 않아야 한다. 이것이 T2Editor가 말하는 통제받지 않는 뷰의 실무적 의미다.

보안은 기능 바깥의 경계가 아니다

보안은 출시 직전 추가하는 필터가 아니라 입력, 변환, 저장, 복원, 출력의 모든 경계에 놓인다.

  • 플러그인 이름과 경로는 허용 문자로 제한하고 실제 경로가 등록 루트 안에 있는지 확인한다.
  • 플러그인이 HTML을 쓸 때는 setPluginHTML() 또는 sanitizePluginHTML()을 통과시킨다.
  • script, 이벤트 속성, srcdoc, 위험 URL 프로토콜을 제거하고 iframe은 허용 출처와 sandbox 정책을 적용한다.
  • 서버 업로드는 확장자만 보지 않고 MIME, 시그니처, 크기, 픽셀 수, 권한, 저장 이름과 접근 범위를 함께 검증한다.
  • 비공개 설정과 설치 기록은 공개 자산 디렉터리와 분리하고 직접 웹 접근을 막는다.

보안 필터가 콘텐츠를 바꿀 수 있다는 사실도 설계에 포함한다. 플러그인은 저장 직전 런타임 컨트롤을 걷어 내고 다시 편집할 때 의미 있는 블록 구조를 복원한다.

파일 업로드와 관리

파일은 업로드 순간이 아니라 생성부터 삭제까지 하나의 생애를 가진다.

  1. 브라우저는 사용자 선택, 선택적 전처리와 미리보기를 담당한다.
  2. 서버는 세션과 권한, 허용 형식, MIME·시그니처, 크기, 파일명과 저장 위치를 다시 검증한다.
  3. 그누보드5는 G5_DATA_PATH, 라이믹스는 파일 모듈과 files 테이블, 독립 환경은 T2Editor 데이터 루트의 수명 정책을 따른다.
  4. 공개 미디어와 관리자 인증·마켓 설치 상태 같은 비공개 데이터는 다른 루트에 둔다.
  5. 문서에는 서버가 승인한 URL과 복원에 필요한 최소 메타데이터만 남긴다.

원본 파일명은 사람에게 보여 주는 메타데이터일 뿐 저장 경로로 신뢰하지 않는다.

확장 가능한 코어

코어는 모든 기능을 품는 장소가 아니다. 편집 상태, 명령 전달, 문서 정규화와 보안 경계 같은 공통 책임만 맡고 이미지·영상·파일·표·그리기는 플러그인으로 분리한다. 전역 기능은 /extend, 언어 자원은 /locales, 실행 중 만들어지는 상태는 /data 계층으로 보낸다.

좋은 확장은 코어를 많이 아는 확장이 아니라, 공개된 경계를 정확히 지키는 확장이다.

기술 기준

T2Editor 10.4.0을 기반으로 작성되었으며, 동일한 구조와 계약을 유지하는 이후 버전에도 적용됩니다.

T2Editor 홈으로