Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/boostcampwm2023/web09-magicconch
당신만의 특별한 타로체험! 매력적인 애니메이션과 함께 어디서나 편안하게 즐겨보세요🔮🌠
https://github.com/boostcampwm2023/web09-magicconch
ai-chatbot blue-green-deployment interactive-web socket-io webrtc
Last synced: 6 days ago
JSON representation
당신만의 특별한 타로체험! 매력적인 애니메이션과 함께 어디서나 편안하게 즐겨보세요🔮🌠
- Host: GitHub
- URL: https://github.com/boostcampwm2023/web09-magicconch
- Owner: boostcampwm2023
- Created: 2023-11-06T01:28:59.000Z (about 1 year ago)
- Default Branch: dev
- Last Pushed: 2024-05-16T14:24:40.000Z (6 months ago)
- Last Synced: 2024-11-08T02:10:22.603Z (6 days ago)
- Topics: ai-chatbot, blue-green-deployment, interactive-web, socket-io, webrtc
- Language: TypeScript
- Homepage: http://web09-magicconch.pages.dev
- Size: 13.3 MB
- Stars: 21
- Watchers: 4
- Forks: 0
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
AI•실시간 화상 타로 상담 플랫폼, 마법의 소라고둥
🌠매력적인 애니메이션과 함께 즐기는🌠
🔮AI•실시간 화상 타로 상담🔮
"한 번쯤은 타로 점을 쳐보고 싶지만, 시간과 돈을 투자하면서 보긴 귀찮아..."
걱정하지 마세요!
AI 타로 상담사와 함께 언제 어디서든 무료로 타로 상담을 즐길 수 있어요 💫
원하는 타로 상담사와 실시간 화상 타로 상담도 가능하답니다.
고민이나 궁금증, 어떤 주제든 자유롭게 이야기해보세요 🌌
함께 나누는 이야기를 통해, 더 나은 미래를 상상하는 시간이 되길 바라요 🔮
생동적인 애니메이션과 함께, 당신만의 특별한 타로 체험을 즐겨보세요 ✨
## 목차
- [🚀 핵심기능](#-핵심기능)
- [AI와의 채팅을 통해 타로점을 볼 수 있어요.](#ai와의-채팅을-통해-타로점을-볼-수-있어요)
- [실제 타로 전문가에게 화상 타로 상담을 받을 수 있어요.](#실제-타로-전문가에게-화상-타로-상담을-받을-수-있어요)
- [기술적 도전](#기술적-도전)
- [멀티 어플리케이션 구축](#멀티-어플리케이션-구축)
- [블루/그린 무중단 배포](#블루그린-무중단-배포)
- [클로바 API를 이용한 AI 채팅](#클로바-api를-이용한-ai-채팅)
- [WebRTC를 이용한 P2P 통신](#webrtc를-이용한-p2p-통신)
- [인터렉티브한 애니메이션](#인터렉티브한-애니메이션)
- [우당탕탕 이슈 해결기 💦](#우당탕탕-이슈-해결기-)
- [BE](#be)
- [야 너두 무중단 배포 할 수 있어 🫵](#야-너두-무중단-배포-할-수-있어-)
- [SWAG하게 Swagger 사용하는 법 🤟 (Feat. Swagger 데코레이터를 위한 패키지 만들기)](#swag하게-swagger-사용하는-법--feat-swagger-데코레이터를-위한-패키지-만들기)
- [FE](#fe)
- [인터랙티브 웹: 카드 애니메이션](#인터랙티브-웹-카드-애니메이션)
- [🐻 Context API, Provider 지옥 그리고 귀여운 곰돌이 🐻](#-context-api-provider-지옥-그리고-귀여운-곰돌이-)
- [🚀 복잡함을 단순하게, 더 나은 경험으로 🚀](#-복잡함을-단순하게-더-나은-경험으로-)
- [FE / BE](#fe--be)
- [UX를 위해 AI 채팅 반응 속도를 84.87%까지 개선한 방법 😎](#ux를-위해-ai-채팅-반응-속도를-8487까지-개선한-방법-)
- [소켓 아이고 😇 (Feat. socket.io는 파싱을 해)](#소켓-아이고--feat-socketio는-파싱을-해)
- [시스템 아키텍처](#시스템-아키텍처)
- [기술 스택](#기술-스택)
- [🔮🥛 타로 밀크티 소개](#-타로-밀크티-소개)
## 🚀 핵심기능
### AI와의 채팅을 통해 타로점을 볼 수 있어요.
> 사용자가 AI에게 자신의 고민을 자유롭게 이야기하면, 고민 내용을 바탕으로 타로 상담을 진행합니다.
> 고민 상담 후 사용자가 타로 카드를 뽑으면, AI가 해당 결과를 설명합니다.
> 사용자는 타로점 결과를 링크나 카카오톡으로 공유할 수 있습니다.![2](https://github.com/boostcampwm2023/web09-MagicConch/assets/43428643/13e7072a-3850-4b21-839e-506529008cb1)
### 실제 타로 전문가에게 화상 타로 상담을 받을 수 있어요.
> 타로 전문가와 직접 대면으로 만나지 않고 온라인 상에서 편하게 상담을 받을 수 있습니다.
> 전문가는 상담을 위한 채팅방을 생성하여 사용자를 초대합니다.
> 사용자는 해당 채팅방에 접속하여 타로 상담을 받을 수 있습니다.![image](https://github.com/boostcampwm2023/web09-MagicConch/assets/43428643/add8464f-10e5-4df3-9624-7606da8aaba3)
## 기술적 도전
### 멀티 어플리케이션 구축
- 도커 컴포즈로 멀티 어플리케이션 환경을 구성하여 여러 개의 서비스를 한 번에 실행하고 관리합니다.
- nginx를 활용하여 URL에 따라 서로 다른 서비스를 프록시합니다.### 블루/그린 무중단 배포
- 블루/그린 무중단 배포를 통해 신규 버전의 배포 과정에서 발생하는 다운타임을 최소화합니다.
- 도커의 캐싱 옵션을 활용하여 빌드 시간을 최적화합니다. 이전 빌드 캐시를 재사용하여 빌드 시간을 단축합니다.
- graceful shutdown으로 파일 입출력과 데이터베이스 커넥션 작업을 안전하게 종료합니다.
- health check로 새로운 어플리케이션이 정상적으로 실행되고 정상적인 응답을 제공할 수 있는지 확인한 후에 트래픽을 전환하여 서비스 중단을 방지합니다.
- 배포를 수행하는 쉘 스크립트를 에러 핸들링하여 시스템 안정성을 확보합니다. 배포 과정에서 오류가 발생하면 즉시 중단되어 기존 시스템에 영향을 미치지 않습니다.### 클로바 API를 이용한 AI 채팅
- 클로바 API로부터 응답을 받아올 때, 기존의 요청-응답 방식 대신 스트림 형태로 받아옵니다. 이를 통해 사용자가 처음 응답을 받기까지 걸리는 시간을 최소화 합니다.
- 스트림을 토큰 단위로 클라이언트에게 전달하여 AI와 실시간으로 채팅하는 듯한 사용자 경험을 제공합니다.### WebRTC를 이용한 P2P 통신
- WebRTC API를 활용하여 서버에 부담을 주지 않고 실시간 P2P 커뮤니케이션을 지원합니다.
- 데이터 채널을 통해 이미지, 메세지 등 다양한 종류의 파일을 주고 받습니다.### 인터렉티브한 애니메이션
- 카드가 펼쳐지고 회전하는 등의 생생한 애니메이션으로 실제로 타로를 보는 듯한 현장감을 제공합니다.
## 우당탕탕 이슈 해결기 💦
> 타로 밀크티의 기술적 도전과 이슈 해결 기록
### BE
#### [야 너두 무중단 배포 할 수 있어 🫵](https://github.com/boostcampwm2023/web09-MagicConch/wiki/%EC%95%BC-%EB%84%88%EB%91%90-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC-%ED%95%A0-%EC%88%98-%EC%9E%88%EC%96%B4-%F0%9F%AB%B5)
#### [SWAG하게 Swagger 사용하는 법 🤟 (Feat. Swagger 데코레이터를 위한 패키지 만들기)]()
### FE
#### [인터랙티브 웹: 카드 애니메이션](https://github.com/boostcampwm2023/web09-MagicConch/wiki/%EC%9D%B8%ED%84%B0%EB%9E%99%ED%8B%B0%EB%B8%8C-%EC%9B%B9:-%EC%B9%B4%EB%93%9C-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98)
#### [🐻 Context API, Provider 지옥 그리고 귀여운 곰돌이 🐻](https://github.com/boostcampwm2023/web09-MagicConch/wiki/%F0%9F%90%BB-Context-API%EC%99%80-Provider-%EC%A7%80%EC%98%A5%EA%B3%BC-%EA%B7%80%EC%97%AC%EC%9A%B4-%EA%B3%B0%EB%8F%8C%EC%9D%B4-%F0%9F%90%BB)
#### [🚀 복잡함을 단순하게, 더 나은 경험으로 🚀](https://github.com/boostcampwm2023/web09-MagicConch/wiki/%F0%9F%9A%80-useWebRTC%ED%9B%85-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-%EC%97%AC%EC%A0%95:-%EB%B3%B5%EC%9E%A1%ED%95%A8%EC%9D%84-%EB%8B%A8%EC%88%9C%ED%95%98%EA%B2%8C,-%EB%8D%94-%EB%82%98%EC%9D%80-%EA%B2%BD%ED%97%98%EC%9C%BC%EB%A1%9C-%F0%9F%9A%80)
### FE / BE
#### [UX를 위해 AI 채팅 반응 속도를 84.87%까지 개선한 방법 😎](https://github.com/boostcampwm2023/web09-MagicConch/wiki/UX%EB%A5%BC-%EC%9C%84%ED%95%B4-AI-%EC%B1%84%ED%8C%85-%EB%B0%98%EC%9D%91-%EC%86%8D%EB%8F%84%EB%A5%BC-84.87%25%EA%B9%8C%EC%A7%80-%EA%B0%9C%EC%84%A0%ED%95%9C-%EB%B0%A9%EB%B2%95-%F0%9F%98%8E)
#### [소켓 아이고 😇 (Feat. socket.io는 파싱을 해)]()
## 시스템 아키텍처
![magic_conch-system architecture drawio](https://github.com/boostcampwm2023/web09-MagicConch/assets/70785620/702bf135-c0fd-441a-9f92-5e4aba002007)
## 기술 스택
구분
기술 스택
common
frontend
backend
DB
CI/CD
deployment
others
🔗 기술 선택 이유
## 기술 스택 세부사항
| Category | Tech Stack | Description | 기술 블로그 링크 |
| --------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 인프라 | VPC, Server | 가상 네트워크 환경으로 보안상 안전한 환경에서 서버 운영하기 | [NCP 인프라 구축하기](https://season-broccoli-784.notion.site/NCP-e10722589ba444a7a179494e372fac5d?pvs=74) |
| DB | MySQL, Redis, TypeORM |
| CI/CD | Docker, Nginx, Shell Script, GitHub Actions |
| 테스트 | Jest, supertest, Vitest | 단위 테스트와 e2e 테스트를 진행하여 코드가 예상대로 동작하는지 확인하기 | [Jest와 Supertest로 코드 동작 테스트하기](https://season-broccoli-784.notion.site/Jest-Supertest-d4291e1dbdd84f36956c5eb4c65fcf82) |
| 로깅 | Winston | 로그를 체계적으로 기록하여 개발 및 유지보수성 향상하기 | [winston과 sentry로 서버가 터지는 이유 분석하기](https://www.notion.so/winston-sentry-slack-webhook-0a3f3d6ec066430ca49090e23eccdafb?pvs=4) |
| 상태 관리 | Zustand |
| P2P 통신 | WebRTC, socket.io |
## 🔮🥛 타로 밀크티 소개
> 타로 밀크티는 **FE 3명 & BE 1명** 으로 구성되어 있어요!!
>
> 인원 불균형을 해결하기 위해 FE 팀원들의 ✨ **풀스택 도전** ✨이 담겨 있어요~
덕분에 BE 팀원은 처음 해보는 배포와 인프라를 성공적으로 마칠 수 있었습니다 🥰
>
> 자세한 담당 업무는 [여기](https://github.com/boostcampwm2023/web09-MagicConch/wiki/팀-소개)를 확인해주세요 👍
J027
J028
J072
J165
김유정
김유진
송민형
허지예
Backend
Frontend
Frontend
Frontend