image.png

  1. Developer
    1. 로컬 개발 환경에서 코드 작성 및 GitHub에 push
  2. GitHub
    1. GitHub에 레포지토리에 존재하는 workflows파일에 의거하여 action 작동
    2. GitHub Actions는 CI/CD 파이프라인을 관리
    3. 우리 조에서는 PR이 닫히고, develop 브랜치에 머지가 된 것이 확인되면 action 작동함
  3. GitHub Actions
    1. GitHub Actions에서 빌드된 Spring Boot 프로젝트 이미지를 Docker Hub에 업로드함
    2. Docker Hub에 업로드된 Spring Boot 프로젝트 이미지를 EC2에서 내려받고 실행됨
  4. AWS EC2
    1. EC2 인스턴스로 애플리케이션을 배포함
    2. 애플리케이션들은 EC2위에 도커를 설치하여 여러 컨테이너로 관리
  5. Docker
    1. Spring
      • 백엔드 애플리케이션 → API 요청 처리
    2. Nginx
      • 백엔드 애플리케이션인 Spring에 들어오는 클라이언트의 요청을 Nginx에서 받고, 해당 요청을 다시 Spring에 전달함.
      • ↑ 리버스 프록시 역할
      • SSL 인증서 발급 및 https 설정 → 웹 서버와 클라이언트 간의 통신을 암호화
    3. Mysql
      • 데이터 저장 RDB
    4. Redis
      • 메모리 데이터 저장소 (우리 프로젝트에서는 리프레시 토큰 및 최근 검색어 저장 용도로 사용)
    5. Prometheus
      • Spring 프로젝트의 매트릭 데이터를 수집하고 저장 → 서버 상태, 애플리케이션 성능 등 모니터링 가능
    6. Grafana
      • Prometheus에서 수집한 매트릭 데이터를 시각화하여 대시보드 형태로 볼 수 있는 GUI 툴