Skip to content

개발운영환경분리

dldmsql edited this page Oct 28, 2023 · 1 revision

개발운영 환경 분리

배경

주말내집 서비스는 운영 환경만을 구성하여 출시 준비를 하고 있었습니다. MVP 중 커뮤니티 파트의 개발이 23년도 8월쯤 마무리되어 운영 환경으로 배포를 하였고, 작게나마 마케팅을 진행했습니다.

마케팅은 기획팀에서 담당하고 있으며, 주로 네이버 카페 | 네이버 밴드 | 인스타그램 | 페이스북 등을 이용해서 진행하고 있습니다.

2개월 간 마케팅을 하며 받은 피드백 중 일부입니다.

  • 테스트 데이터가 혼합된 사이트에 방문했을 때, 준비가 덜 된 느낌을 받았다.

해당 피드백을 받은 순간, 환경 분리의 필요성을 느끼게 되었습니다.

원인

프론트엔드에서 서버 측의 API를 테스트해볼 수 있는 환경이 운영 환경 뿐이며, 이로인해 연동 과정에서 발생한 테스트 데이터가 사용자에게 그대로 노출되는 문제가 발생하게 되었습니다.

  • 왜 처음부터 환경 분리를 하지 않았는가?

환경 분리를 고려했었으나, 출시까지 2대의 서버를 운영하면 한쪽은 유휴 자원이 되며 비용 발생 구간으로 작용하게 됩니다.

수익 구조가 형성되지 않아 서버 운영비를 팀에서 감당해야 했고, 비용 부담을 최대한 덜고자 환경 분리를 우선순위에서 가장 낮게 생각했습니다.

해결 과정

MVP 개발이 90% 정도 진행된 시점에서 앞으로의 유지보수와 추가 확장을 고려해 개발 환경을 추가적으로 세팅하였습니다.

아래부터는 그 과정에 대한 기록입니다.

  1. AWS 계정 분리

서버 파트에서 보유하고 있는 다른 계정에 유휴 자원을 활용하기로 했으며, 이로 인해 개발 환경과 운영 환경의 계정이 분리되어 있습니다.

A 계정 - 운영 환경 용 ( 주말내집 서비스의 핵심 인프라 구성요소가 있는 곳 )

B 계정 - 개발 환경 용 ( 단순 개발 AP 서버만 존재하는 곳 )

  1. 서브 도메인 생성 및 타 계정에 위임

Route 53에서 duaily.net 도메인에 대해 서브 도메인을 생성합니다. 그리고 이를 개발 서버로 향하도록 IP 주소를 연결해줍니다.

  1. 개발 환경 서버 세팅

EC2 내부에 Docker 컨테이너로 어플리케이션을 구동할 수 있게 관련 설정을 해줍니다. ( Docker 설치, JDK 설치, Nginx 설치 )

  1. CD 파이프라인 구축

develop 브랜치는 기능 개발 브랜치의 병합 지점으로 두고, qa 브랜치를 별도로 만들어 개발 환경 서버로 배포하는 지점을 추가했습니다.

정리하면, Git Branch 전략은 아래와 같습니다.

[main] <- [qa] <- [dev] <- [기능개발]

main : 운영환경 서버 배포

qa : 개발환경 서버 배포

dev : 기능 개발 브랜치 병합 시, CI 수행 ( 테스트 및 커버리지 측정 )

github actions를 이용해 CD 파이프라인을 구축하였으며, 운영 환경과 달리 docker를 이용해 어플리케이션을 빠르게 구축하고자 했습니다.

운영환경은 Codedeploy + s3 조합으로 배포합니다. codedeploy와 s3 세팅 대신 docker로 간편하고 빠르게 구축하고자 했습니다.

CD 파이프라인 코드는 여기를 참고해주시기 바랍니다.

  1. 프론트엔드 소스 코드 배포 파이프라인 구축

프론트엔드 측의 소스 코드가 EC2 내부에 위치해야 Nginx를 통해 해당 파일을 사용자에게 제공할 수 있습니다.

따라서 자동으로 배포할 수 있도록 환경 세팅을 했습니다. 이를 위해 Codedeploy와 s3의 추가 설정이 진행되었습니다.

CodeDeploy에 배포 그룹과 권한 부여, S3에 버킷 생성, IAM 키, EC2 내부에 정적 코드가 위치할 디렉토리, Nginx config 설정 과정이 필요합니다.

  1. SSL 인증서 발급 및 HTTPS 적용

운영 환경에서 HTTPS 기반으로 하기에 개발 환경에서도 동일하게 구성해야 했습니다. 이를 위해 SSL 인증서를 발급 받고, 서브 도메인에 서버 IP 주소 대신 ALB를 연결해 포트 포워딩을 하였습니다.

443으로 들어오면 80으로 보냅니다.

회고

운영을 목적으로 하는 서비스의 경우, 환경 분리가 필수적이라는 것을 다시금 깨달았습니다.

주말내집 서비스의 인프라 세팅을 직접 담당하지 않았어서 표면적으로만 이해하고 있던 설정들을 개발 환경 세팅을 하며 직접 해보면서 현재 서비스의 구성에 대해 이해를 다지는 시간이었습니다.

초기 인프라 세팅을 해주신 @태민님의 기록을 참고하며 진행했습니다. 😊

Clone this wiki locally