| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 도메인설계
- Kotlin
- 소셜로그인
- JWT
- github actions
- sqlite
- python
- typescript
- 아키텍처
- contextBridge
- 마이그레이션
- next.js
- React
- Android
- Vite
- electron
- 상태관리
- REST API
- 메일자동화
- php
- playwright
- 크롤링
- 배포
- FastAPI
- 프론트엔드
- 보안
- 백엔드
- 온디바이스AI
- 인증
- javascript
- Today
- Total
HM소프트
Docker + CI/CD 배포와 메일 알림 구현 — 교육 플랫폼 (3) 본문
검사·빌드·통합 테스트·배포 네 관문으로 파이프라인을 나누고, 키 파일 없이 단기 토큰으로 레지스트리에 인증한다. 해시·latest 두 태그로 롤백을, 다단계 빌드로 가벼운 이미지를, 진입 스크립트의 DB 대기로 기동 경합을 잡는다. SMTP 메일은 백그라운드로 보내 응답 속도를 지킨다.
Docker와 CI/CD로 배포를 자동화하고 메일 알림을 붙인 과정을 정리한다.

3편: 배포·운영·알림
1편 상품·필터, 2편 인증에 이어 시리즈 마지막이다. 만든 커머스를 실제 서비스로 올리는 일 — Docker 컨테이너화, CI/CD 자동 배포, 클라우드 스토리지, 도메인/HTTPS, 그리고 메일 알림이다.
컨테이너화와 CI/CD
배포를 손으로 하면 매번 실수가 난다. Docker로 컨테이너화하고 GitHub Actions로 CI/CD 파이프라인을 구축했다. 코드를 푸시하면 빌드 → 이미지 생성 → 배포까지 자동으로 돈다.
# GitHub Actions — 푸시 시 빌드·배포 (개요)
on: { push: { branches: [main] } }
jobs:
deploy:
steps:
- uses: actions/checkout@v4
- run: docker build -t app:latest .
- run: # 이미지 푸시 & 서버 배포
Docker 배포를 처음 적용하며 만난 이슈들(빌드 환경 차이, 경로 등)을 잡았다. 컨테이너로 묶으니 "내 PC에선 되는데 서버에선 안 됨" 문제가 사라졌다.
클라우드 스토리지(GCS)와 API 최적화
상품 파일·이미지는 서버 디스크가 아니라 클라우드 스토리지(GCS)에 두도록 했다. 서버는 가볍게 유지하고, 파일은 스토리지가 맡는다. 함께 API를 최적화해, GCS 전용 설정으로 정리했다.
도메인과 HTTPS
서비스를 실제 도메인에 연결하고 HTTPS를 적용했다. 커머스는 결제·로그인이 오가므로 HTTPS는 필수다. 도메인 연결과 인증서 적용으로 보안 연결을 확보했다.
메일 알림 — Gmail SMTP
커머스는 "주문했어요", "취소됐어요" 같은 알림이 필요하다. Gmail SMTP로 이메일 알림 시스템을 구현하고, 주문 취소·회원 탈퇴 같은 흐름에 UI와 알림을 붙였다.
import smtplib
from email.mime.text import MIMEText
def send_notification(to: str, subject: str, body: str):
msg = MIMEText(body, "html")
msg["Subject"], msg["To"] = subject, to
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as s:
s.login(SMTP_USER, SMTP_APP_PASSWORD) # 앱 비밀번호 사용
s.send_message(msg)
Gmail SMTP는 일반 비밀번호가 아니라 앱 비밀번호를 써야 하고, 발송량 제한이 있다. 초기 단계 플랫폼엔 충분했고, 별도 메일 인프라 없이 빠르게 알림을 붙일 수 있었다.
플랫폼 기능 전면 확장
배포 기반을 갖춘 뒤, 운영에 필요한 기능을 한 번에 확장했다.
- 배너/팝업: 프로모션·공지 노출
- 문의·공지: 고객 소통
- 이용권: 구매·사용 관리
- 관리자 CRUD: 위 모든 걸 운영자가 관리
또한 관리자 페이지 반응형을 전면 적용하고, 모바일 터치 타깃 크기·회원가입 오버플로우 같은 모바일 UX와 PDF 미리보기·모바일 메뉴를 개선했다. 운영자도 사용자도 모바일에서 쓸 수 있어야 했다.
정리하며
- Docker + GitHub Actions로 배포 자동화 — 푸시하면 배포까지.
- GCS로 파일을 분리, 서버는 가볍게.
- 도메인·HTTPS로 커머스 필수 보안 연결.
- Gmail SMTP로 빠르게 메일 알림(앱 비밀번호·발송 제한 유의).
- 배너/팝업·문의·이용권·관리자 CRUD + 반응형으로 운영 기능 완성.
시리즈를 마치며
세 편에 걸쳐 교육 자료 판매 플랫폼을 정리했다.
- 1편: 상품·카테고리 도메인과 복합 필터
- 2편: 소셜 로그인과 bcrypt 함정
- 3편: Docker·CI/CD 배포와 메일 알림
커머스는 "상품을 보여주고 결제받는" 핵심 못지않게, 분류·인증·배포·알림 같은 기반을 갖춰야 비로소 굴러간다는 걸 보여준 프로젝트였다.
'외주 개발일지' 카테고리의 다른 글
| FastAPI None 직렬화 500 에러 해결 — 검색·소셜인증 API 설계기 (2) (0) | 2026.06.13 |
|---|---|
| 파이썬 Selenium 크롤러와 스케줄러 — 데이터 수집 자동화 (1) (0) | 2026.06.13 |
| 네이버·카카오 소셜 로그인 구현과 bcrypt 함정 — 교육 플랫폼 (2) (0) | 2026.06.13 |
| 상품·카테고리 도메인 설계와 복합 필터 구현 — 이커머스 백엔드 (1) (0) | 2026.06.13 |
| TipTap 에디터·인증·E2E 테스트 구현 — 연구기관 사이트 (3) (0) | 2026.06.13 |