로그인 상태를 확인하는 중입니다…

contextBio 내부 문서 · 전체관리자 · 앱관리자

관리자 로그인이 필요합니다

계정 페이지로 이동합니다. 로그인하면 보던 자리로 그대로 돌아옵니다.

로그인하러 가기

계정이 없으신가요? 같은 화면에서 가입할 수 있습니다.

접근 권한 없음

열 수 없습니다

로그인 계정:

연결 실패

확인하지 못했습니다

contextBio AURORA 구현

NGS 파이프라인 서비스의 구현 스펙 — plumber API 네 워커, SEQprocess2 라이브러리 분리, 데이터 경로 규칙, 화면이 여기서 나오지 않는다는 사실.

기준 2026-10-05 · main
79037d1

한눈에

Automated Unified Reproducible Omics Reporting Architecture. FASTQ 원자료에서 품질검사·정렬·변이 검출·발현 정량까지 돌리고 리포트를 낸다.

항목 값
저장소 contextBio/AURORA (bare ContextBio/AURORA.git)
호스트 c3.sysmed.kr (공인 203.230.6.180, 내부 10.10.1.180)
운영 워크트리 ContextBio/AURORA — main. 백엔드 https://c3.sysmed.kr:6443/, 워커 127.0.0.1:6081~6084
개발 워크트리 dev/AURORA — dev. 백엔드 …:6443/dev, 워커 6091
프론트 contextbio.ai/aurora — Firebase Hosting 이 낸다 (아래 참조)
언어·틀 R · plumber API + 정적 화면 (public/)
작업 기록 /data/workbench/AURORA/jobs/<id>/job.json (857T, NFS 10.10.1.200:/sdata)
원자료 탐색 루트 /data/rawdata/AURORA (실경로 /mnt/S1/data/rawdata/AURORA, 230T)
로그인 contextBio 통합계정(Firebase) — AURORA_AUTH=on
로그 service.log

화면은 이 서버가 아니라 Firebase 가 낸다

contextbio.ai/aurora 는 리다이렉트도 iframe 도 아니다. 저장소 public/ 의 사본을 Firebase Hosting 이 직접 낸다. 사본은 사이트 저장소의 build_subapp.py 가 굽고, 사이트 저장소의 워크플로가 GitHub 에서 AURORA 를 체크아웃해 빌드한다.

contextBio/ContextBio .github/workflows/
  deploy.yml      ← contextBio/AURORA @ main → contextbio.ai/aurora
  deploy-dev.yml  ← contextBio/AURORA @ dev  → dev-contextbio.web.app/aurora

c3 의 파일을 고치는 것만으로는 그 화면이 바뀌지 않는다. git push 로 GitHub 에 올라가고 사이트 워크플로가 돌아야 한다. 2026-09-02 에 public/app.js 를 고쳐 놓고 반영을 기다리다 한참 헤맸다 — 접근 로그에 app.js 요청이 아예 없는 것이 단서였다 (브라우저는 c3 가 아니라 Firebase 에서 받는다).

정적 파일을 c3 가 직접 낼 때도 있다 — https://c3.sysmed.kr:6443/(운영)와 /dev/ (apache ProxyPass /dev/ → 6091)로 열면 워커가 자기 public/ 을 낸다. 백엔드만 확인할 때 쓴다.

왜 Shiny 가 아니라 plumber 인가

2026-08-19 에 Shiny 를 걷어냈다. 이유는 속도다 — Shiny 는 프로세스 하나·스레드 하나로 접속자 전원을 받아서, 누군가의 느린 호출이 전원의 멈춤이 됐다. 대표적으로 aurora_load_config_values() 가 7.13초 걸리는데 세션마다 캐시 없이 불렸고 callr::r() 이 부른 세션을 붙잡았다. 셋이 같이 들어오면 20초가 멈췄다.

브라우저 ──TLS 6443──> apache ──balancer──> plumber 워커 6081~6084 (감시자 1 + 워커 4)
             (vhost)              └ 정적 화면(public/)도 워커가 낸다
  • bootstrap.R 이 앱을 올린다(R/.R · 상수 · 인증서 예열). 설정값 프로세스 캐시가 여기 있다 — 6.93초 → 0.009초.* 설정 파일과 덮어쓰기 문서의 mtime 이 바뀌면 다시 읽는다.
  • api.R 이 JSON 을 내고 public/ 이 화면을 그린다. 프리셋 규칙은 서버에 남겼다 — SEQprocess 분기를 그대로 옮긴 것이라 JS 로 복제하면 갈라지기 시작한다.
  • exec/serve_api.R 이 감시자다. 워커가 죽으면 다시 띄우고, 감시자가 죽으면 워커가 스스로 물러난다(고아 워커가 포트를 쥐면 다음 감시자가 영원히 헛돈다).
  • 상태는 전부 디스크(jobs/<id>/job.json)에 있고 토큰이 매 요청에 실려 오므로 워커는 서로 교체 가능하다. sticky session 을 걸지 않는 이유다.
  • apache 는 정적 파일을 직접 내지 못한다 — public/ 이 NFS 이고 export 가 root 를 squash 해서 root 로 뜨는 apache 에게는 폴더가 보이지 않는다. vhost 정본은 apache-aurora-api.conf.example.

TLS 는 6443 으로 나간다(*.sysmed.kr 와일드카드 인증서). 443 은 apache 가 잡고 그 뒤에 RStudio 가 붙어 있다.

저장소 배치

api.R                 plumber 엔드포인트
bootstrap.R           앱 로드 · 상수 · 설정 캐시
config/aurora_config.R  SEQprocess 설정 정본 (도구 경로·참조 파일·R 패키지)
exec/serve_api.R      감시자 (워커 기동·감독)
exec/run_job.R        작업 실행 — 설치된 R 패키지를 부른다
exec/make_report.R    리포트 생성
R/00_util.R … 15_deg.R  기능별 모듈 (아래)
public/               화면 (Firebase 가 사본을 낸다)
report/aurora_report.Rmd  리포트 템플릿
ensure-aurora-api.sh  cron 이 5분마다 부르는 기동 보증 스크립트 (dev 판 별도)
release.sh            머지·태그·재기동·검증
install-seqprocess.sh 파이프라인 패키지 설치 (prod/dev)

R/ 모듈은 번호가 곧 층이다 — 01_options(파이프라인 선택지) · 02_preflight(도구·참조 파일 사전점검) · 03_jobs(작업 생성·취소) · 04_results · 05_report · 06_handoff · 07_qcmetrics · 08_qcplots · 09_reportmeta · 10_reportform · 11_auth · 12_i18n · 13_uploads · 14_readme · 15_deg(DESeq2).

파이프라인 패키지 — 라이브러리 경로로 dev·prod 를 가른다

AURORA 는 파이프라인을 직접 돌리지 않는다. exec/run_job.R 이 설치된 R 패키지를 부르므로 /data/Rpackage/SEQprocess 소스를 고쳐도 재설치 전에는 반영되지 않는다.

운영 패키지는 /data/workbench/AURORA/runtime/rlib/<커밋>/SEQprocess2에 버전별로 설치한다. current 링크와 AURORA_SEQPROCESS_RLIB으로 새 작업의 라이브러리를 지정하며, 진행 중인 작업은 시작 시 고정한 실제 런타임 경로를 유지한다. 기존 /usr/lib/R/library의 과거 패키지는 덮어쓰지 않는다. 개발용 <dev>/rlib도 운영과 분리한다.

소스 원격은 contextBio/SEQprocess이며 소스 수정만으로 설치된 패키지가 갱신되지는 않는다. 새 커밋별 경로에 설치·검증한 후 current를 전환하고 서비스 및 새 작업의 실제 버전을 확인한다. 2026-09-12 배포 버전과 Slurm 자원 정책, g1 CPU/GPU 실측은 운영 소스·실행 관리에 기록한다.

/data/Rpackage/SEQprocess/inst/webapp/ 는 낡은 사본이다. 그쪽 deploy.sh 를 부르면 낡은 판이 배포된다. 부르지 않는다. runAURORA() 의 app.dir 기본값도 그 사본을 가리키므로, 손으로 띄울 때는 --app-dir 로 이 저장소를 지정한다.

데이터 경로 규칙

입력 폴더는 <탐색 루트>/<사용자>/<프로젝트>/… 다. 사용자 폴더 자체는 입력으로 쓸 수 없다 — 프로젝트를 가로질러 통째로 스캔하는 실행을 막기 위해서다. 강제는 세 겹이다: 탐색 창이 본인 폴더 밖으로 못 나가고, 규칙 밖 경로면 실행 단추가 꺼지고, 실행 직전에 한 번 더 검사한다.

폴더 이름은 이메일 앞부분이다 (hyun.goo.woo@gmail.com → hyun.goo.woo). 통합인증의 정본 키는 users/{uid} 의 uid 지만, 폴더는 사람이 셸에서 읽고 후속 분석에 쓰이므로 읽히는 쪽을 택했다. 대가는 알고 택한 것이다 — 도메인만 다른 동명이인은 같은 폴더를 쓰고, 이메일을 바꾸면 폴더가 갈라진다.

프로젝트 폴더를 만들 때 세 칸을 함께 만든다(aurora_create_project() 가 AURORA_PROJECT_DIRS 를 돈다). 나중에 만들게 두면 사람마다 다른 이름을 쓰기 시작한다. 규칙 이전에 만들어진 프로젝트에는 세 칸이 없고, 그런 폴더도 그대로 동작한다(훑기가 재귀라 어디에 있든 FASTQ 를 찾는다).

report/README.md 는 영어로 쓴다 (R/14_readme.R). 이 폴더는 AURORA 를 거치지 않고도 읽힌다 — 셸에서 열고, 후속 분석에 쓰이고, 몇 달 뒤 다른 사람이 연다. 작업 기록 jobs/<id> 는 실행한 사람만 찾을 수 있고 폴더를 따라다니지 않으므로, "이게 무슨 데이터였더라"에 답하는 것이 여기 말고는 없다. 화면은 한국어·영어를 오가지만 파일은 한 언어로 고정한다.

인증

AURORA_AUTH=on 이 전제다 — 끄면 <사용자> 를 알 수 없어 모두가 탐색 루트 하나를 공유하던 예전 동작으로 돌아간다.

Google 로그인은 Firebase 콘솔의 Authorized domains 에 호스트가 있어야 뜬다. signInWithPopup 은 호출 오리진을 보고, 없으면 auth/unauthorized-domain 으로 실패한다 (authDomain 을 정본으로 두는 것과는 별개다). c3.sysmed.kr·g2.sysmed.kr 이 둘 다 등록돼 있어 서버를 되돌려도 된다. 승인 검사는 호스트명만 보므로 포트는 상관없다.

기동과 배포

root 권한이 없어 systemd 를 쓸 수 없다. cron 이 유지한다.

@reboot     /data/agents/ContextBio/AURORA/ensure-aurora-api.sh
*/5 * * * * /data/agents/ContextBio/AURORA/ensure-aurora-api.sh >/dev/null 2>&1

재기동은 스크립트 파일로 부른다. ssh c3 'pkill -f …' 는 자기 셸의 cmdline 에 패턴이 들어 있어 자신을 먼저 죽인다(git 워크트리 참조).

릴리즈는 release.sh 가 머지·태그·재기동·/api/version 검증을 일괄로 한다. 배포 확인은 반드시 /api/version 으로 — 프로세스가 옛 inode 를 물고 사는 좀비는 git log 로 보이지 않는다.

화면까지 새로 내보내려면 사이트 저장소의 워크플로를 깨워야 한다. c3 에는 gh 가 없고 c1 에 ssh 도 되지 않지만, 사이트 저장소 배포 키가 c3 에 있어 빈 커밋으로 깨울 수 있다. 사이트 저장소 체크아웃은 작업이 쌓여 있으므로 건드리지 않고 임시 클론에서 한다.

자주 막히는 곳

증상 원인 할 일
public/ 을 고쳤는데 화면이 그대로 화면은 Firebase 사본이다 push 후 사이트 워크플로 실행
화면에서 고를 수 있는데 실행이 죽는다 설치된 파이프라인 패키지가 낡았다 install-seqprocess.sh --check
배포한 것 같은데 동작이 옛것 프로세스가 옛 inode 를 물고 있다 /api/version 확인 후 ensure 스크립트로 재기동
도구가 깔려 있는데 없음 설정이 가리키는 자리와 실제 자리가 다르다 관리자 탭의 경로 덮어쓰기
참조 유전체·종을 못 고른다 hg38 고정이다 설계상 제약 — 플레이북에 적혀 있다