안녕하세요, Alpha-G입니다.
오늘부로 퀀트 트레이딩 입문을 선언하며, 저만의 연구 기록을 남길 공간인 **GeonuLab(geonulab.com)**을 구축했습니다.
네이버 블로그나 티스토리 같은 편한 길도 있었지만, 앞으로 개발하게 될 트레이딩 봇(Bot)과의 연동성, 그리고 **”내 데이터는 내가 소유한다”**는 철학을 위해 AWS(Amazon Web Services) 위에 직접 워드프레스를 올리는 방식을 택했습니다.
이 글은 그 삽질의 기록이자, 저와 같은 길을 걷고자 하는 분들을 위한 가이드입니다.
1. 서버 환경 (Infrastructure)
가장 먼저 AWS Lightsail을 사용하여 가성비 좋은 리눅스 서버를 구축했습니다.
- Platform: AWS Lightsail (Linux/Unix)
- Blueprint: WordPress (by Bitnami)
- Spec: $7 USD/mon (1GB Memory, 1 vCPU, 40GB SSD)
- Domain: Hosting.kr에서
geonulab.com구입 후 DNS 연결
$5 플랜(512MB)은 워드프레스를 돌리기에 턱없이 부족하여, **$7(1GB)** 플랜으로 시작했습니다. (첫 3개월 무료 혜택은 덤입니다.)
2. SSL 보안 인증서 설치 (HTTPS)
요즘 웹사이트에 ‘자물쇠’가 없으면 구글 검색 노출이 불가능합니다. AWS Lightsail의 Bitnami 스택은 아주 간편한 인증서 발급 툴을 제공합니다.
터미널(SSH)에서 아래 명령어 한 줄이면 Let’s Encrypt 인증서 발급부터 자동 갱신 설정까지 끝납니다.
Bash
sudo /opt/bitnami/bncert-tool
하지만, 진짜 문제는 여기서부터 시작되었습니다.
3. 트러블 슈팅: 무한 리다이렉트 & SSL 에러
인증서를 설치했는데도 불구하고 ERR_SSL_PROTOCOL_ERROR가 뜨거나, 관리자 페이지 접속이 안 되는 현상이 발생했습니다.
원인: 서버(Apache)는 HTTPS로 통신하려는데, 워드프레스 내부 설정(wp-config.php)이 HTTP로 남아있어 서로 충돌이 발생한 것입니다.
해결: wp-config.php 파일에 강제로 HTTPS 주소를 선언해주어 해결했습니다.
PHP
/* wp-config.php 파일 상단에 추가 */
define('WP_HOME','https://geonulab.com');
define('WP_SITEURL','https://geonulab.com');
$_SERVER['HTTPS'] = 'on';
(주의: Bitnami 스택은 권한이 잠겨 있어 sudo chmod 660 ... 명령어로 권한을 먼저 풀어줘야 수정이 가능합니다.)
4. 치명적 문제 해결: 램 1GB의 한계와 Swap 메모리
세팅을 마치고 좋아하던 찰나, 몇 번의 클릭 만에 **”데이터베이스 연결 확립 중 에러”**가 뜨며 사이트가 뻗어버렸습니다.
원인: 1GB 램으로는 워드프레스, 아파치, MySQL을 동시에 감당하기 벅찼던 것입니다. 메모리가 부족해지자 OS가 가장 무거운 프로세스인 DB를 강제로 종료(Kill)시킨 것이죠.
해결: 가상 메모리(Swap) 2GB 할당 하드디스크(SSD)의 일부를 램처럼 사용하는 ‘스왑 메모리’를 생성하여 서버를 안정화했습니다.
[적용 명령어]
Bash
# 1. 2GB 스왑 파일 생성
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# 2. 권한 설정 및 스왑 영역 지정
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 3. 재부팅 후에도 유지되도록 설정 (fstab 등록)
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
이 설정을 적용한 뒤 free -h 명령어로 확인해보니, 든든한 2GB의 예비 전력이 생겼습니다. 이제 웬만한 트래픽에는 끄떡없습니다.
🚨 긴급 추가: 글 쓰다가 서버가 터졌습니다 (Real-time Troubleshooting)
…라고 글을 멋지게 마무리하려던 순간, 실제로 서버가 셧다운 되었습니다. (이 글을 임시 저장하는 순간 메모리 부족으로 DB 연결이 끊김)
역시 1GB 램(RAM)의 한계는 명확했습니다. 워드프레스의 블록 에디터(Gutenberg)가 무거운 작업을 처리하면서, 아슬아슬하던 메모리가 한계를 초과해 리눅스 커널이 MySQL을 강제로 종료시킨 것입니다.
하지만 퀀트라면 이 또한 데이터이자 경험입니다. 즉시 터미널을 열고 **추가 최적화(Optimization)**를 진행했습니다.
1. 메모리 괴물 ‘Jetpack’ 제거
AWS Bitnami 스택에 기본 설치된 Jetpack 플러그인은 기능이 많지만 메모리를 과도하게 점유합니다. 관리자 페이지 접속조차 불가능한 상황이라, 터미널에서 CLI 명령어로 강제 삭제했습니다.
Bash
# 워드프레스 CLI를 이용해 플러그인 강제 삭제
sudo wp plugin delete jetpack --path=/opt/bitnami/wordpress --allow-root
2. PHP 프로세스 제한 (Engine Tuning)
기본 설정된 PHP 프로세스 개수가 1GB 서버에는 너무 높게 잡혀있었습니다. 동시 처리 개수를 줄여 메모리 폭주를 막는 ‘속도 제한’을 걸었습니다.
Bash
# 동시 처리 프로세스(pm.max_children)를 5개로 제한
sudo sed -i 's/^pm.max_children.*/pm.max_children = 5/' /opt/bitnami/php/etc/php-fpm.d/www.conf
# 설정 적용을 위해 PHP 서비스 재시작
sudo /opt/bitnami/ctlscript.sh restart php-fpm
결과: 이 두 가지 조치 후, 메모리 사용량이 절반 수준(400MB 대)으로 안정화되었고, 지금 이 글을 끊김 없이 작성하고 있습니다.
저처럼 AWS Lightsail $7 요금제를 쓰시는 분들은 1) 스왑 메모리 설정, 2) 젯팩 삭제, 3) PHP 프로세스 제한 이 3가지는 선택이 아닌 필수입니다.
5. 마치며: Level 1 시작
이제 연구소(Lab) 문을 열 준비는 끝났습니다.
앞으로 이곳 GeonuLab에서는:
- Python을 활용한 퀀트 트레이딩 전략
- 암호화폐 자동매매 봇 개발 일지
- 데이터 분석과 AI 활용법
등을 다룰 예정입니다. **입문자에서 고수가 되어가는 과정(Zero to One)**을 가감 없이 공유하겠습니다.
지켜봐 주세요.