연구 포털 제작 방법
연구실 웹 공간에 자기 페이지를 올리는 방법 · 2026-08-23
계정과 비밀번호는 이 문서에 없습니다. 연구실에서 따로 알려 드립니다.
공간의 구조
계정을 받으면 자기만의 웹 공간이 생깁니다. SFTP로 접속하면 폴더 두 개가 보입니다.
site/ 웹에 공개됩니다 — 여기에 넣은 것이 곧 홈페이지입니다
private/ 웹에 절대 공개되지 않습니다 — 설정과 오류 기록이 들어갑니다
site/ 에 넣는 즉시 살아납니다. 따로 배포하거나 승인받는 절차가 없습니다.
1 · 파일 올리기
WinSCP 나 FileZilla 로 접속합니다.
- 프로토콜
SFTP· 호스트aimigenlab.com· 포트10022
VS Code를 쓰신다면 SFTP 확장이 저장할 때마다 자동으로 올려 줍니다. (Remote-SSH 확장은 이 서버에서 동작하지 않습니다.)
2 · 첫 페이지 만들기
site/ 안에 폴더를 만들면 그 순간 주소가 생깁니다.
site/mypage/index.html → https://aimigenlab.com/mypage/
폴더 이름은 영문 소문자·숫자·붙임표(-)로 지어 주세요.
작업 순서는 이렇습니다.
- 내 컴퓨터에서 폴더를 만들고
index.html을 작성합니다 - 그 폴더째로
site/안에 올립니다 - 위 주소를 엽니다
- 화면이 그대로면
Ctrl+F5로 새로고침합니다
3 · 데이터베이스 쓰기 — 서버가 두 대입니다
헷갈리기 쉬운 부분입니다. 연구 데이터는 ① 하나만 쓰시면 됩니다.
① 루멘 (middleton) — 연구 데이터를 여기 쌓습니다
| 값 | |
|---|---|
| 주소 | https://middleton.o-r.kr/adminer/ |
| 서버 | mysql-server — 이미 채워져 있습니다 |
| 사용자 | 연구서버 아이디 (예: yunho.lee) |
| 데이터베이스 | 아이디와 같은 이름의 전용 DB |
서버 칸은 이미
mysql-server로 채워져 있습니다. 그대로 두세요. 혹시 비어 있거나localhost로 되어 있으면mysql-server로 고치셔야 합니다.
localhost를 넣으면Connection refused가 납니다. Adminer 가 별도 컨테이너로 돌기 때문에localhost는 Adminer 자기 자신을 가리켜서 그렇습니다. 아이디·비밀번호 문제가 아닙니다.
주소에 미리 넣어 둘 수도 있습니다.
https://middleton.o-r.kr/adminer/?server=mysql-server
실험 기록과 측정값을 여기 모아 두면 Jupyter·RStudio 에서 같은 자료를 함께 봅니다. 연구서버 아이디는 사람마다 다릅니다. 모르시면 연구실에 물어보세요.
import pymysql
db = pymysql.connect(host='mysql-server', user='<아이디>',
password='<비밀번호>', database='<아이디>', charset='utf8mb4')
library(DBI)
con <- dbConnect(RMariaDB::MariaDB(), host = "mysql-server",
user = "<아이디>", password = "<비밀번호>", dbname = "<아이디>")
② aiforalab — 포털 웹페이지가 DB를 읽어야 할 때만
보통은 쓰지 않습니다. 포털 페이지가 PHP 로 DB를 직접 읽는 기능을 만들 때만 필요합니다.
이름이 <계정>_ 로 시작하는 데이터베이스를 직접 만들 수 있습니다.
CREATE DATABASE <계정>_mydata CHARACTER SET utf8mb4;
$m = mysqli_connect('localhost', '<계정>', '<비밀번호>', '<계정>_mydata');
mysqli_set_charset($m, 'utf8mb4');
PHP 안에서는 localhost 가 맞습니다. 같은 서버 안이기 때문입니다.
PC의 DB 도구로 붙으려면 SSH 터널이 필요합니다.
ssh -N -p 10022 -L 13306:127.0.0.1:3306 <계정>@aiforalab.com
그 상태에서 HeidiSQL·DBeaver 에 호스트 127.0.0.1, 포트 13306 으로 접속합니다.
한 줄 정리 — 연구 데이터는 루멘(
mysql-server), 웹페이지용은 aiforalab(localhost). 두 곳은 완전히 별개이고 자료가 오가지 않습니다.
4 · 미리 알아 둘 제약
이 서버는 오래된 구성으로 돌아갑니다. 먼저 알아 두면 하루를 아낍니다.
| 항목 | 해당 내용 |
|---|---|
| PHP 버전 | 5.4.45 — ?? 연산자, 화살표 함수 같은 최신 문법이 동작하지 않습니다. isset() 과 array() 를 쓰세요. |
| 명령줄 | 쓸 수 없습니다. exec, shell_exec, system 이 막혀 있습니다. |
| 상주 서버 | Node나 Python 서버는 띄울 수 없습니다. PHP와 MySQL 페이지에는 제약이 없습니다. |
| 파일 접근 | PHP는 자기 폴더와 /tmp 밖을 읽지 못합니다. |
| 업로드 크기 | 파일당 64MB, 요청당 80MB. |
분석에 Python이 필요하면 내 컴퓨터에서 돌리고 결과만 JSON이나 CSV로 올리세요.
5 · API 키 다루기
외부 서비스의 키는 private/ 안에 두고 PHP에서 읽어 씁니다.
$cfg = json_decode(file_get_contents(__DIR__ . '/../../private/config.json'), true);
site/ 에 있는 것은 적힌 그대로 웹에 나갑니다. 거기 둔 키는 주소를 짐작한
누구나 읽을 수 있습니다.
6 · 잘 안 될 때
| 증상 | 볼 곳 |
|---|---|
| 화면이 그대로 | 브라우저 캐시 — Ctrl + F5 |
| 빈 화면이나 500 오류 | private/php-error.log 의 마지막 줄에 원인이 적혀 있습니다 |
| 403 오류 | 파일 권한 문제일 가능성이 큽니다. 연구실에 알려 주세요. |
| PHP 소스가 글자로 보임 | 서버 설정 문제입니다. 연구실에 알려 주세요. |
7 · 그 밖에
- 계정끼리는 완전히 분리돼 있습니다. 내가 한 일이 다른 연구자에게 영향을 주지 않고, 그쪽 파일도 나에게 보이지 않습니다.
- 지운 파일은 되살릴 수 없습니다. 원본은 내 컴퓨터에 두고 거기서 올리세요.