Docker와 Nginx를 활용하여 AWS EC2에 배포하고, HTTPS(SSL) 보안을 적용한 개인 포트폴리오 웹사이트입니다.
Period & Role
기간: 2026.01 ~ 2026.02 (약 1개월)
역할: Full Stack (1인 개발)
Description
AWS EC2 환경에서 Django 기반 포트폴리오 사이트를 Docker Compose로 배포한 개인 프로젝트입니다.
Nginx Reverse Proxy와 Certbot을 적용해 HTTPS와 정적 파일 서빙까지 포함한 운영형 배포 환경을 직접 구성했습니다. 또한 Start Bootstrap 오픈소스 테마를 기반으로 초기 화면 구조를 구성하고, Django Template Engine에 맞게 레이아웃과 스타일을 커스터마이징했습니다.
Tech Stack
Backend
PythonDjango
Frontend
Docker ComposeNginxCertbot
Realtime / Messaging
AWS EC2Linux
Infra / DevOps
Bootstrap
Key Features
Django 기반 포트폴리오 사이트 구축
프로젝트, 이력, 자기소개를 확인할 수 있는 포트폴리오 사이트 구현
Django Template Engine을 활용해 화면 구성
Docker Compose 기반 배포 환경 구성
웹 애플리케이션, Nginx, Certbot을 컨테이너로 분리해 운영 환경 구성
로컬과 서버 환경 차이를 줄일 수 있도록 컨테이너 기반 구조 적용
Nginx Reverse Proxy 및 정적 파일 서빙
요청 라우팅과 정적 파일 서빙을 Nginx에서 처리
Django 애플리케이션과 웹 서버 역할을 분리해 운영 구조 정리
HTTPS 인증서 발급 및 자동 갱신
Certbot을 활용해 SSL 인증서를 발급하고 HTTPS 적용
인증서 자동 갱신 구조를 구성해 운영 환경 유지보수성 확보
오픈소스 테마 커스터마이징
Start Bootstrap 테마를 기반으로 초기 화면 구조를 빠르게 구성
Django Template Engine에 맞게 레이아웃과 스타일을 커스터마이징
System Architecture & ERD
프로젝트의 시스템 아키텍처입니다.
Troubleshooting
1. HTTPS 전환 문제
• 문제 : HTTPS를 적용하기 위해 Nginx에 SSL 설정을 먼저 반영하면, 인증서가 없는 초기 상태에서는 정상 접속과 인증서 발급 절차 진행이 어려웠습니다.
• 원인 : 인증서 발급 전에 HTTPS 설정을 먼저 적용하면, ACME 인증 과정이 정상적으로 진행되지 않았습니다.
• 해결 : 먼저 HTTP 환경에서 서비스를 구동한 뒤 Certbot으로 인증서를 발급하고, 이후 HTTPS 설정을 적용하는 방식으로 전환했습니다.
• 결과 : SSL 인증서를 안정적으로 발급받을 수 있었고, HTTPS 환경으로 무리 없이 전환할 수 있었습니다.
2. 정적 파일 서빙 문제
• 문제 : Docker와 Nginx를 함께 사용하는 환경에서 정적 파일과 이미지가 정상적으로 노출되지 않는 문제가 있었습니다.
• 원인 : Django의 정적 파일 경로와 Nginx의 static/media 서빙 경로가 일관되게 연결되지 않았습니다.
• 해결 : Django의 정적 파일 경로와 Nginx의 static/media 서빙 경로를 분리해 설정하고, 컨테이너 간 볼륨 구성을 조정했습니다.
• 결과 : 운영 환경에서도 정적 리소스와 이미지가 안정적으로 제공되도록 개선했습니다.
3. 로컬-운영 환경 차이 문제
• 문제 : 로컬에서는 정상 동작하던 서비스가 AWS EC2 운영 환경에서는 설정 차이로 인해 동일하게 동작하지 않는 문제가 있었습니다.
• 원인 : 애플리케이션, 웹 서버, 인증서 발급 컨테이너의 실행 환경과 설정이 로컬과 서버에서 달랐습니다.
• 해결 : Docker Compose 기반으로 웹 애플리케이션, Nginx, Certbot 구성을 분리하고 환경별 설정을 정리했습니다.
• 결과 : 배포 환경에서도 일관되게 실행되는 구조를 만들 수 있었고, 운영 환경 디버깅 경험을 쌓을 수 있었습니다.
Lessons Learned
이 프로젝트를 통해 웹 서비스를 실제로 운영 가능한 형태로 배포하려면 애플리케이션 코드뿐 아니라 웹 서버, 정적 파일 서빙, SSL 인증서, 운영 환경 구성까지 함께 고려해야 한다는 점을 배웠습니다.
Docker Compose를 활용해 애플리케이션, Nginx, Certbot을 분리하면서 컨테ㅣ너 기반 운영 구조를 이해할 수 있었고, Nginx Reverse Proxy를 통해 요청 라우팅과 정적 파일 처리를 직접 다뤄볼 수 있었습니다. 또한 HTTP에서 HTTPS로 전환하는 과정과 Certbot 인증서 발급 흐름을 경험하며, 로컬 개발 환경과 실제 운영 환경의 차이를 조정하는 배포 경험을 쌓을 수 있었습니다.