1. 전체 아키텍처 설명
GCP(google cloud), AWS를 사용해서 프론트엔드, 백엔드, 데이터베이스가 분산된 클라우드 환경에서 통합되어 동작하는 시스템이다. 각 시스템들은 모두 docker위에서 실행되며 언제든지 재실행, 복구가 될 수 있도록 dockerfile, voulume을 설정해뒀다.
사실처음에는 aws ec2 프리티어만 사용해서 모든걸 올리려고 시도했었다. 하지만 프리테어에서 제공되는 ram은 1GB, 정상적으로 작동되는 서비스에서 늘릴수있는 가상ram 2GB를 합쳐도 카산드라 혼자먹는 2.7GB의 ram을 감당할수 없기 때문에 gcp로 분리를 하기로 했다. 이번프로젝트에서 느낀 aws과 gcp의 차이가 있다.
- aws :
성능이 매우 제한적 제한적인만큼 비용이 매우 적게듬 프로젝트 배포가 시작되고 지금글을 적는 시간까지도 1달러를 사용하지 않았다. - gcp :
성능을 원하는데로 설정가능 한것이 매우 장점 또한 저장소를 사용하다보면 용량이 부족할 수도 있는데 이를 확장하는 것이 매우 편리 하지만 기본 제공량을 넘기면 서버 이전을 고려해야한다는 번거로움
2. Front-End
프론트 시스템 아키텍처는 이렇게 생겼다. 지금은 db의 compute Engine과 통합이 되어있다. (비용에 의해서) DB의 compute랑 프론트 서버의 compute를 다르게 고려했었다. 이유는 각각 다른 하드웨어적 요구사항을 가지고있다고 생각했다.
React, Node.js, NGINX, Jenkins, Docker, GCP, Docker
React는 GCP위의 Docker컨테이너 위에서 실행되며 3000 port로 사용자에게 배포된다.
nginx를 통해서 도메인으로 서버의 port를 가린다.
3. Back-End
백엔드 시스템 아키텍처는 이렇게 생겼다.
Spring Boot, Docker, AWS EC2
AWS EC2의 Docker 위에서 Spring백엔드가 작동된다.
8080 port로 프론트엔드에서 접근할 수 있도록 한다.
4. Database & Caching
Cassandra, Redis, PostgreSQL, Docker, GCP
AWS EC@의 프리티어 성능이 부족해서 DB는 프리티어에서 비교적 성능이 뛰어나게 설정할수 있는 GCP에 올리기로 결정.
Cassandra : 9042 거래 로직에서 사용한다.
PostgreSQL : 5432 메인 DB로 사용한다.
Redis : 6379 사용자 인증, 방 매칭에 사용한다.
5. CI/CD 파이프라인
Jenkins, Gradle, AWS EC2, GCP, Docker
백엔드, 프론트 엔드 자동 CI/CD를 위해 설계했다.
github의 main branch가 변경될 경우 CI/CD를 9000포트로 보내서 젠킨스가 gradle로 빌드를 하고 spring컨테이너를 만들어서 spring을 배포하게 된다. 프론트엔드의 경우는 react를 배포하게 된다.
6. 코드 관리 및 협업
GitHub, Discord, Figma, ERD diagram, google Docs
GitHub를 사용해서 소스 코드 관리 및 버전을 컨트롤했고 Github의 issue, wiki등을 사용해서 일정관리, 문서관리를 진행했다.
Discord를 사용해서 알람을 관리했다. Github에서 발생하는 개발진이 빠르게 확인해야하는 request, response, pull request, push 같은 일이 일어났을때 알람을 만든다.
젠킨스에서 발생하는 빌드 알람 또한 알람으로 받아온다.
성공시 변경 내용을 알려준다. 클릭하면 jenkins로 들어갈 수 있다.
실패시 몇번째 빌드가 실패했는지 알려준다. 동일하게 클릭시 jenkins로 들어갈 수 있다.
또한 개발자들이 참고한 각종 링크, 래퍼런스, 공유해야하는 내용등을 여러 채널로 관리했다.
Figma를 통해서 프론트엔드 기초적인 화면을 정의했다. 기본적인 css 및 라우팅을 어떤식으로 할지 정의했고 각 컴포넌트가 페이지의 어디에 위치할지 정의했다
Erd Diagram으로 전체적인 DB스키마 및 관계를 정의했고
명세서를 google Docs로 작성했다.
7. 개발 환경
vscode : 프론트 엔드
IntelliJ IDEA : 백엔드
각각 plugin들이 어느 개발툴이 더 다양한가, 어떤걸 팀원들이 편해하나를 고려해 정했다.
8. 그래서 끝났나?
프로젝트 기간은 종료됐지만 완전 프로젝트가 종료된건 아니다. 팀원들과는 계속 소통하면서 고도화를 해 나가기로 했다.
'Project : 그때 살껄;;.. > 개발일지' 카테고리의 다른 글
[멋쟁이사자처럼 백엔드 TIL/ 그때 살껄;;..] 디스코드 Github 알림 (0) | 2024.08.26 |
---|---|
[멋쟁이사자처럼 백엔드 TIL/ 그때 살껄;;..] 거래 시스템 설계 (2) | 2024.08.17 |
[멋쟁이사자처럼 백엔드 TIL/ 그때 살껄;;..] Auth + Test + CORS + Header + Swagger Error (0) | 2024.08.09 |
[멋쟁이사자처럼 백엔드 TIL/ 그때 살껄;;..] Security + JWT (0) | 2024.08.05 |
[멋쟁이사자처럼 백엔드 TIL/ 그때 살껄;;..] 프로젝트 초기 설계 (0) | 2024.08.05 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간