Files
Gnuboard7/docs/requirements.md
T
HeuJung ffab451b4a fix(core,installer): dev vendor 설치본의 코어 업데이트 중단 수정 — stale 패키지 매니페스트 3계층
Laravel PackageManifest 는 bootstrap/cache/packages.php 가 있으면 stale 여부를 검사하지
않고 그대로 읽어 등재된 provider 를 new 한다. 코어 업데이트는 Step 6/8 에서 vendor 를
--no-dev 로 교체하지만 그 파일은 Step 11 까지 이전 설치본의 것이 남으므로, 옵션 없는
`composer install` 로 깔린 사이트에서는 Step 10 spawn 자식이 새 vendor 에 없는 provider 를
찾다 부팅 단계에서 죽는다. 부팅 전이라 앱 로그에 흔적이 없고 부모에게는 자식의 비정상
종료로만 보여, 운영자에게는 「Class ... not found」 와 수동 재개 안내만 남는다.
(sir.kr 커뮤니티 제보, 7.0.9 → 7.0.10)

3계층으로 막는다.

 1. 부모 — spawn 직전 PackageManifestCacheHelper::clear
 2. 자식 — bootstrap/app.php 가 G7_UPDATE_IN_PROGRESS 를 보고 스스로 정리한다.
 이미 배포된 7.0.9·7.0.10 부모는 고칠 수 없으므로 그 아래에서 도는 신버전
 자식의 유일한 방어다. App\ 클래스를 참조하지 않고 실패는 무시한다.
 3. 범위 — CoreVersionChecker 의 env APP_VERSION 우선을 CoreUpdateContext 트리 안으로
 축소한다. 업데이트 전에 뜬 artisan serve·큐 워커가 옛 값을 물고 확장을
 incompatible_core 로 끄던 경로를 닫는다(관리자 템플릿이 대상이면 복구 UI
 자체에 도달할 수 없다).

업데이트 트리 판정은 App\Support\CoreUpdateContext 가 단독 소유하고
CoreServiceProvider::isCoreUpdateInProgress 는 위임으로 남는다. bootstrap/app.php 의
복제본은 부팅 전이라 불가피한 예외이며, 두 조건의 동형성을 테스트가 단언한다.

실측 중 드러난 결함 2건을 함께 고쳤다.

 - ConfigCacheHelper::withPreservedContainer 가 파사드 애플리케이션을 되돌리지 않아
 Step 11 이 `Target class [command.tinker] does not exist` 로 실패·롤백했다.
 - updateVersionInEnv 가 프로세스 환경을 갱신하지 않아 config 캐시에 이전 버전이 구워졌다
 (Laravel env 저장소가 불변이라 재부팅으로도 덮이지 않는다).

인스톨러는 재사용 vendor 의 개발용 패키지를 installed.json 으로 감지해 설치 환경 확인
카드·설치 로그로 알리되 설치를 차단하지 않고( 결정 D1), 재사용 경로에서도 컴파일 캐시를
정리한다. 실행되는 명령만이 아니라 실패 시 안내하는 수동 명령까지 --no-dev 로 맞췄다.
코어 업데이트 완료·핸드오프·단독 재개 사후 단계에서 queue:restart 신호를 보낸다(D3).

코어 7.0.10 → 7.0.11.
2026-09-08 09:46:57 +09:00

24 KiB
Raw Blame History

그누보드7 시스템 요구사항 (System Requirements)

그누보드7 설치 및 운영을 위한 서버/클라이언트 요구사항 문서

TL;DR (5초 요약)

1. PHP 8.2+ 필수
2. MySQL 8.0+ 또는 MariaDB 10.3+ (utf8mb4, utf8mb4_unicode_ci)
3. PHP 확장: 필수 16개 + 기능별 선택 17개 (설치 단계 자동 검사는 그중 14개)
4. 하드웨어: 최소 2 vCPU·2GB / 권장 4 vCPU·8GB, 디스크: 설치 검사 기준 500MB, 권장 2GB+
5. 프로덕션: HTTPS 필수(설치는 차단하지 않고 경고), Redis 권장, 큐 워커/스케줄러/Reverb 데몬 필요

1. 서버 요구사항

1.1 운영체제

OS 지원 수준 비고
Linux (Ubuntu 22.04+, CentOS/RHEL 8+) 프로덕션 권장 가장 안정적
Windows 개발 환경 지원 XAMPP/Laragon 등 (§1.3.1, INSTALL.md 참조)

1.2 웹서버

웹서버 버전 비고
Nginx 1.18+ 프로덕션 권장
Apache 2.4+ mod_rewrite 활성화 필수
  • Laravel은 public/index.php를 진입점으로 사용
  • Apache 사용 시 .htaccess 파일이 URL 리라이팅 처리

1.3 PHP

항목 요구사항
버전 8.2 이상 (^8.2)
SAPI FPM (권장) 또는 mod_php (Apache + mod_fcgid 환경은 §1.3.1)
disable_functions exec·proc_open·shell_exec 허용 필요 (설치·코어 업데이트가 자식 프로세스를 실행)
웹 ↔ CLI 버전 메이저·마이너 버전 일치 권장 (설치 프로그램이 확인 후 불일치 시 안내)
OPcache 활성화 권장 (성능 — 미활성화 시 설치는 진행되고 안내만 표시)

1.3.1 Apache + mod_fcgid 환경 추가 설정 (권장)

PHP 8.5 NTS(Windows) 등 mod_php DLL 이 제공되지 않는 빌드를 Apache 와 결합할 때 PHP 가 php-cgi.exe 기반 mod_fcgid 로 구동된다. 이 SAPI 의 default 출력 버퍼(FcgidOutputBufferSize 64KB) 가 인스톨러 SSE 스트림과 폴링 응답을 스크립트 종료 시점까지 보관하여 진행 상황이 화면에 실시간 반영되지 않는다.

Apache fcgid.conf 에 다음 1줄을 추가 후 Apache 재시작:

FcgidOutputBufferSize 0

미설정 시:

  • 인스톨러 SSE 호환성 사전 체크가 buffered 환경으로 자동 판정되어 폴링 모드로 fallback
  • 폴링 모드 응답은 코드 레벨 64KB padding 워크어라운드로 동작은 보장되나, SSE 모드가 아닌 1초 간격 폴링으로 진행 상황이 표시됨

1.4 PHP 확장 모듈

필수 16개 + 기능별 선택 17개.

구분 모듈 용도
필수 ctype 문자 타입 검사
필수 curl HTTP 클라이언트
필수 dom XML/HTML DOM 처리 (메일 본문 인라인 CSS 등)
필수 fileinfo MIME 타입 감지
필수 filter 데이터 필터링/검증
필수 hash 해시 함수
필수 json JSON 인코딩/디코딩
필수 mbstring 멀티바이트 문자열 처리
필수 openssl 암호화/복호화 (AES-256-CBC)
필수 pcre 정규 표현식
필수 pdo 데이터베이스 추상화
필수 pdo_mysql MySQL/MariaDB PDO 드라이버
필수 session 세션 관리
필수 tokenizer PHP 토큰 파싱
필수 xml XML 파서
필수 zip 확장·언어팩·코어 업데이트 패키지의 압축 해제
선택 gd 이미지 처리 (썸네일, 리사이징) — imagick 과 택일
선택 imagick 고급 이미지 처리 (ImageMagick) — gd 와 택일
선택 exif 이미지 메타데이터 읽기
선택 intl 국제화 (다국어 날짜/숫자 포맷)
선택 bcmath 정밀 수학 연산 (금액 계산 등)
선택 redis Redis 캐시/세션/큐 드라이버 (predis 동봉 — 확장 없이도 사용 가능)
선택 memcached Memcached 캐시 드라이버
선택 pcntl 큐 워커 전체 기능 및 콘솔 시그널 처리
선택 posix 큐 워커 전체 기능 및 코어 업데이트의 파일 소유자 확인
선택 maxminddb GeoIP 데이터베이스 조회 (접속 국가·타임존 감지)
선택 simplexml AWS SDK(S3/SES/SQS) 응답 파싱
선택 libxml XML 파싱 기반 라이브러리 (dom·simplexml 의 토대)
선택 sodium 최신 암호화 라이브러리
선택 phar Phar 아카이브 (Composer 실행)
선택 xmlwriter XML 문서 생성
선택 zlib 데이터 압축 (gzip 응답 압축)
선택 ldap LDAP 연동 확장을 사용할 때 (코어 기본 기능은 사용하지 않음)

설치 프로그램은 위 필수 확장 중 14개(pdo, mbstring, openssl, tokenizer, xml, ctype, json, fileinfo, curl, dom, filter, hash, pcre, session)를 설치 단계에서 자동 검사하고 하나라도 없으면 진행을 막는다. pdo_mysql 과 zip 은 자동 검사 대상이 아니지만 각각 데이터베이스 접속과 확장·언어팩 설치에 반드시 필요하므로 필수로 분류한다. 선택 확장은 해당 기능을 사용하는 시점에 필요하며, 자동 검사 항목과 운영자가 직접 확인해야 하는 항목의 전체 구분은 §9 를 참조한다.

1.5 PHP 설정 권장값 (php.ini)

설정 최소값 권장값 비고
memory_limit 128M 256M+ 이미지 처리 시 높은 메모리 필요
upload_max_filesize 10M 20M+ 첨부파일 업로드 크기
post_max_size 12M 25M+ upload_max_filesize보다 커야 함
max_execution_time 60 120+ 대량 데이터 처리 시
max_input_vars 1000 5000+ 복잡한 폼 데이터 처리

1.6 파일 권한 및 umask 운영 방식

G7 은 배포 환경에 따라 세 가지 대표 운영 방식을 지원한다. 본 섹션은 각 방식에서 storage/ 등 런타임 쓰기 대상 디렉토리의 권한 설정과 umask 권장값을 정리한다.

운영 방식 분류

운영 방식 소유자 : 그룹 권장 퍼미션 전형적 환경
A. 그룹 공유 사용자 : www-data (서로 다른 UID) drwxrwxr-x (0775) + g+w SSH 로그인 사용자와 php-fpm 프로세스가 UID 가 다르고 www-data 같은 공용 그룹으로 파일 쓰기 권한을 공유하는 일반적인 Ubuntu/Debian 구성
B. 단일 소유자 사용자 : 사용자 또는 www-data : www-data (동일 UID) drwxr-xr-x (0755) suexec / mod_userdir / 단순 Apache 환경에서 파일 소유자·웹서버 프로세스가 같은 UID
C. suexec / cPanel 계정별 UID 격리 drwxr-xr-x (0755) 공유 호스팅, 계정마다 독립 UID/GID

storage/ 디렉토리의 실제 퍼미션을 확인:

stat -c '%a %U:%G' storage

권장 설정

방식 A (그룹 공유):

# 인스톨러 완료 후 운영자가 1회 실행
sudo chown -R $USER:www-data storage bootstrap/cache vendor modules plugins templates public/build
sudo chmod -R 775 storage bootstrap/cache vendor modules plugins templates public/build

추가로 php-fpm / systemd 의 umask 를 002 로 설정하면 cron·composer·수동 SSH artisan 등 외부 프로세스도 동일 권한으로 파일을 만든다.

설정 지점 값 위치 예시
php-fpm pool umask = 002 /etc/php/8.x/fpm/pool.d/www.conf
systemd unit UMask=0002 /lib/systemd/system/php8.x-fpm.service [Service] 섹션

시스템 레벨 설정이 없어도 코어 부팅 시 storage/ 의 g+w 여부를 감지하여 프로세스 umask 를 자동으로 0002 로 동조하므로 Laravel 부팅 경로를 거치는 파일 생성은 정상 동작한다 (public/index.php, artisan, queue worker, scheduler 등). 시스템 레벨 설정은 부팅 경로를 거치지 않는 외부 프로세스 대응용 권장 사항.

방식 B/C (단일 소유자):

sudo chmod -R 755 storage bootstrap/cache vendor modules plugins templates public/build

그룹 쓰기 비트가 없으므로 코어 자동 umask 동조는 발동하지 않는다 (운영자 의도 존중). 추가 설정 불필요.

인스톨러가 안내하는 기본 권한

인스톨러의 기본 안내 명령은 보수적으로 chmod -R 755 를 제시한다. 방식 A 로 운영하려면 인스톨 완료 후 775 로 재조정 + 소유자/그룹을 본인 계정 + www-data 로 변경. 인스톨러는 chmod 를 직접 호출하지 않으므로 운영자가 쉘에서 1회 실행.

1.7 개발/빌드 도구

도구 버전 필요한 경우
Node.js 20 이상 프론트엔드 소스를 직접 빌드할 때
Composer 2.x Composer 로 의존성을 설치할 때, 확장이 외부 패키지를 요구할 때

배포본에는 빌드 산출물과 vendor 디렉토리가 동봉되어 있으므로 일반적인 운영 설치에는 두 도구 모두 필요하지 않다. 소스에서 직접 빌드하거나 개발 환경을 구성할 때, 또는 Composer 설치 방식을 선택할 때만 필요하다.

Composer 로 직접 설치한다면 composer install --no-dev --optimize-autoloader 를 쓴다. 옵션 없는 composer install 은 개발용 패키지까지 설치하며, 그 상태로 운영하면 이후 코어 업데이트가 vendor 를 교체할 때 이전 패키지 목록 캐시와 어긋나 부팅이 깨진다. 개발용 패키지가 섞여 있으면 설치 마법사의 「설치 환경 확인」 단계가 경고한다.


2. 데이터베이스

2.1 지원 DBMS

DBMS 최소 버전 비고
MySQL 8.0 이상 프로덕션 권장
MariaDB 10.3 이상 MySQL 호환 대안

2.2 설정 요구사항

항목 값 비고
charset utf8mb4 이모지 등 4바이트 문자 지원
collation utf8mb4_unicode_ci 기본값이며 .env의 DB_COLLATION으로 변경 가능
테이블 접두어 g7_ (기본값) .env에서 DB_PREFIX로 변경 가능 (최대 6자 — 자동 생성 인덱스명이 MySQL 식별자 한도 64자를 넘지 않도록 제한)

선택 기능:

  • Write/Read 분리: Master-Replica 구성 지원 (DB_WRITE_* / DB_READ_* 환경 변수)

3. 하드웨어 사양

3.1 CPU · 메모리

수준 CPU 메모리 상정 환경
최소 2 vCPU 2GB 설치·기능 확인용. 동시 접속이 거의 없는 개발/검토 환경
권장 4 vCPU 8GB 웹서버 + PHP-FPM + MySQL + Redis 를 한 대에 올린 소규모 운영
분리 구성 웹 2 vCPU / DB 2 vCPU 각 4GB 이상 트래픽이 늘면 DB 를 먼저 분리

메모리 배분은 어떤 구성 요소를 같은 서버에 올렸는지에 따라 달라진다. 한 대에 모두 올린 경우 MySQL 의 innodb_buffer_pool_size 가 전체 메모리의 절반을 넘지 않도록 두고, PHP-FPM 자식 프로세스 수 × memory_limit 가 남은 메모리를 넘지 않는지 확인한다.

위 수치는 코어와 번들 확장을 기본 설정으로 운영할 때의 출발점이다. 실제 필요량은 데이터 규모·동시 접속·설치한 확장에 따라 달라지므로, 운영 전 대상 트래픽으로 직접 측정할 것을 권한다(php artisan g7:bench 로 목록·화면·쓰기·배치 4축을 잰다).

이 수치의 근거

  • 권장 4 vCPU · 8GB — 사용자가 4 vCPU · 8GB 가상머신에서 수행한 운영 환경 측정 보고 (gnuboard/g7#82)에서 코어와 번들 확장을 함께 올린 구성이 동작한 사양이다. 같은 보고에서 대량 데이터의 검색·목록 조회는 이 사양에서도 메모리 압박이 관측되었으므로, "이 사양이면 어떤 규모든 충분하다" 는 뜻이 아니라 한 대 구성의 하한선으로 읽어야 한다.
  • 최소 2 vCPU · 2GB — 설치와 기능 확인이 가능한 수준으로, 위 보고의 측정 대상이 아니다. 동시 접속이 있는 운영에는 적합하지 않다.
  • 분리 구성 — 위 보고에서 부하가 먼저 걸린 지점이 데이터베이스였다는 관측에 따른 순서 제안이다. 분리 시점의 트래픽 임계값은 측정하지 않았다.

우리가 직접 측정한 범위는 쿼리 실행 횟수와 조회 구조이며, 특정 사양에서의 동시 접속 한계나 응답 시간은 측정하지 않았다. 그 값이 필요하면 대상 환경에서 직접 재야 한다.

3.2 디스크 용량

수준 용량 포함 범위
최소 500MB (설치 프로그램 검사 기준) 설치가 진행되기 위한 여유 공간의 하한. 코어 + 기본 확장의 실사용은 약 700MB 이므로 여유 확보 권장
권장 2GB 이상 코어 + 확장 + 첨부파일 + 캐시 + 로그
  • 사용자 업로드 파일, 로그, 캐시 등은 별도 용량 산정 필요
  • storage/ 디렉토리에 쓰기 권한 필수

4. 선택적 서비스 (프로덕션 권장)

4.1 Redis

항목 요구사항 비고
Redis 6.0 이상 캐시, 세션, 큐 드라이버로 사용 가능
  • 프로덕션 환경에서 캐시/세션/큐 성능 향상을 위해 권장
  • PHP redis 확장 필요 (phpredis)

4.2 클라우드 서비스 (AWS)

서비스 용도 필수 여부
AWS S3 파일 스토리지 (클라우드) 선택
AWS SES 이메일 발송 선택
AWS SQS 큐 처리 (대규모 트래픽) 선택
  • aws/aws-sdk-php · league/flysystem-aws-s3-v3 패키지 포함됨 (S3 및 S3 호환 스토리지 — Cloudflare R2, MinIO 등 — 를 별도 설치 없이 사용 가능)
  • predis/predis 패키지 포함됨 (phpredis PHP 확장이 없는 서버에서도 Redis 드라이버 사용 가능)

4.3 메일 서비스

서비스 비고
Mailgun symfony/mailgun-mailer 패키지 포함됨
AWS SES 위 AWS 서비스 참조
SMTP 자체 SMTP 서버 사용 가능
  • 이메일 발송이 필요 없는 경우 MAIL_MAILER=log로 설정

4.4 WebSocket (Laravel Reverb)

항목 요구사항 비고
Laravel Reverb 포함됨 (laravel/reverb ^1.6) 자체 호스팅 WebSocket 서버
기본 포트 8080 REVERB_PORT로 변경 가능
  • 실시간 알림, 브로드캐스팅 기능 사용 시 필요
  • 대안: Pusher 서비스 (pusher-js 클라이언트 포함됨)

5. 보안

5.1 SSL/TLS

환경 요구사항
프로덕션 HTTPS 필수
앞단 종단 구성 (ALB·CloudFront·Cloudflare·nginx·ngrok) HTTPS + .env 의 TRUSTED_PROXIES 지정
  • 설치 단계에서는 HTTPS 여부를 경고로 안내하며 설치를 차단하지 않는다. 정책상 필수라는 선언은 유지하되, 자동으로 강제되지는 않으므로 운영자가 직접 확인해야 한다
  • Laravel Reverb WebSocket도 wss:// 프로토콜 사용 (REVERB_SCHEME=https)
  • Sanctum 세션 인증 시 SESSION_SECURE_COOKIE=true 설정 권장. 미설정 시 요청 스킴으로 자동 판정되므로, 앞단 종단 구성에서는 TRUSTED_PROXIES 가 지정되어야 그 판정이 맞는다
  • TLS 를 앞단에서 종단하고 앱에는 HTTP 로 전달하는 구성에서는 APP_URL 을 https:// 로 두는 것만으로 부족하다. 신뢰할 프록시를 지정하지 않으면 화면 표시·결제 통보 수신·IP 기록이 어긋난다 — backend/reverse-proxy.md

5.2 의존성 보안 버전

의존성 취약점은 php artisan security:audit-dependencies 로 전수 점검한다. 저장소의 모든 잠금파일(npm · composer)을 순회하며, 취약점이 있으면 비-0 으로 종료한다.

메이저 상향을 보류한 패키지는 사유와 최소 보안 버전을 아래에 남긴다. 기록 없는 보류는 그 지점이 잊히는 것과 같다.

패키지 현재 보류 사유 최소 보안 버전
guzzlehttp/guzzle 7.15.x 8.x 는 aws/aws-sdk-php · laravel/framework · pusher/pusher-php-server 의 제약이 막는다. 상위 패키지가 8.x 를 지원하기 전에는 올릴 수 없다 7.15.2
ckeditor5 43.3.1 다섯 개 메이저를 건너뛰는 상향이라 초기화 설정·툴바 재구성과 글쓰기/이미지 업로드 전 경로 재검수를 수반한다. 별도 작업으로 분리한다. CDN 의존은 이미 자체 서빙으로 해소되어 있다 상향 작업에서 확정
monaco-editor 내장 dompurify 3.4.8 monaco 가 자기 배포 번들에 정화기를 인라인하므로 소비자가 버전을 고를 수 없다. 배포된 최신본(0.56.0)이 담은 것이 3.4.8 이다. 상류가 새 정화기를 담은 판을 내면 함께 올린다 3.4.13 (상류 대기)
vite (확장 빌드 툴체인) 5.4.x 8.x 는 메이저 상향이며 확장 스물넷의 빌드 설정을 동시에 옮겨야 한다. 빌드 도구라 배포 산출물에 실리지 않아 최종 사용자 노출면이 없다 8.2.2
vitest (확장 테스트 툴체인) 2.1.x 4.x 는 메이저 상향이며 테스트 API 변경으로 확장 열여덟의 테스트를 동시에 손봐야 한다. 테스트 실행기 전용이라 배포·런타임 노출면이 없다 4.1.11

동봉(vendored) 제3자 자산은 어떤 잠금파일에도 없어 감사 도구가 원리상 볼 수 없다. 점검 명령이 그 목록을 함께 출력하므로 사람이 확인한다.


6. 프로덕션 데몬 프로세스

프로덕션 환경에서 상시 실행해야 하는 프로세스:

프로세스 명령어 관리 도구
큐 워커 php artisan queue:work Supervisor 등
스케줄러 php artisan schedule:run cron (매분 실행)
WebSocket php artisan reverb:start Supervisor 등
# cron 예시 (스케줄러) — 웹 서버 계정으로 실행 (root crontab 에 그대로 두면 캐시 파일이 root 소유가 된다)
* * * * * cd /path/to/g7 && sudo -u www-data php artisan schedule:run >> /dev/null 2>&1

php artisan 명령과 cron 은 웹 서버 실행 계정으로 실행한다 — 캐시·병합 번들·임시 파일이 다른 계정 소유로 남으면 이후 웹 요청이 Permission denied 로 실패한다. 예외는 소유권 복원이 내장된 core:update 만이다. 상세: INSTALL.md 「명령줄·cron 실행 계정」.


7. 지원 브라우저

브라우저 최소 지원 버전 검증 방식
Chrome / Edge 111 이상 자동 브라우저 테스트(Chromium)로 상시 검증
Safari (macOS / iOS) 16.4 이상 호환 범위 기준 지원 (상시 자동 테스트 대상 아님, 실기기 검증 미수행)
Firefox 128 이상 호환 범위 기준 지원 (상시 자동 테스트 대상 아님)
  • 지원 하한은 프론트엔드 핵심 의존성(React 19, Tailwind CSS 4)의 공식 지원 브라우저 범위를 따른다. 위 세 버전은 2026-08 현재 Tailwind CSS 4 의 공식 하한이며(@property 등 CSS 기능이 결정한다), 해당 의존성 버전이 변경되면 이 기준도 함께 재검토한다
  • 하한 미만 브라우저에서도 화면 표시와 기본 이용은 가능하도록 유지한다. 최신 CSS 기능을 해석하지 못해 색상·간격 등 스타일이 일부 깨질 수 있으나, 그것이 이용 불가로 이어지지 않도록 한다. 이를 위해 배포되는 JavaScript 산출물에는 하한을 넘는 문법·API 를 넣지 않으며, 특히 부팅에 필요한 번들에는 다운레벨이 불가능한 정규식 리터럴 문법(lookbehind, v 플래그) 을 하한과 같은 버전이라도 사용하지 않는다 — 이 번들이 파싱되지 않으면 사이트가 통째로 뜨지 않기 때문이다
  • 브라우저가 화면 구성 스크립트를 끝내 실행하지 못하는 경우에는 백지 대신 그 사유를 밝히는 안내 화면을 표시한다
  • 자동 테스트는 테스트 도구에 포함된 단일 브라우저 빌드로 수행하므로 특정 버전 목록(예: "최신 N개 버전")을 상시 보장하지 않는다
  • Internet Explorer 미지원

7-1. 오프라인·폐쇄망 동작 범위

화면 구동에 필요한 자산(아이콘·글꼴·편집기·코드 편집기·국기 아이콘·이미지 압축)은 모두 설치본에 함께 담겨 사이트 자신의 서버에서 제공됩니다. 외부 인터넷에 나가지 못하는 환경에서도 관리자·사용자 화면이 정상 동작합니다.

외부 연결이 필요한 유일한 기능은 주소 검색(우편번호)입니다. 이 기능은 라이브러리가 아니라 Daum 이 운영하는 서비스 SDK 를 쓰므로, 자체 호스팅해도 동작하지 않습니다. 연결하지 못하는 환경에서는 우편번호·주소를 직접 입력할 수 있으며 안내가 표시됩니다.

운영자가 별도로 설정한 외부 서비스(검색엔진 분석 도구 등)는 이 범위와 무관하게 그 설정을 따릅니다.

8. 호스팅 환경별 제한사항

8.1 공유 호스팅 (Shared Hosting)

공유 호스팅에서도 그누보드7 설치는 가능하지만, 호스팅 업체에 따라 아래 기능이 제한될 수 있습니다.

제한될 수 있는 기능:

제한 항목 영향받는 기능 대안
데몬 프로세스 (Supervisor) 큐 워커 상시 실행 불가 QUEUE_CONNECTION=sync (동기 처리)
cron 최소 간격 스케줄러 분 단위 실행 제한 호스팅 cPanel cron (지원 간격 확인)
PHP 확장 제한 (pcntl, posix, redis, imagick 등) 큐 워커, 프로세스 관리, Redis 캐시, 이미지 처리 파일/DB 캐시, GD 라이브러리
PHP 설정 변경 (memory_limit, max_execution_time 등) 대용량 파일 업로드, 이미지 처리 호스팅 관리자에게 변경 요청
커스텀 포트 (80/443 외) Reverb WebSocket (기본 8080 포트) Pusher 등 외부 WebSocket 서비스
파일 권한 (symlink 등) storage/ 심볼릭 링크 php artisan storage:link 대체 방식 확인
디스크 용량 첨부파일, 로그, 캐시 누적 플랜별 용량 확인, 정기 정리

9. 요구사항 검증 수준

이 문서의 항목은 자동으로 확인되는 것과 운영자가 직접 확인해야 하는 것으로 나뉜다. "요구사항" 이라는 표현이 곧 "설치 프로그램이 검사한다" 를 뜻하지는 않는다.

9.1 설치 프로그램이 자동 검사

항목 기준 미충족 시
PHP 버전 8.2 이상 설치 차단
PHP 확장 §1.4 필수 확장 중 14개 설치 차단
차단 함수 exec·proc_open·shell_exec 사용 가능 설치 차단
디스크 여유 공간 500MB 설치 차단
디렉토리 쓰기 권한 storage/, bootstrap/cache, vendor, 확장 디렉토리 등 설치 차단
.env 파일 존재 + 쓰기 가능 설치 차단
데이터베이스 접속 접속 성공 여부 다음 단계 진행 불가
DB 테이블 접두어 최대 6자 입력 거부
웹 ↔ CLI PHP 버전 메이저·마이너 일치 안내만 (설치 진행)
OPcache 활성화 여부 안내만 (설치 진행)
HTTPS 사용 여부 안내만 (설치 진행)

gd·imagick·redis·intl·zlib 은 설치 단계에서 상태를 표시하지만 설치를 막지 않는다.

9.2 운영자 확인 필요 — 자동 검사 없음

항목 문서상의 기준 확인 방법
데이터베이스 버전 MySQL 8.0+ / MariaDB 10.3+ SELECT VERSION()
DB charset·collation utf8mb4 / utf8mb4_unicode_ci 접속 후 스키마 확인
php.ini 값 §1.5 의 5개 항목 php -i 또는 관리자 정보 화면
CPU·메모리 §3.1 서버 사양 확인
웹서버 종류·버전 Nginx 1.18+ / Apache 2.4+ 서버 설정 확인
mod_rewrite Apache 사용 시 활성화 서버 설정 확인
Redis 버전 6.0 이상 redis-server --version
Node.js·Composer 버전 §1.7 소스 빌드·Composer 설치를 할 때만 해당
지원 브라우저 §7 자동 브라우저 테스트는 Chromium 만 상시 수행
데몬 프로세스 가동 §6 의 3종 프로세스 관리 도구에서 확인
§1.4 의 선택 확장 사용하는 기능에 따라 관리자 정보 화면의 확장 목록