서비스를 운영해봤다면 피할수 없는 배포.. 퍼먹어보자.
이번 글은 나를 비롯한 까비 팀원들이 배포..가 머임. 왜되는거임 어떤 구조인거임 에 대한 혼선을 줄이기 위해 작성됐다.
이전에 개인 프로젝트나 Cabi를 하며 AWS, Docker를 다뤄본 경험 + 폭풍검색을 통해 작성한 글이라
틀린 정보가 있다면 무수한 훈수 부탁드림니다. 반박시 진짜로 님 말이 맞음
우선, 당연히 궁금할 수 있다!에 대한 빠른 답변
1.
배포가 머에요??
a.
개발된 애플리케이션을 님만(local) 쓰지말구,
사용자(또는 서버)가 사용할 수 있는 환경(AWS EC2 등..)에 올리기
2.
시스템 아키텍쳐는 머에요?
a.
소프트웨어가 어떤 구성 요소로 이루어져있고, 어떻게 연결되었는지 설계한 구조
3.
난 push만햇는데 ㄷㄷ 배포는 누가하는거임?
a.
짧게는 Github Action + AWS CodeDeploy 염
4.
CI/CD는 뭐고, 왜 하는거에요?
a.
개발~배포 과정 자동화 → 빠르고 안정적으로 불편한 반복작업 줄이기
b.
CI : Continuous Integration, 지속통합
→ 개발자들이 merge/push 후 자동으로 빌드 & 테스트 수행, 통합 문제를 배포되기 전에 조기에 발견
여기선 Github Actions가 코드 푸시 후 자동 빌드 & 이미지 생성 과정이겟다
c.
CD: Continuous Delivery / Deployment, 지속전달/배포
→ 자동화 방식으로 배포 가능한 상태의 코드를 서버에 올리거나, 서비스 배포까지 자동으로 진행
AWS CodeDeploy가 이미지 배포 & EC2에서 서버 재시작하는 과정
5.
아 맨날 배포하고나면 서버가 잠깐 꺼지네.. 502는 맨날 떠.. 에러임?
a.
그 상황이면.. 아니요.
번외)무중단 배포?
1.
단일 인스턴스니까 Nginx 리버스 프록시 + 포트 스위칭???
Cabi의 시스템 아키텍쳐
최종 목표
위의 까비 구조도를 완벽하게 이해해보자!
이를 위해 알아볼 것은,
1.
Cabi의 백엔드 구조는 무엇들로 이루어져 있을까?
2.
로컬 환경에서 스크립트(build.sh인가?)를 실행하면, 왜 백엔드 서버가 짠 하고 잘 돌아가있는걸까?
3.
dev 혹은 main 브랜치에 push만 했는데 왜 백엔드서버가 짠 하고 다 돌아가 있는걸까?
누가 몰래 가서 스크립트 돌렸나?
a.
Github Actions → workflows 설명, CodeDeploy → deploy 스크립트 구조
b.
Docker-Compose 구조와 DockerFile
4.
로컬에서는 컨테이너가 Redis - MariaDB - Nginx를 쓰는데
dev, prod는(Spring Boot - Redis - PinPoint)로 이루어져있다. 왜 다른 구조를 쓸까?
근데 Grafana, Prometheus는 조상님이 돌려주나?
5.
config 폴더? submodule이 머임? 왜 얘 관련으로 dev나 prod 브랜치에서 pull-push 하면 배포를 안하는 것임? 나 코드 변경은 없는데 config 변경점 있어서 다시 서버 시작해야함!!
가 있다.
1,2,3 한덩어리 4, 5 각각 쓰기