설치법

ST 서버·웹·앱 설치방법

2026-09-27. ST 서버·웹·휴대폰·워치 설치 안내입니다.

1. 서버 위치와 접속 주소 정하기

업로드 위치웹 접속 주소 예시
/home/j2box.net/public_htmlhttps://j2box.net/
/home/j2box.net/public_html/sthttps://j2box.net/st/
/home/j2box.net/public_html/st1https://j2box.net/st1/
/home/j2box.net/public_html/st2https://j2box.net/st2/
/home/j2box.net/public_html/st3https://j2box.net/st3/

폴더 이름은 고정되어 있지 않습니다. 영문·숫자·밑줄·하이픈으로 된 폴더와 중첩 경로를 지원합니다. 여러 설치를 독립 운영하려면 설치별 DB와 암호화 키를 따로 만드세요. 로그인 쿠키는 설치 경로별로 구분됩니다. 설치 폴더를 옮기면 앱 주소도 변경하고 다시 로그인합니다.

DB 이름과 테이블 이름: 폴더명에 따른 테이블 접두사는 없습니다. 각 설치의 config/local.php에 지정한 DB 안에 users, accounts, documents, shared_documents 등 동일한 테이블명을 만듭니다. 예를 들어 루트는 j2box_main, st는 j2box_st, st1은 j2box_st1, st2는 j2box_st2처럼 서로 다른 DB 이름을 지정하세요. 이 이름들은 예시이며 자동 생성되지 않습니다. 같은 DB를 지정하면 회원·개인 기록·공통 시세가 모두 같은 테이블을 사용하며, 쿠키 경로 분리는 DB 격리를 대신하지 않습니다. 같은 DB에 서로 다른 암호화 키를 쓰면 기존 암호문을 읽지 못합니다. 별도 DB 설치끼리는 공통 시세 캐시도 공유하지 않으므로 설치 수만큼 별도 수집이 발생합니다.

루트와 하위 폴더에 ST를 동시에 설치할 수 있도록 .htaccess가 하위 설치의 공개 경로를 넘겨주게 구성되어 있습니다. 각 설치의 .htaccess도 빠짐없이 올리세요. src, config, storage, tools, bin, android-webview, source, development는 내부 전용 이름이므로 설치 폴더명으로 쓰지 않습니다. 실제 Apache의 AllowOverride 및 상위 규칙 적용은 업로드 후 확인해야 합니다.

두 주소에서 같은 회원 자료를 볼 때

예: /st/를 먼저 설치하고 /에도 같은 서비스를 연결할 수 있습니다. 같은 MySQL 서버·DB 이름·테이블과 같은 master_key를 사용하고 같은 회원 ID로 로그인하면 매수 대기, 연금·ISA, 계좌 기록, 알림, 게시판·이미지를 함께 봅니다. 로그인 쿠키는 경로별이므로 각 주소에서 로그인할 수 있습니다. 같은 회원의 로그아웃·차단은 다른 주소의 세션과 기기도 무효화합니다.

두 번째 위치에서도 서비스 주소의 최초 DB 연결 화면에 같은 DB 정보, 기존 관리자 아이디·비밀번호, 기존 설치 config/local.php의 master_key를 입력합니다. 새 관리자나 회원 테이블을 만들지 않고 기존 테이블을 연결합니다. 암호화 키가 다르면 연결을 거부합니다. 구버전 설치는 먼저 최신 파일로 업데이트하고 메인에 접속해 키 확인 정보를 생성하세요. 키 교체 이력이 있다면 기존 설정 파일 전체를 안전하게 복사해 previous_master_keys도 일치시키는 방법을 사용하세요.

회원 자료를 공유하는 설치는 동일한 코드 버전·공통 API 설정을 사용하고 공통 예약 수집 작업은 한 설치에서만 실행하세요. 테이블 이름에 st, st1 같은 구분자는 붙지 않습니다.

2. 필요한 서버 환경

대상 서버는 PHP 5.4.16(64비트), MySQL 5.6.22, Apache 2.4.20입니다. 웹 PHP에 pdo_mysql, curl, openssl, zip, iconv와 GMP(또는 BCMath)가 있어야 합니다. Sodium은 신규 설치에 필요하지 않습니다. 전달된 CLI 확장 목록에는 pdo_mysql이 없습니다. setup.php의 현재 웹 PHP 확인에서 확장이 사용 가능한지 먼저 확인하세요. 없으면 DB 설치는 진행할 수 없으며 프로그램이 서버 설정을 자동으로 바꾸지 않습니다.

호스팅 관리자에게 PHP와 MySQL 버전, HTTPS 인증서, 설치 폴더의 AllowOverride All 허용 여부를 확인해 달라고 요청하세요. .htaccess가 무시되는 환경에서는 소스와 설정 차단이 작동하지 않으므로 먼저 동일한 규칙을 서버 설정에 적용해야 합니다.

3. 파일 올리기

  1. 먼저 기존 서버 자료와 DB를 백업합니다.
  2. FTP 업로드 안내에 따라 st 루트의 웹 파일을 서버의 같은 상대 위치에 올립니다. ZIP과 public 폴더는 사용하지 않습니다.
  3. assets, src, config, bin, tools, storage, st_bbs와 루트 PHP·.htaccess·설치방법.md·ST_웹_앱_사용자_매뉴얼.md를 올립니다. 앱 다운로드와 안내를 위해 ST-Alerts.apk 및 Watch의 ST-Watch.apk, ST-Watch-Install-Tools.zip, 워치앱_설치방법.md, .htaccess도 올립니다.
  4. android-webview 전체와 Watch/source는 업로드하지 않습니다. 로컬 DB·설정·테스트·빌드 캐시는 android-webview/development에 분리되어 있습니다.
  5. 기존 서버의 config/local.php와 storage 내용은 덮어 초기화하거나 삭제하지 않습니다.

4. 최초 설정과 관리자 설치

  1. 업로드 후 https://j2box.net/st/ 에 접속합니다. 미설치이면 DB 연결 화면이 자동으로 열립니다. 터미널 명령이나 설치키 입력은 필요하지 않습니다.
  2. 웹 PHP 확인에서 pdo_mysql 사용 가능 여부를 확인합니다. 없으면 연결할 수 없으며 프로그램이 서버 설정을 변경하지 않습니다.
  3. 미리 준비한 빈 ST 전용 DB 이름·전용 DB 사용자·DB 비밀번호를 입력합니다. DB 주소는 127.0.0.1, 기본 포트는 3306입니다. 기존 업무 DB나 root 계정은 사용하지 않습니다.
  4. 관리자 아이디와 비밀번호(10~72바이트)를 입력하고 ‘DB 연결 · 설치 후 시작’을 누릅니다.
  5. 연결 확인 후 config/local.php를 저장하고 ST·게시판 테이블을 생성합니다. 완료되면 서비스 화면으로 이동하며 다음 접속부터 연결 화면을 건너뜁니다.
  6. 기존 ST DB에 연결할 때만 추가 항목을 열어 기존 master_key와 기존 관리자 계정을 입력합니다. 설정과 암호화 키는 공개 채팅에 붙여 넣지 마세요.

설정·임시 파일은 ST 내부 config와 storage에만 기록하며 웹 PHP의 쓰기 권한이 필요합니다. 기존 DB 연결 장애는 오류로 표시하고 재설치·초기화하지 않습니다. 서버의 config/local.php와 storage는 FTP로 덮어쓰거나 삭제하지 않습니다.

게시판 운영

메인 타이틀 아래의 커뮤니티 게시판을 누릅니다. 설치 경로 아래 st_bbs/에서 작동합니다. 글·댓글 열람은 공개이며, 작성은 로그인과 자동 입력 방지 확인이 필요합니다. 관리자는 게시판 추가·IP 차단·단어 필터를 관리하고, 작성자 ID를 눌러 주식등록수 증감과 ID 차단(글삭제)을 실행합니다. 이미지도 DB 안에 저장되므로 DB 백업에 포함됩니다.

애플리케이션은 IP별 조회 180회/분, 쓰기 30회/분, 회원별 쓰기 20회/분, CSRF·출처 검사, 일회용 문제, 숨김 입력 검사, 용량 제한을 적용합니다. 같은 공유기 이용자는 IP 한도를 나눠 씁니다. 대규모 DDoS는 이 코드만으로 막을 수 없으므로 호스팅의 방화벽·요청 제한을 함께 설정하세요. 프록시 환경에서는 서버가 검증된 실제 접속 IP를 REMOTE_ADDR에 제공하도록 설정해야 하며, 임의의 전달 헤더를 신뢰하지 않습니다.

5. 공통 시세 API와 개인 계좌 API

config/local.php의 market_api.app_key와 market_api.app_secret에 운영자가 공통 시세 수집용으로 준비한 키를 설정합니다. 개인 회원의 키를 자동으로 가져다 쓰지 않습니다. 운영자가 API 사용 범위와 실제 연결을 확인한 뒤 공통 API 네트워크 사용 설정을 활성화합니다. 실제 주문은 계속 차단됩니다.

일반 회원은 화면의 API 연결에서 본인 위탁 계좌 키를 저장합니다. 개인 잔고·원장·체결은 이 키로 조회하고 회원별 DB에 저장합니다. 공통 시세에는 이 키가 필요하지 않습니다.

웹 요청은 공통 캐시가 유효하면 그대로 읽고, 만료된 동일 API 요청은 공통 잠금 안에서 한 번 수집합니다. 실패는 30초간 재시도를 공유합니다. 일반 시세 응답 캐시는 10초, 순위·수급 응답은 300초이며 화면별 장중·휴장·마감 정책이 추가로 적용됩니다. API가 실패한 값을 새 정상 시세로 위장하지 않습니다.

6. 화면을 닫아도 수집하기

market_worker_enabled를 true로 설정한 뒤 서버의 작업 예약 도구에서 다음 명령을 실행하도록 등록합니다. 먼저 수동 실행으로 정상 동작을 확인합니다. 시작 주기는 1분이며 실제 API 한도에 맞춰 운영자가 조정합니다.

php /home/j2box.net/public_html/st/bin/market.php indices
php /home/j2box.net/public_html/st/bin/market.php night
php /home/j2box.net/public_html/st/bin/market.php watch
php /home/j2box.net/public_html/st/bin/market.php flows
php /home/j2box.net/public_html/st/bin/market.php report

공통 작업은 회원 전체를 돌지 않고 한 번 수행합니다. portfolio·executions와 개인 감시 작업은 별도 회원 작업입니다. 이 문서는 작업을 자동 등록하지 않습니다.

7. 휴대폰과 워치

홍보 페이지는 main/index.php만 도메인 루트의 index.php로 올립니다. 루트의 기존 .htaccess는 변경하지 않습니다. ST용 .htaccess는 /st/.htaccess에만 올립니다. 실제 서비스는 /st/에 설치할 예정이며 홍보 페이지의 서비스 경로는 파일 맨 위 $servicePath에서 변경할 수 있습니다. 폰 APK는 /st/ST-Alerts.apk, 워치 APK와 Windows 디버깅 설치 도구 ZIP은 /st/Watch/에 있습니다. main 폴더의 업로드안내.md에 파일별 배치가 정리되어 있습니다.

휴대폰은 ST 웹·앱 매뉴얼의 마지막 절을 따릅니다. 워치는 워치 설치방법을 따릅니다. APK는 개발 서명이며 실제 기기 설치·API 연동 검증을 마친 운영 배포본으로 표시하지 않습니다.

8. 확인과 문제 해결

메인 화면이 열리고 개인 로그인·저장·재로그인 후 복원이 되는지 확인합니다. src/Broker.php, config/local.php, .runtime/, android-webview/를 주소로 입력했을 때 내용이 보이면 안 됩니다. HTTPS가 아닌 주소는 앱이 거부합니다. 폴더 변경 후 404라면 앱에 입력한 전체 주소와 파일을 올린 위치를 확인합니다. 공통 시세 미확보는 운영자 market_api 설정과 마지막 수집 시각을, 개인 잔고 오류는 회원 API 연결을 확인합니다. 서로 다른 문제입니다.

업로드 후 서버 점검 도구

SSH를 사용할 수 있으면 ST를 설치한 폴더에서 `php tools/preflight.php`를 실행합니다. PHP 확장, 필수 파일, DB 연결과 테이블을 읽기 전용으로 점검하며 API 호출이나 주문은 하지 않습니다. 실제 HTTPS·Apache 접근 제한·시세 API와 기기 수신은 별도 확인합니다.

이번 버전의 게시판 반응·조회·알림 테이블은 최초 설치 또는 기존 설치의 첫 요청에서 자동 보완됩니다. 기존 DB 업데이트 전에는 백업을 보관하세요. 폰·워치 APK는 0.2.2로 함께 갱신합니다.

서버의 기존 자료 보호

현재 배치는 /home/j2box.net/public_html/st/ 내부만 사용합니다. 신규 설치에는 비어 있는 ST 전용 DB와 그 DB에만 권한이 있는 전용 계정을 사용하세요. root나 기존 업무 DB를 입력하지 마세요. 프로그램은 DB 자체를 만들거나 서버 설정을 바꾸지 않습니다. 기존 ST 연결은 설치 표식·관리자 인증·암호화 키를 확인합니다. 이전 PHP 8용 DB를 자동 변환하거나 초기화하지 않습니다.

일반 로그는 꺼져 있습니다. 계좌 내역과 게시글은 자동 삭제하지 않습니다. 만료된 인증/요청 제한/보안 감사 자료는 접속이 있을 때 제한된 양씩 정리하며 방문 통계는 최근 한 달 표시에 필요한 기간만 유지합니다.