기능 |
기술 후보 |
선택한 기술 |
해당 기술을 선택한 이유 |
보류된 기술의 보류 사유 |
동시성 제어 |
- Redis |
|
|
|
- Pessimistic Lock
- STM | Redis | - 높은 성능과 확장성
- 단일 스레드 아키텍처와 원자성 보장, 분산 락 관리 등의 기능을 통한 동시성 제어 | Pessimistic Lock
- 락으로 인한 병목 현상 발생 가능성,
- 복잡한 동기화 로직과
- 데드락 회피 로직 필요에 따른 설계의 복잡도 증가
- 데드락 방지와 성능향상을 위한 개발 비용 큼
STM
- 수직적 확장의 필요에 따른 비용 증가
- 큰 러닝 커브 |
| 성능 테스트 | - Artillery
- Apach JMeter
- K5 | Artillery | - yml/yaml 파일을 사용하여 부하테스트 스크립트를 간단하게 작성할 수 있으며, 커스텀 스크립트를 등록하여 다양한 형태의 부하테스트가 가능함.
- config 파일을 통한 일관된 환경에서의 테스트 가능.
- 테스트 과정이 빠르고 cloud를 통해 보고서를 그래프 등 시각적으로 확인 가능함.
- socket.io를 포함한 다양한 프로토콜 지원 | - Java가 필요하여 여러 팀원이 함께 사용하기에 무리가 다소 있음
- Socket.io 테스트 지원이 되지 않음 |
| CI/CD | - GitHub Actions
- Jenkins
- Tekton | GitHub Action | - 클라우드에서 작동하므로 어떤 설치 과정이나 설정이 필요하지 않는다.
- 모든 GitHub이벤트에 대해 GitHub Actions를 제공하고 있으며 많은 언어와 프레임워크를 지원한다.
- YAML 파일 작성으로 따로 배포 파이프라인 문법을 학습할 필요가 없다. | |
| 게시물 검색 | - ELK
- QueryBuilder | ELK | - logstash의 jdbc를 통한 메인DB 동기화 및 Elasticsearch 검색 기능
- Elasticsearch 강력한 인덱싱과 Full-text search를 통한 빠른 검색 및 높은 정확도 제공
- 데이터셋이 커질때 자동화된 노드 추가를 통한 손쉬운 스케일 아웃 | |
| 로깅 및 모니터링 | - EFK
- ELK
- PLG | ELK | - 강력한 데이터 변환/처리 기능
- Elasticsearch의 분산처리 및 클러스터 확장 시스템
- 뛰어난 확장성으로 대규모 로그 관리에 용이함 | |
| DB | - MySQL
- PostgreSQL
- MongoDB | PostgreSQL | - 복잡한 쿼리에 특화된 처리 능력
- 레플리카를 통한 read 확장
- 파티셔닝을 통한 데이터 관리
- 뛰어난 언어 호환성
- 확장 가능한 아키텍쳐로 인한 복잡한 시스템 구축 | |
| 판례 검색 및 추천 | - Sentence Transformer
- GPT 3.5
- Google Gemma | Sentence Transformer | - 문장 또는 문단을 벡터 표현으로 변환하는데 특화된 BERT 모델을 사용한 라이브러리
- 유사한 판례를 보다 정확하게 찾아줄 수 있음
- 비용이 많이 들지 않음 | |
| 채팅 | - Socket.io
- WebSocket | Socket.io | - 연결이 끊길 경우 자동으로 재연결을 시도하기 때문에 고가용성 측면에서 유리.
- 룸 기능의 구현 복잡성이 낮아, 채팅 기능 확장에 있어 유리한 점이 많음.
- Redis Pub/Sub와 호환성이 좋음
- room을 많이 구현 하는 상황에서 쓰기 적합하다 | |
| 투표 | - Socket.io
- Polling | Socket.io | - 연결이 끊길 경우 자동으로 재연결을 시도하기 때문에 고가용성 측면에서 유리.
- 룸 기능의 구현 복잡성이 낮아, 채팅 기능 확장에 있어 유리한 점이 많음.
- Redis Pub/Sub와 호환성이 좋음
- room을 많이 구현 하는 상황에서 쓰기 적합하다 | |
| 채팅 알림 | - Redis
- Apach Kafaka | Redis | - pub/sub 기능을 활용하여 실시간으로 메시지를 교환할 수 있음, 상대적으로 가벼움
- 구현이 Kafka에 비해 비교적 쉽다.
- 이미 인메모리에서 Redis를 사용중이라 유지보수 하기가 수월하다. | |
| 투표 알림 | - FCM
- WebPush
- Socket.io + Redis(Pub/Sub) | FCM | - 플랫폼이나 브라우저 환경에 종속되지 않고 푸쉬메세지를 전송할 수 있다.
- 클라우드 메시징 서버를 중간에 둠으로써, 네트워크 사용만으로도 실시간으로 송수신 처리할 수 있다. | |