콘텐츠로 이동

ADR-0017 — Dev 환경 AWS → 온프레미스 이전

Context

  • 기존 Dev 백엔드는 AWS(EC2 프리티어 + RDS MySQL the_edu + ECR), 도메인 api.dev.d-edu.site로 운영 (teams/engineering/infra/architecture §7).
  • 프리티어 만료 후 EC2/RDS 상시 과금이 발생하고, IAM·VPC 등 직접 제어에 제약이 있었음.
  • 사무실에 상시 가동 서버가 있어 Dev 환경을 온프레미스로 옮기면 클라우드 비용을 제거할 수 있는 상황.
  • 동시에 백/프 ADR-0003 모노레포(mvp-mono) 통합 + 프론트 Vercel 배포 전환이 진행됨.

Decision

Dev 환경을 온프레미스로 이전한다. 운영(Prod)은 AWS Lightsail 유지.

  1. Dev 백엔드 → 온프레 Docker: the-edu-staging(Spring, GHCR 이미지, staging 프로파일) + mysql_dev(MySQL 8.4) + theedu_redis, docker network theedu_backend, Cloudflare 터널(apidev.d-edu.site, ssh.d-edu.site), self-hosted GitHub Actions runner.
  2. Dev 프론트 → Vercel: 모노레포 mvp-front/front-sync-mirror.yml(subtree split) → public 미러 the-edu-project → Vercel 자동 배포(dev.d-edu.site). (private 모노레포를 Vercel에 직접 연결하지 않기 위함.)
  3. 데이터 마이그레이션: AWS RDS the_edumysqldump → 온프레 mysql_dev(dedu). (member 266 / study_room 416 이관 완료.)
  4. AWS S3 theedu 유지: 미디어 presigned URL에 온프레 백엔드도 계속 사용 (deploy에 AWS_* 키 주입).
  5. AWS Dev EC2/RDS 삭제: 이전·검증 완료 후 삭제. 최종 스냅샷 dev-onpremise-260531 보관.
  6. 인증 정합: staging GitHub Environment에 온프레용 시크릿(DB_URL=mysql_dev, KAKAO/NAVER_REDIRECT_URI=apidev) 설정. 쿠키 도메인 .d-edu.site, CORS dev.d-edu.site.

Consequences

긍정 - AWS Dev EC2/RDS 상시 과금 제거. 인프라·데이터 직접 제어. - 코드·기획·인프라 설정이 모노레포 한 트리에 → 풀스택 변경/리뷰 일원화.

부정 / 후속 과제 (TODO)teams/engineering/infra/architecture §6: 1. theedu_backend 네트워크 단일 소유자 부재 — 앱(docker run) vs DB/Redis(compose) 혼용. 네트워크 재생성 시 컨테이너 간 통신 단절 장애가 1회 발생함. → 최상위 compose 일원화 필요. 2. 온프레 MySQL 자동 백업 부재 — RDS 자동백업이 사라짐. 데이터가 볼륨 1곳에만. → 정기 mysqldump + off-box 백업 구축 필요. 3. 모니터링·알림 부재 — 온프레 다운 인지 불가. → Prometheus/Loki/Grafana 재구축. 4. deploy 롤백 로직 — 인프라 장애 시 OLD_IMAGE 롤백 무의미 → 알림+중단으로 보완. 5. AWS back-deploy-aws.yml deploy-dev job 잔존 — dev EC2 삭제로 develop 머지 시 실패. 비활성화 필요(deploy-prod는 운영용으로 유지).

Alternatives

  • AWS 유지(프리티어 2계정 / 스펙업): 비용 지속 + 관리 부담. 기각.
  • Dev도 Lightsail: 운영과 동일 패턴이나 여전히 클라우드 과금. 사무실 서버 여유분 활용이 더 경제적이라 기각.
  • 프론트도 온프레: Vercel의 자동 배포·프리뷰 이점이 커 프론트는 Vercel 유지.

Status

accepted (2026-06-01)