-
Notifications
You must be signed in to change notification settings - Fork 3
Infrastructure Optimization
DongHoon Lee edited this page Aug 14, 2024
·
1 revision
-
AWS Amplify:
- AWS Amplify는 프론트엔드 애플리케이션의 배포 및 호스팅을 담당합니다. 이 시스템에서 프론트엔드 코드가 배포되며, 개발(
dev
)과 메인(main
) 브랜치에 따라 환경이 분리되어 관리됩니다.
- AWS Amplify는 프론트엔드 애플리케이션의 배포 및 호스팅을 담당합니다. 이 시스템에서 프론트엔드 코드가 배포되며, 개발(
-
RDS (MySQL):
- AWS RDS는 관리형 관계형 데이터베이스 서비스를 제공하며, 이 아키텍처에서는 MySQL을 사용합니다. 주로 애플리케이션의 주요 데이터(예: 사용자 정보, 애플리케이션 상태 등)를 관리하는 데 활용됩니다.
-
GitHub:
- GitHub는 소스 코드 저장소로, 백엔드 및 프론트엔드 코드를 관리합니다. 이 아키텍처에서는 Github Flow 전략이 사용됩니다.
dev
브랜치와main
브랜치의 코드가 이곳에서 관리되며, Jenkins를 통해 배포 파이프라인이 트리거됩니다.
- GitHub는 소스 코드 저장소로, 백엔드 및 프론트엔드 코드를 관리합니다. 이 아키텍처에서는 Github Flow 전략이 사용됩니다.
-
Jenkins CI/CD:
- Jenkins는 CI/CD 파이프라인을 구현하기 위해 사용됩니다. GitHub에 코드가 푸시되면 Jenkins가 이를 감지하고 빌드 및 배포 프로세스를 시작합니다.
-
dev
브랜치의 경우 개발 환경으로,main
브랜치의 경우 프로덕션 환경으로 배포가 진행됩니다.
-
Compute Engine:
- Google Cloud의 Compute Engine은 백엔드 서버를 위한 컴퓨팅 리소스를 제공합니다.
- Develop 환경과 Production 환경은 Blue-Green Deployment 전략을 통해 각각 두 개의 컨테이너로 구분되며, 이를 통해 서비스 중단 없이 새로운 버전의 코드를 배포할 수 있습니다.
-
Nginx:
- Nginx는 웹 서버 및 리버스 프록시로서, 사용자 요청을 적절한 백엔드 서버로 라우팅합니다. Nginx는 주로 로드 밸런싱과 정적 파일 제공에 사용되며, Blue-Green Deployment를 지원하기 위해 Green Container가 정상적으로 실행되면
sed -i
명령어로 포워딩 포트를 업데이트하는 전략을 사용합니다.
- Nginx는 웹 서버 및 리버스 프록시로서, 사용자 요청을 적절한 백엔드 서버로 라우팅합니다. Nginx는 주로 로드 밸런싱과 정적 파일 제공에 사용되며, Blue-Green Deployment를 지원하기 위해 Green Container가 정상적으로 실행되면
-
DB (Chatting):
- Redis와 MongoDB는 채팅 데이터를 처리하고 저장하는 데 사용됩니다. Redis는 주로 캐싱 및 세션 관리에 사용되며, MongoDB는 비정형 데이터를 저장하는 NoSQL 데이터베이스로 사용됩니다.
-
Fail2ban:
- Fail2ban은 보안 솔루션으로, 서버에 대한 SSH brute-force 공격을 탐지하고 차단합니다. 3회 이상 로그인 실패한 IP에 대해 영구적으로 접근을 차단하여 서버의 보안을 강화합니다.
-
Monitoring (ELK Stack):
- ELK Stack(ElasticSearch, Logstash, Kibana)은 애플리케이션 성능 모니터링(APM)과 로그 관리에 사용됩니다. ElasticSearch는 데이터를 저장하고 검색하며, Logstash는 로그를 수집하고, Kibana는 시각화 도구로 사용됩니다. 이를 통해 실시간으로 발생하는 오류 및 성능 문제를 모니터링하고 대응할 수 있습니다.
-
Blue-Green Deployment:
- Blue-Green Deployment는 서비스 중단 없이 새로운 애플리케이션 버전을 배포하는 전략입니다. 여기서
Blue
와Green
환경은 각각 서로 다른 배포 환경을 나타내며, 배포 후 테스트가 완료되면 트래픽을 새로운 버전으로 전환합니다.
- Blue-Green Deployment는 서비스 중단 없이 새로운 애플리케이션 버전을 배포하는 전략입니다. 여기서
- 개발자는 GitHub에 코드를 푸시합니다.
- Jenkins가 이를 감지하고, CI/CD 파이프라인을 통해 해당 코드를 빌드 및 배포합니다. 이때, 푸시한 브랜치(
dev
브랜치 또는main
브랜치)에 따라 다른 파이프라인이 작동합니다. - 프론트엔드 코드는 AWS Amplify를 통해 배포되며, 백엔드 코드는 Google Cloud의 Compute Engine 인스턴스에 배포됩니다.
- Blue-Green Deployment 전략에 따라 서비스 중단 없이 새로운 버전의 백엔드 애플리케이션이 배포됩니다.
- Nginx는 사용자의 요청을 적절한 백엔드 서버로 라우팅합니다.
- Redis와 MongoDB는 채팅 데이터와 관련된 작업을 처리합니다.
- Fail2ban은 서버를 보호하며, ELK 스택을 통해 시스템 모니터링이 이루어집니다.
- KakaoLogin 구현: Season 1에서는 소셜 로그인이 없었기 때문에 직접 회원가입을 해야 하는 불편이 있었습니다. 이를 개선하기 위해 카카오 로그인을 구현하여 사용자 인증 과정을 간소화했습니다.
- 메인 페이지 API 구현: 메인 페이지의 데이터를 제공하는 API를 개발했습니다.
- 다양한 버그 해결: 개발 과정에서 발생한 여러 버그를 신속하게 수정했습니다.
- 서버 환경 분리: 개발(Dev) 서버와 프로덕션(Prod) 서버를 분리하여 운영 환경의 안정성을 확보했습니다.
- CI/CD 파이프라인 구현: Jenkins를 활용하여 지속적 통합 및 지속적 배포(CI/CD) 파이프라인을 구축했습니다.
- Blue-Green 배포 전략 도입: 서비스 중단 없이 빈번한 배포가 가능하도록 Blue-Green Deployment 방식을 구현했습니다.
- Fail2ban 도입: SSH brute-force 공격에 대응하기 위해 Fail2ban을 도입하여 보안을 강화했습니다.
- ELK 도입 및 APM 설정: ELK 스택을 도입하여 애플리케이션 성능 모니터링(APM)을 설정하고, 실시간으로 발생하는 API 오류에 대한 대응책을 마련했습니다.
- 디스크 모니터링: 디스크 사용량을 모니터링하여 디스크 관리에 주의를 기울였습니다.
- SQL을 이용한 문제 해결: ELK에서 모니터링된 문제를 신속하게 해결하기 위해 SQL을 사용하여 데이터 삭제 작업을 수행했습니다.
- 근본 원인 분석 및 버그 수정: 문제의 근본 원인을 분석하고, 신속하게 버그를 수정하여 배포했습니다.
DB를 Google Cloud로 이관하려고 했으나, RDS에서 Google Cloud SQL로 일관성 있게 데이터를 이관하기 위해서는 CDC(변경 데이터 캡처) 기술이 필요했습니다. 그러나 이 방법은 비용과 시간이 많이 소요되기 때문에, 효율성을 고려하여 기존 RDS를 유지하기로 결정했습니다.