-
Notifications
You must be signed in to change notification settings - Fork 1
기술 선정 근거
edder773 edited this page Dec 3, 2024
·
8 revisions
- 컴포넌트 기반 구조: 재사용성과 유지보수성
- Angular는 규약 기반으로 개발을 강제
- 가상 DOM: 변경된 부분만 업데이트하여 성능 최적화
- Angular는 양방향 데이터 바인딩으로 인해 큰 애플리케이션에서 성능 저하를 겪을 수 있음
- 광범위한 생태계: 리액트 라우터, 상태 관리 라이브러리, UI 라이브러리 등 풍부한 툴과 라이브러리 지원
- Angular는 풀 프레임워크로 많은 기능을 내장
- 그에 비해 필요한 라이브러리를 선택할 수 있어 유연성이 크고 개발자 경험이 우수함.
- JSX: JavaScript와 HTML을 혼합한 JSX 문법을 통해 선언적이고 직관적인 UI 작성 가능
- 핫 리로딩: 상태 변경 시 브라우저에서 즉시 반영되어 개발 속도를 빠르게 유지
- 정적 타입 검사
- 코드 가독성 및 유지보수성
- 개발자 경험 개선
- 동적 타입의 단점 해결
- 초기 학습이 필요하지만, 장기적으로 안정성과 효율성을 높이기 위해 프로젝트에서 사용하기로 선정.
- 빠른 빌드 속도
- 빠른 개발 환경 구성
- 코드 변경시, 즉각적인 반영
- 간단한 설정
- 별도의 라이브러리 없이 React에서 기본 제공
- 상태가 자주 업데이트 되지 않고, 다른 컴포넌트에 간단히 전달할 때 적합.
- 프로젝트에서 전역 상태 관리가 필요한 곳이 많지 않으며 자주 업데이트 되지 않기 때문에 사용하기로 선정.
- → 상단 바 - 금액, 로그인
- 일관된 디자인
- 빠른 스타일링
- 유연한 커스터마이징
- 사용자 정의 클래스 (네이밍) 필요없음
- css 중복 코드 감소
- 반응형 디자인 지원
- 초기 학습이 필요하지만 빠른 작업 속도와, 중복 코드를 줄이기 위해서 사용하기로 선정.
- Express와 달리 미리 정의된 아키텍처와 구조가 강제됨
- 여러 사람이 공동으로 작업하는 프로젝트에서는 컨벤션을 유지하여 일관성 증가에 유리
- 서로의 코드를 쉽게 이해할 수 있고 유지 보수성 증가
- Express와 달리 타입스크립트에 초점을 두어 유연하게 사용할 수 있음
- 정적 타입 검사, 타입 안정성 증가 등의 이점
- 로깅, 테스팅, Swagger 사용에 강점
- 데코레이터 기반 코드 작성으로 코드 가독성 및 유지보수성 확보 가능
- 추가적인 라이브러리 없이 WebSocket, REST API 등 다양한 전송 프로토콜 기본 지원
- 실시간 양방향 통신
- 서버와 클라이언트가 동시에 데이터를 주고받을 수 있는 양방향 연결을 지원
- 클라이언트의 요청 없이도 서버가 주도적으로 데이터 푸시 가능
- 연결 지속성
- 한 번 연결된 이후 매번 새로운 연결을 할 필요가 없다.
- 오버헤드를 줄일 수 있다.
- 더 나은 성능
- 실시간으로 변하는 호가창, 주식 가격 등의 정보를 주고받는 데 효율적이다.
- 주기적으로 서버에 상태 확인 요청 없이 즉각적으로 응답을 제공할 수 있다.
- WebSocket은 API의 요청-응답 대비 시간 지연 없이 데이터 전송 가능
- 일방향 데이터 전송
- 서버가 클라이언트로 일방향 데이터 스트리밍 가능
- 알림과 같이 서버가 일방적으로 클라이언트에게 데이터 전송하는 경우
- 장점
- 주요 브라우저에서 기본적으로 SSE를 지원하여, 간편하게 구현 가능
- 지속 연결로 인해 API 대비 자원 소모 없음
- api 설계 및 문서화 도구로 항상 최신 상태를 유지할 수 있는 문서
- 프론트엔드 백엔드 간 원활한 소통 도구로 사용 가능
- Swagger UI를 사용하여 API를 웹에서 직접 테스트 가능
- API 설계를 표준화하고 일관성을 유지하는 데에 도움
- Timescale DB 통합 지원
- Timescale DB는 PostgreSQL 위에서 작동하며 시계열 데이터 관리에 최적화.
- 주식 가격, 체결 데이터와 같은 시계열 데이터 저장 및 처리 효율성 향상.
- 시계열 데이터 관리 최적화
- Hypertable 구조로 데이터 분할 및 관리 자동화.
- 대용량 시계열 데이터 처리 성능 우수.
- 시계열 데이터 압축 및 보존 정책 설정 가능.
- 관계형 데이터베이스의 유연성
- PostgreSQL의 강력한 관계형 데이터 모델 활용.
- 주문 데이터, 사용자 데이터 등 정형 데이터와 시계열 데이터를 하나의 서버에서 관리.
- 초고속 데이터 처리
- 메모리 기반으로 빠른 오더북 조회 및 현재 가격 응답 가능.
- Sorted Set 활용
- 오더북 관리에 최적화된 자료구조 제공.
- 가격 우선 매칭 알고리즘 구현 용이.
- 실시간 데이터 캐싱
- 현재 가격과 오더북을 캐싱하여 DB 부하 감소.
- 빈번한 데이터 조회 시 성능 보장.
- Pub/Sub 기능
- 체결 알림, 가격 변동 이벤트를 실시간으로 전파.
- 사용자 알림 및 UI 업데이트에 활용 가능.
- VM과 대비하여 자원 소비가 가벼움
- VM은 하드웨어 자원을 별도로 할당해야 하는 특징
- Docker는 애플리케이션과 라이브러리만 포함되어 있어 효율적인 자원 관리 가능
- 배포 과정에서 Docker 이미지로 관리하기 때문에 더욱 가벼움
- 테스트 환경에서 즉시 시작이 가능하므로 시작 시간이 빠름
- 이미지를 통해 관리하는 개발 환경으로 일관된 개발 환경 제공
- 이미지를 기반으로 플랫폼 간 이식성 제공
- 매우 활발한 커뮤니티 생태계를 보유하여 참고 자료가 많음
- 통합된 환경
- GitHub Actions는 GitHub와 완벽하게 통합되어 별도의 도구 설치 없이 리포지토리에서 바로 CI/CD 설정 가능.
- Jenkins는 외부 도구를 설치하고 설정해야 하며, GitHub와의 통합을 위해 추가 플러그인과 설정이 필요.
- 설정 용이성
- GitHub Actions는
yaml
파일로 설정을 관리하여 코드와 CI/CD 설정을 같은 리포지토리에서 관리. - Jenkins는 UI나 XML 기반 설정을 사용해야 하며, 복잡한 설정은 관리가 어려울 수 있음.
- GitHub Actions는
- 유연성
- GitHub Actions는 GitHub 이벤트에 따라 자동 트리거가 가능하고, 다양한 액션을 쉽게 사용할 수 있어 유연함.
- Jenkins는 플러그인 기반으로 다양한 기능을 지원하지만, 설정과 커스터마이징이 복잡할 수 있음.
- 빠른 실행 속도
- GitHub Actions는 GitHub 인프라에서 실행되어 빠르고 효율적.
- Jenkins는 서버 성능에 따라 실행 속도가 달라질 수 있음.