T Toutadmin문서

두 판본, 하나의 제품

Toutadmin은 두 벌로 존재합니다. 하나는 Node.js 위에서, 다른 하나는 PHP 위에서 돕니다. 두 제품도 아니고, 줄인 판과 온전한 판도 아닙니다. 같은 51개 업무 공간, 같은 142개 테이블의 구조, 같은 16개 언어, 같은 화면입니다. 이 문서는 둘을 실제로 가르는 것이 무엇인지 말합니다 — 그리고 그것은 많지 않습니다.

왜 둘인가#

기업용 제품은 기업이 이미 있는 자리에 설치될 수 있어야 합니다. 어떤 회사는 서버와 systemd와 관리자를 갖고 있고, 어떤 회사는 한 달 4유로짜리 공용 호스팅과 FTP 계정만 갖고 있습니다. Node 판은 앞쪽을, PHP 판은 뒤쪽을 향합니다. 뒤쪽을 돌려보내는 것은 관리 도구가 가장 절실한 절반의 회사를 돌려보내는 일이었을 것입니다.

완전히 같은 것#

항목NodePHP
업무 공간5151
데이터베이스 테이블142142
13111311
화면 언어1616
번역 키27652792
선택 모듈77
웹훅 이벤트88
API 자원99

구조가 같으므로 데이터베이스는 변환 없이 한 판본에서 다른 판본으로 옮겨갑니다. 한쪽을 멈추고 app.sqlite와 파일 폴더를 복사한 뒤 다른 쪽을 켜면 됩니다. 비밀번호도 그대로 통합니다 — 두 판본이 같은 해시 형식을 읽기 때문입니다. 이것이 동등성에 대한 가장 정직한 시험이고, 통과했습니다.

다른 것#

몇몇 주소의 모양#

Node 쪽 531개 경로, PHP 쪽 513개. 이 차이는 부족함이 아닙니다. 같은 기능을 더 간결하게 적었을 뿐입니다.

  • API. Node는 아홉 개 자원을 하나씩 선언합니다 (/api/v1/collaborateurs, /api/v1/services…). PHP는 매개변수 하나짜리 경로로 묶어 제공합니다. 아홉 개 모두 응답하고, 루트가 아홉 개 전부를 알리며, 테스트가 하나씩 불러 이를 증명합니다.
  • 설치. Node는 다섯 단계로 안내하고, PHP는 한 화면과 한 번의 제출로 끝납니다. 묻는 정보는 같은 다섯 가지입니다. 언어, 준비물, 회사, 연차 일수, 관리자 계정.
  • 횡단 권한. Node는 권한마다 경로가 하나씩 있고, PHP는 매개변수를 쓰는 경로 하나 /admin/droits/{flag}입니다.

이 스물여덟 가지 모양의 차이는 기억으로 주장하지 않습니다. tests/test_parity.php 파일이 하나하나 실제로 돌려 봅니다.

주기적인 훑기#

Node는 자체 스케줄러를 지닙니다. 서버가 상시 돌기에 스스로 깨어납니다. PHP는 요청이 있는 동안만 살아 있으므로, 같은 여덟 가지 작업이 호스팅의 예약 작업이 부르는 tools/cron.php를 거칩니다. 같은 업무 코드, 같은 결과, 다른 방아쇠.

날짜#

Node는 V8에 들어 있는 Intl로 날짜를 씁니다. PHP도 intl 확장이 있으면 같습니다 — 같은 ICU 엔진, 글자 하나까지 같은 결과. 확장이 없으면 요일과 달 이름은 번역 사전에서 옵니다. 날짜는 여전히 정확하고 번역되어 있지만, 몇몇 언어에서는 구성 요소의 순서가 다를 수 있습니다.

다를 법한데 다르지 않은 것#

주제두 판본 모두
QR 코드(이중 인증)PHP 쪽은 손으로 쓴 부호기. Node 쪽이 쓰는 라이브러리와 열여섯 가지 글자 길이에서 바이트 단위로 대조해 확인했습니다.
백업 보관 파일양쪽 모두 의존성 없이 만든 tar.gz. 내용도 SHA-256도 같습니다.
IMAP 경리 우편함양쪽 모두 제품 안에 IMAP 클라이언트를 두었습니다.
PDF, CSV, 가져오기제품 안에서 만들며, 나오는 파일도 같습니다.
감사 기록해시 사슬도 같습니다. 한 줄만 바뀌어도 사슬이 끊어지는 것도 양쪽이 같습니다.
HTTP 보안 정책같은 헤더, 일회값을 쓰는 같은 CSP, 없어서는 안 될 자바스크립트가 없다는 점도 같습니다.

무엇을 고를까#

당신의 형편판본
공용 호스팅, FTP 접근, 명령줄 없음PHP — 바로 이 경우를 위한 것
내 서버, systemd, 관리자 한 명Node
둘 중 하나를 이미 다룰 줄 안다그것. 동등성이 이 선택을 되돌릴 수 있게 합니다.
동시에 쓰는 사람이 많다Node — 상시 프로세스 하나, 이미 열려 있는 데이터베이스
망설여진다PHP — 돌볼 부품이 적고, 나중에 Node로 가더라도 결국 파일 복사

동등성은 어떻게 지켜지는가#

그것은 의지가 아니라 검사입니다. 변경이 있을 때마다 네 가지 대조를 거칩니다.

  1. 경로 — 양쪽에서 뽑아 맞대어 봅니다. 어긋남은 반드시 문서로 남은 차이여야 합니다.
  2. 함수 — 각 모듈이 밖으로 내놓는 이름을 모듈별로 맞대어 봅니다.
  3. 구조 — 두 데이터베이스에서 테이블과 열을 읽어 맞대어 봅니다.
  4. 화면 — 두 판본을 나란히 띄우고 진짜 브라우저로 한 쪽씩 훑으며 응답 코드와 구조를 견줍니다.

이 네 번의 훑기는 실제 결함을 찾아냈습니다. 그중 둘은 판본 모두에 있었습니다. 그래서 쓸모가 있습니다. 재지 않는 동등성이란, 잃은 줄도 모르고 잃은 동등성입니다.

여기에 테스트 모음이 더해집니다. Node 쪽 802건, PHP 쪽 572건, 모두 1374건입니다.

Toutadmin 문서 —— 2026-09-13에 생성. 소프트웨어와 분리된 독립 사이트입니다.