연구 포털 제작 방법
김우진 · Regaining Trust in AI 연구 포털 · 2026-08-23
내 공간
계정이 발급되어 웹 공간 하나가 생겼습니다.
| 구분 | 값 |
|---|---|
| 포털 주소 | https://aiforalab.com/p/kimwj2990/ |
| 같은 내용 | https://aiforalab.com/trust-recovery/ |
| SFTP 호스트 | aiforalab.com · 포트 10022 |
| 아이디 | kimwj2990 |
| 비밀번호 | 연구실에서 따로 전달받은 것 |
⚠️ 두 주소는 같은 폴더입니다. 한쪽을 고치면 다른 쪽도 함께 바뀝니다. 자세한 구조는 관리방법 문서를 보세요.
1 · 파일 올리기
WinSCP나 FileZilla로 접속합니다.
- 프로토콜
SFTP· 호스트aiforalab.com· 포트10022· 사용자kimwj2990
VS Code로 작업하신다면 SFTP 확장을 쓰면 저장할 때마다 자동으로 올라갑니다. (Remote-SSH 확장은 이 서버에서 동작하지 않습니다.)
접속하면 폴더 두 개가 보입니다.
site/ ← 웹에 공개. 지금 논문 포털이 여기 들어 있습니다
private/ ← 웹에 노출되지 않음. 설정 파일과 오류 기록이 있습니다
site/에 올리면 즉시 반영됩니다. 별도의 배포 절차가 없습니다.
지금 site/ 안의 모습입니다.
site/
├── index.html 논문 포털 본문
├── figures/ 그림 (web용 png · 논문용 png · pdf)
├── table1_final.R 표 1 생성 R 스크립트
├── trust_recovery_figures.R 그림 생성 R 스크립트
└── thumb.svg 공유 썸네일
2 · 새 페이지 만들기
site/ 안에 폴더를 만들면 그 순간 주소가 생깁니다.
site/appendix/index.html → https://aiforalab.com/p/kimwj2990/appendix/
https://aiforalab.com/trust-recovery/appendix/
폴더 이름은 영문 소문자·숫자·하이픈을 권합니다 (appendix, study2, revision-2).
작업 순서는 이렇습니다.
- 고칠 파일을 PC로 내려받습니다
- PC에서 고칩니다
- SFTP로 덮어씁니다
- 브라우저에서
Ctrl+F5로 새로고침해 확인합니다
화면이 안 바뀌면 대부분 브라우저 캐시입니다.
3 · R 작업은 서버에서
논문의 표와 그림을 만드는 R 스크립트가 이미 site/에 들어 있습니다.
같은 작업을 연구 서버의 RStudio에서 바로 할 수 있습니다.
https://middleton.o-r.kr/rstudio/ · 아이디 kimwj2990
- 브라우저만 있으면 되고, 설치할 것이 없습니다
- 패키지를 새로 깔아도 다음에 그대로 남아 있습니다
- 만든 그림을 내려받아
site/figures/에 올리면 포털에 바로 반영됩니다
Python이 필요하면 Jupyter도 같은 계정으로 쓸 수 있습니다 (GPU 사용 가능).
데이터베이스 — 서버가 두 대입니다
헷갈리기 쉬운 부분입니다. 연구 데이터는 ① 하나만 쓰시면 됩니다.
① 루멘 (middleton) — 연구 데이터를 여기 쌓습니다
| 값 | |
|---|---|
| 주소 | https://middleton.o-r.kr/adminer/ |
| 서버 | mysql-server — 이미 채워져 있습니다 |
| 사용자 | kimwj2990 |
| 데이터베이스 | kimwj2990 (전권 있음) |
서버 칸은 이미
mysql-server로 채워져 있습니다. 그대로 두세요. 혹시 비어 있거나localhost로 되어 있으면mysql-server로 고치셔야 합니다.
localhost를 넣으면Connection refused가 납니다. Adminer 가 별도 컨테이너로 돌기 때문에localhost는 Adminer 자기 자신을 가리켜서 그렇습니다. 아이디·비밀번호 문제가 아닙니다.
주소에 미리 넣어 둘 수도 있습니다.
https://middleton.o-r.kr/adminer/?server=mysql-server&username=kimwj2990
실험 응답(N=120)과 재현 결과를 여기 넣어 두면 R·Python·웹에서 같은 자료를 함께 볼 수 있습니다. 개인 식별 정보가 있다면 포털 site/ 에는 올리지 마세요.
Jupyter·RStudio 에서도 같은 자료를 그대로 읽습니다.
import pymysql
db = pymysql.connect(host='mysql-server', user='kimwj2990',
password='<비밀번호>', database='kimwj2990', charset='utf8mb4')
library(DBI)
con <- dbConnect(RMariaDB::MariaDB(), host = "mysql-server",
user = "kimwj2990", password = "<비밀번호>", dbname = "kimwj2990")
② aiforalab — 포털 웹페이지가 DB를 읽어야 할 때만
보통은 쓰지 않습니다. 포털 페이지가 PHP 로 DB를 직접 읽는 기능을 만들 때만 필요합니다.
| 값 | |
|---|---|
| 사용자 | kimwj2990 |
| 만들 수 있는 DB | 이름이 kimwj2990_ 로 시작하는 것 |
| PHP 안에서 | mysqli_connect('localhost', ...) — 여기서는 localhost 가 맞습니다 |
CREATE DATABASE kimwj2990_mydata CHARACTER SET utf8mb4;
PC의 DB 도구로 붙으려면 SSH 터널이 필요합니다.
ssh -N -p 10022 -L 13306:127.0.0.1:3306 kimwj2990@aiforalab.com
그 상태에서 HeidiSQL·DBeaver 에 호스트 127.0.0.1, 포트 13306 으로 접속합니다.
한 줄 정리 — 연구 데이터는 루멘(
mysql-server), 웹페이지용은 aiforalab(localhost). 두 곳은 완전히 별개이고 자료가 오가지 않습니다.
5 · 알아두실 제약
이 서버는 오래된 구성이라 몇 가지 제한이 있습니다. 미리 알고 시작하면 헤맬 일이 없습니다.
| 항목 | 내용 |
|---|---|
| PHP 버전 | 5.4.45 — ??(널 병합), 화살표 함수 등 최신 문법이 동작하지 않습니다 |
| 명령줄 셸 | 제공되지 않습니다. exec·shell_exec 계열은 막혀 있습니다 |
| 상주 서버 | Node·Python 서버는 띄울 수 없습니다. 정적 HTML과 PHP+MySQL은 제한이 없습니다 |
| 파일 접근 범위 | 자기 폴더와 /tmp 밖은 PHP가 읽지 못합니다 |
| 업로드 용량 | 파일 64MB · 요청 80MB |
R이나 Python 분석은 연구 서버(RStudio·Jupyter)에서 하고, 결과 파일만 포털에 올리는 방식을 권합니다.
6 · 문제가 생기면
| 증상 | 확인할 것 |
|---|---|
| 화면이 안 바뀜 | 브라우저 캐시 — Ctrl + F5 |
| 흰 화면 / 500 오류 | private/php-error.log 마지막 줄에 원인이 있습니다 |
| 403 오류 | 파일 권한 문제일 수 있습니다. 연구실에 알려 주세요 |
| 한쪽 주소만 안 바뀜 | 있을 수 없는 일입니다. 두 주소는 같은 폴더입니다 — 캐시를 지워 보세요 |
7 · 함께 쓸 수 있는 것
| 도구 | 주소 | 아이디 |
|---|---|---|
| 💬 Chat | https://middleton.o-r.kr/?app=chat | kimwj2990@naver.com (이메일 전체) |
| 📓 Jupyter | https://middleton.o-r.kr/jupyter/ | kimwj2990 |
| 📊 RStudio | https://middleton.o-r.kr/rstudio/ | kimwj2990 |
| 🗄️ MySQL | https://middleton.o-r.kr/adminer/?server=mysql-server | kimwj2990 |
비밀번호는 포털과 같습니다. Chat만 이메일 전체로 로그인합니다.
8 · 참고
- 이 공간은 다른 연구자와 완전히 분리되어 있습니다. 무엇을 하셔도 다른 사람에게 영향이 없고, 반대로 다른 사람 자료도 보이지 않습니다.
- 지운 파일은 복구되지 않습니다. PC에 원본을 두고 올리는 방식으로 작업하세요.
- 비밀번호·API 키는 절대
site/에 두지 마세요. 웹에 그대로 노출됩니다. 꼭 필요하면private/에 두고 PHP에서 읽어 씁니다.