구성 이해
우선 프로젝트 배포 구성에 대해 먼저 소개해보려 한다.
프로젝트는 서버로 Spring Boot를, 클라이언트 환경으로는 React를 사용하여 구성되어 있다.
React는 사용자와의 상호작용을 담당하며, Nginx를 통해 서비스된다.
Spring Boot는 사용자 인증과 데이터 처리 등의 비즈니스 로직을 처리하고, 그 결과는 AWS RDS(MariaDB)에 저장된다.
Nginx는 AWS EC2 인스턴스에 위치하여, 클라이언트의 요청을 서버로 전달하고, 정적 자원을 제공하는 역할을 한다.
배포 과정에서는 Docker, EC2, 그리고 Github Actions을 사용한다.
Nginx, React, Spring Boot, Redis는 모두 Docker를 통해 배포된다.
Docker를 사용하기 위한 설정파일로는 React와 Spring Boot 각각의 Dockerfile이 있고, 전체 시스템을 위한 docker-compose.yml 파일이 있다.
시스템의 특정 브랜치에 변동사항이 푸시되면, Github Actions를 통해 이 파일들이 Docker Hub에 업로드 된다.
그 후, AWS EC2 인스턴스에서 docker-compose.yml 파일을 실행하여 배포를 완료한다.
프로젝트는 인증을 위해 JWT 토큰을 발급하고 이를 쿠키에 저장한다.
쿠키에 정보를 저장하기 위해 HTTPS 프로토콜을 사용한다.
AWS Certificate Manager를 이용해 SSL 인증서를 발급 받고, 이를 Nginx에 적용하여 HTTPS를 통해 웹 페이지를 운영한다.
마지막으로, 사용자가 웹 사이트 도메인(tovalley.site)을 입력하면, Amazon Route 53에서 해당 도메인을 Load Balancer의 IP 주소로 변환한다. 그리고 Load Balancer는 요청을 적절한 EC2 인스턴스로 라우팅한다.
VPC 구성 이해
본격적인 배포 설명에 앞서 VPC 구성에 대해 간단히 알고 넘어가도록 한다.
다음 링크는 내가 작성한 VPC 관련 글이다.
https://yenjjun187.tistory.com/885
현재 우리 프로젝트에서는 하나의 VPC만을 사용한다.
그리고 해당 VPC 내부에 EC2 인스턴스 하나와 RDS 하나를 위치시킨다.
이때, EC2 인스턴스와 RDS 각각의 보안 그룹을 설정하여 보안 그룹을 공유하지 않도록 한다.
보안 그룹을 공유하지 않는 이유는 다음과 같다.
1. 세분화된 보안 설정: 각 보안 그룹은 서로 다른 서비스에 대해 다른 접근 규칙을 설정할 수 있다. 예를 들어, 웹 서버인 EC2 인스턴스는 인터넷에서 접근이 가능하도록 설정할 수 있지만, 데이터베이스인 RDS는 EC2 인스턴스에서만 접근이 가능하도록 설정할 수 있다. 이를 통해 각 서비스의 특성에 맞는 보안 규칙을 세밀하게 설정할 수 있다.
2. 보안 강화: 하나의 보안 그룹에 문제가 발생하더라도, 다른 보안 그룹에는 영향을 미치지 않는다. 이는 각 서비스를 격리시켜 보안 위협을 최소화하는데 도움이 된다.
3. 관리의 용이성: 각 보안 그룹은 독립적으로 관리될 수 있으므로, 서비스별로 보안 정책을 쉽게 관리하고 업데이트 할 수 있다.
따라서, EC2 인스턴스와 RDS를 별도의 보안 그룹으로 분리하는 것은 좋은 보안 관행이다. 이를 통해 각 서비스의 보안 수준을 높이고 관리의 편의성을 높일 수 있다.
'기술 블로그 > ToValley' 카테고리의 다른 글
[Spring Boot + React]배포#5. AWS 보안 그룹 설정 (0) | 2023.12.17 |
---|---|
[Spring Boot + React]배포#4. AWS RDS 생성 및 설정 (1) | 2023.12.17 |
[EC2 + RDS + Docker + Spring Boot + React]배포#11. 문제 해결 과정 (0) | 2023.12.16 |
[Spring Boot + React]배포#3. AWS EC2 생성 및 설정 (0) | 2023.12.16 |
[Spring Boot + React]배포#1. 소개 (0) | 2023.12.15 |