← 자료실

연구 포털 제작 방법

연구실 웹 공간에 자기 페이지를 올리는 방법 · 2026-08-23

계정과 비밀번호는 이 문서에 없습니다. 연구실에서 따로 알려 드립니다.


공간의 구조

계정을 받으면 자기만의 웹 공간이 생깁니다. SFTP로 접속하면 폴더 두 개가 보입니다.

site/       웹에 공개됩니다 — 여기에 넣은 것이 곧 홈페이지입니다
private/    웹에 절대 공개되지 않습니다 — 설정과 오류 기록이 들어갑니다

site/ 에 넣는 즉시 살아납니다. 따로 배포하거나 승인받는 절차가 없습니다.


1 · 파일 올리기

WinSCPFileZilla 로 접속합니다.

VS Code를 쓰신다면 SFTP 확장이 저장할 때마다 자동으로 올려 줍니다. (Remote-SSH 확장은 이 서버에서 동작하지 않습니다.)


2 · 첫 페이지 만들기

site/ 안에 폴더를 만들면 그 순간 주소가 생깁니다.

site/mypage/index.html   →   https://aimigenlab.com/mypage/

폴더 이름은 영문 소문자·숫자·붙임표(-)로 지어 주세요.

작업 순서는 이렇습니다.

  1. 내 컴퓨터에서 폴더를 만들고 index.html 을 작성합니다
  2. 그 폴더째로 site/ 안에 올립니다
  3. 위 주소를 엽니다
  4. 화면이 그대로면 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 · 그 밖에