Chemicloud Python 3.12 환경부터 장고 준비까지, 진짜 삽질 기록 2편

“왜 자꾸 3.6이야…” Chemicloud Python 3.12 전쟁의 시작
secondlife.lol 도메인까지 연결했으니,
이제 “장고만 올리면 끝!”이라고 생각했죠.
하지만 SSH를 딱 열고 python3 --version을 쳐보니…
3.6.x 🤯
내 마음 속 계획은 “Chemicloud Python 3.12 환경 + 최신 장고 + AI 확장”인데,
서버는 묵직하게 예전 버전 Python을 들고 버티고 있는 겁니다.
처음엔 python3 -m venv virtualenv/studymate_venv로 직접 venv를 만들다가get-pip.py 버전 에러에 치이고, 경로 헷갈리고,
“케미클라우드 파이썬 3.12는 없는 건가?”라는 멘붕까지 왔죠.
결론부터 말하면,
정답은 “SSH에서 억지로 만들지 말고, cPanel의 Setup Python App를 활용하자”였습니다.
이 2편에서는 그 과정을 케미클라우드 파이썬 3.12 기준으로 정리해봅니다.
Use cases: 왜 굳이 케미클라우드 파이썬 3.12여야 했나?
1. 최신 장고 + AI 라이브러리를 쓰려면
요즘 나오는
- Django 최신 버전
- OpenAI·Anthropic·Groq 같은 LLM 클라이언트
- FastAPI, LangChain, Pydantic 계열 라이브러리
다들 최소 요구 버전이 Python 3.10 이상인 경우가 많아요.
사내벤처에서 AI 기반 웹서비스를 만들려면,
케미클라우드 파이썬 3.12 환경이 사실상 기본 스펙이 되어버린 거죠.
그래서
- 로컬 개발: Python 3.12
- 서버: 케미클라우드 파이썬 3.12
- 장고: dev / prod 설정 분리
이렇게 맞춰두면, 나중에 AI 기능을 붙이든 뭘 하든
버전 충돌 없이 확장하기가 훨씬 수월합니다.
2. 사내벤처 데모를 “빠르게” 돌리고 싶을 때
사내벤처는 속도 싸움이니까요.
- 서버 OS 직접 관리 X
- docker-compose 복잡한 세팅 X
- 그냥 Chemicloud Python 3.12+ Setup Python App 으로
“URL만 있으면 어디서든 접속되는 데모”를 빨리 만드는 게 핵심.
LLM 기반 기능을 추가해도,
이미 케미클라우드 파이썬 3.12 가상환경 안에 필요한 패키지들을 설치해 두면
바로 장고 뷰에서 불러 쓰면 됩니다.
3. 여러 프로젝트를 한 서버에서 나눠 돌리고 싶을 때
기존 프로젝트도 같은 서버에 있었기 때문에,
이렇게 여러 사이트를 하나의 ChemiCloud 계정에서 돌려야 했죠.
이때 각 도메인별로 Setup Python App + 별도 venv 구조를 쓰면,
- 케미클라우드 파이썬 3.12 환경을 프로젝트별로
독립(venv) + 독립(Document Root) 시킬 수 있어서 - 나중에 패키지 버전이 달라도 서로 영향을 거의 주지 않습니다.
Organizing: 케미클라우드 파이썬 3.12 + 장고 세팅 단계별 가이드

이제 실제로 했던 순서를
“다시 해도 그대로 따라할 수 있게” 단계별로 정리해볼게요.
1단계. Application root 만들기 – studymate_project
- cPanel 로그인 → File Manager
- 홈 디렉토리 아래에
studymate_project폴더 생성 - 로컬에서 개발하던 장고 프로젝트를 이 폴더로 업로드
이제 케미클라우드 파이썬 3.12 환경이 붙을 “집”이 생겼습니다.
※ 기존에
public_html이나 다른 프로젝트 폴더가 있어도 상관 없음.studymate.secondlife.lol도메인은/home2/secondlife/를 Document Root로 쓰고,studymate.secondlife.lol
거기서passenger_wsgi.py가를 바라보게 할 수도 있고,_projectstudymate
Application root 자체를로 지정하는 방식도 가능합니다._projectstudymate
여기서는 Setup Python App에서 Application root를로 설정하는 케이스로 설명합니다._projectstudymate
2단계. Setup Python App에서 Chemicloud Python 3.12 앱 생성

- cPanel에서 Setup Python App 클릭
Create Application버튼 클릭- 다음처럼 입력:
- Python version:
3.12.11(케미클라우드 파이썬 3.12) - Application root:
_projectstudymate - Application URL:
secondlife.lol / - Application startup file:
passenger_wsgi.py - Application Entry point:
application
- Python version:
- 저장하면, 상단에 이런 안내 문구가 나옵니다
source /home2/secondlife/virtualenv/studymate_project/3.12/bin/activate && cd /home2/secondlife/studymate_project- 이게 바로 Chemicloud Python 3.12 가상환경 진입용 명령어예요.
이 단계가 끝나면:
/home2/secondlife/virtualenv/studymate_project/3.12/
경로에 Chemicloud Python 3.12 기반 venv가 자동으로 생성됩니다.
3단계. SSH에서 venv 진입 + 패키지 설치
로컬 터미널이나 ChemiCloud 웹 터미널에서
cd /home2/secondlife
source virtualenv/studymate_project/3.12/bin/activate
cd studymate_project
python --version여기서
Python 3.12.11이 나오면,
“지금 이 쉘은 Chemicloud Python 3.12 가상환경 위에 있다”는 뜻입니다.
이제 장고와 각종 패키지를 설치해 줍니다.
pip install --upgrade pip
pip install -r requirements.txt
# requirements.txt가 없다면 최소한
# pip install django
# 정도는 설치이제 python manage.py check 를 실행했을 때
케미클라우드 파이썬 3.12 환경 기준으로 에러가 없는지 확인할 수 있어요.
DJANGO_SETTINGS_MODULE=config.settings.prod python manage.py check4단계. passenger_wsgi.py를 장고용으로 정리
케미클라우드 Setup Python App는
기본 템플릿 passenger_wsgi.py를 만들어 주는데,
이걸 그대로 쓰면 load_source 같은 코드 때문에
자기 자신을 재귀 import 하는 문제가 생길 수 있습니다.
최종적으로 정리된 버전은 이렇게 심플했어요:
# /home2/secondlife/studymate_project/passenger_wsgi.py
import os
import sys
from pathlib import Path
# 프로젝트 루트 (manage.py가 있는 폴더)
BASE_DIR = Path(__file__).resolve().parent
# 프로젝트 루트를 PYTHONPATH에 추가
if str(BASE_DIR) not in sys.path:
sys.path.insert(0, str(BASE_DIR))
# 운영용 settings 모듈 지정
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.prod")
# Django WSGI application 생성
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
이렇게 해두면
- 케미클라우드 파이썬 3.12 venv에서
config/settings/prod.py를 기준으로- 장고 앱이 깔끔하게 올라옵니다.
5단계. .env + base.py로 환경변수 관리

장고 설정은
config/settings/base.pyconfig/settings/dev.pyconfig/settings/prod.py
이렇게 나눠서 관리했어요.
핵심은 BASE_DIR에 .env를 두고, base.py에서 딱 한 번 load_dotenv()를 호출하는 것.
base.py 상단은 이렇게 맞췄습니다:
import os
from pathlib import Path
from dotenv import load_dotenv
BASE_DIR = Path(__file__).resolve().parent.parent.parent
env_path = BASE_DIR / ".env"
load_dotenv(env_path).env 예시는:
SECRET_KEY=랜덤_영문_숫자_기호_키
DEBUG=False
ALLOWED_HOSTS=secondlife.lol,www.secondlife.lol
DATABASE_URL=sqlite:////home2/secondlife/studymate_project/db.sqlite3
SECURE_SSL_REDIRECT=True
SECURE_HSTS_SECONDS=31536000여기서 하나 크게 배운 점:
.env 값에는 한글 쓰면 안 된다!!
(케미클라우드 파이썬 3.12 환경의os.environ이 ASCII 로케일이라
한글이 들어가면UnicodeEncodeError로 500 에러🔥)
그래서 설명은 전부 # 주석으로 빼고,
실제 값에는 영문·숫자·기호만 사용하는 방식으로 정리했습니다.
6단계. migrate, collectstatic, 그리고 Restart
마지막은 루틴이에요.
python manage.py migrate
python manage.py collectstatic
python manage.py createsuperuser # 처음 한 번그리고 cPanel → Setup Python App → secondlife.lol 앱 → Restart 버튼 클릭.
이제 브라우저에서 https://studymate.secondlife.lol에 접속하면,
케미클라우드 파이썬 3.12 기반의 장고 서비스가 드디어 살아납니다 🎉
정리: 케미클라우드 파이썬 3.12 세팅, 한 줄 요약
- SSH로 직접 venv 만들려고 애쓰기보다,
Setup Python App에서 케미클라우드 파이썬 3.12 앱을 먼저 만들 것 - 생성된 venv 경로
/home2/계정명/virtualenv/앱이름/3.12/
를 그대로 사용 passenger_wsgi.py는 딱 세 줄만 기억:sys.path에 BASE_DIR 추가DJANGO_SETTINGS_MODULE=config.settings.prodget_wsgi_application()호출
.env는 BASE_DIR에 두고,
값에는 한글 금지, 설명은 주석에만
이 구조만 잡아두면,
앞으로 다른 프로젝트를 올릴 때도
“케미클라우드 파이썬 3.12 세팅 → 장고 붙이기”는
거의 템플릿처럼 재사용할 수 있습니다.
다음 3편에서는
dev / prod 설정을 분리하는 방법,
.env설계 팁,
그리고 사내벤처 환경에서 “실수해도 복구 쉬운 구조”를 어떻게 만드는지
를 이야기해 볼게요.






