Skip to content

Commit

Permalink
Merge branch 'dev' into dev-fe
Browse files Browse the repository at this point in the history
  • Loading branch information
baegyeong authored Dec 5, 2024
2 parents e36bcee + e9d2e02 commit db28e9f
Show file tree
Hide file tree
Showing 83 changed files with 2,919 additions and 1,710 deletions.
8 changes: 8 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,12 @@ module.exports = {
},
],
},
overrides: [
{
files: ['**/*.spec.ts'],
rules: {
'max-lines-per-function': 'off',
},
},
],
};
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,10 @@ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# remote
.remote

# .zip, .mst
*.zip
*.mst

# remote
.remote
206 changes: 185 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,202 @@
# web17-juchumjuchum
# 주춤주춤

![juchumjuchum](https://github.com/user-attachments/assets/5f66cf11-95b4-48a6-8ca4-5e839b45f2d2)
![juchumjuchum](https://github.com/user-attachments/assets/08f462d3-3f47-4566-bb36-b96ccf320450)

## 💡 서비스 개요
<b>📊 초보 투자자를 위한 실시간 주식 정보 커뮤니티 서비스</b>

주춤주춤은 주식 초보자들이 투자를 하기 위한 정보를 번거로운 과정없이 알 수 있도록 해주는 서비스입니다.
> 주춤주춤은 주식 초보자들이 투자를 하기 위한 정보를 번거로운 과정없이 알 수 있도록 해주는 서비스입니다.
실시간 채팅과 푸쉬 알림을 통해 투자 정보를 쉽게 확인하고 소통할 수 있도록 돕습니다. 직관적인 UI를 통해 번거로움 없이 주식 투자에 필요한 정보를 제공합니다.
<p align="center"><a href="https://juchum.info">✨ 서비스 바로가기</a></p>

## 📚 참고 자료
<div align="center">
<a href="https://dev-sunghwki.notion.site/95d18b1ae29e4cd984d711426efe84f7?pvs=4">노션</a> &nbsp; | &nbsp; <a href="https://www.figma.com/design/g24Tzu1RQUtANxwSYyP8HA/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85?node-id=11-2&t=O2Vt04TqwOkzH7A2-1">피그마</a> &nbsp; | &nbsp; <a href="https://juchum.info/api/">API 명세</a> &nbsp; | &nbsp; <a href="https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki">위키</a>
</div>

| Notion 전체 링크 | 회의록 |
|:---:|:---:|
|[![image](https://github.com/user-attachments/assets/38ad678d-4eef-4e5e-b151-70dcca6f76bc)](https://dev-sunghwki.notion.site/95d18b1ae29e4cd984d711426efe84f7?pvs=4)|[회의록](https://www.notion.so/dev-sunghwki/a8eb8a943cd144adb33efccbffcc9e4b?v=908f02e84c6b45098b8a820867f40d49)|
<br/>

## 👨‍🎓 팀원 소개
## 목차

| Backend | Backend | Backend | Frontend |
|:---:|:---:|:---:|:---:|
| ![img](https://github.com/xjfcnfw3.png) | ![img](https://avatars.githubusercontent.com/u/52474291?v=4) | ![img](https://github.com/demian-m00n.png) | ![img](https://github.com/baegyeong.png) |
| [김민수](https://github.com/xjfcnfw3) | [김성환](https://github.com/swkim12345) | [문설민](https://github.com/demian-m00n) | [조배경](https://github.com/baegyeong) |
[📢 서비스 특징](#📢-서비스-특징)
<br/>
[🚀 페이지 소개](#🚀-페이지-소개)
<br/>
[⚙ 시스템 아키텍쳐](#⚙-시스템-아키텍쳐)
<br/>
[🎯 기술 스택](#🎯-기술-스택)
<br/>
[💻 실행 방법](#💻-실행-방법)
<br/>
[👨‍🎓 팀원](#👨‍🎓-팀원)

## 🚀 협업
<br/>

[ ![img](https://app.gather.town/images/spinner.png) </br> <b >게더타운 링크</b>](https://app.gather.town/app/lsoBY69eB0S1eQCC/boostcamp-Web17)
## 📢 서비스 특징

## 📏 그라운드 룰
### 시간 단위로 확인하는 주식 차트

[📏 그라운드 룰](https://dev-sunghwki.notion.site/80e2671e62e6478687ed03ce092792b7?pvs=4)
<img src="https://github.com/user-attachments/assets/2948a58f-c373-4d7e-b606-4f1077bbb21f" width="400"/>

## 🎨 기획/디자인 링크
주식마다 시간단위(일, 주, 월, 년)의 가격, 거래량을 확인할 수 있습니다.
<br/>
주식 그래프를 좌우로 움직였을 때 빠르게 이전 데이터를 불러올 수 있습니다.

[와이어프레임 & 디자인](https://www.figma.com/design/g24Tzu1RQUtANxwSYyP8HA/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85?node-id=11-2&node-type=canvas&t=ljPfdEB64qH127wm-0)
#### 기술적 도전

## 회의록
1️⃣ 그래프의 스크롤 범위에 따라 일정량의 데이터를 받아오기 위해서 **무한스크롤**을 적용했습니다.

[📎 수많은 그래프 데이터 요청을 어떻게 줄일까](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%A7%AA-%EC%88%98%EB%A7%8E%EC%9D%80-%EA%B7%B8%EB%9E%98%ED%94%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9A%94%EC%B2%AD%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A4%84%EC%9D%BC%EA%B9%8C)

2️⃣ 제한된 요청 수를 조절하고 오류에 대응할 수 있도록, 생산자 소비자 패턴을 적용하였습니다.

[🧊 우선순위 큐로 요청 제어하기](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%A7%8A-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%ED%81%90%EB%A1%9C-%EC%9A%94%EC%B2%AD-%EC%A0%9C%EC%96%B4%ED%95%98%EA%B8%B0)

3️⃣ 웹소켓을 관리할 때 오류를 대응하기 위해 큐를 통해 외부서비스에 대한 구독을 관리했습니다.

[🔌 websocket이 늦게 할당되어 발생되는 문제](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%94%8C-websocket%EC%9D%B4-%EB%8A%A6%EA%B2%8C-%ED%95%A0%EB%8B%B9%EB%90%98%EC%96%B4-%EB%B0%9C%EC%83%9D%EB%90%98%EB%8A%94-%EB%AC%B8%EC%A0%9C)

<br/>

### 실시간 채팅

<img src="https://github.com/user-attachments/assets/46397d2e-0202-45d9-bf20-9b00282737db" width="350" />

주식 종목마다 존재하는 채팅방에 접속하여 실시간 소통을 할 수 있습니다.
<br/>
공감이 가는 글에는 좋아요도 가능합니다.

#### 기술적 도전

- 웹소켓으로 받아오는 실시간 채팅 데이터와, REST API로 받아오는 누적 데이터를 다루기 위한 상태 관리 전략을 고민했습니다.

[👊 웹소켓의 채팅 데이터와 REST API의 채팅 데이터를 함께 관리하기](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%91%8A-%EC%9B%B9%EC%86%8C%EC%BC%93%EC%9D%98-%EC%B1%84%ED%8C%85-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-REST-API%EC%9D%98-%EC%B1%84%ED%8C%85-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%95%A8%EA%BB%98-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0)

<br/>

### 맞춤형 알림

관심 있는 종목의 주요 변동 사항을 푸쉬 알림으로 즉시 확인할 수 있습니다.

#### 기술적 도전

- typeorm 이벤트 구조를 통한 FCM 알림 서비스를 구현하였습니다.

[🥳 typeorm을 이용한 FCM 알림 서비스](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%A5%B3-typeorm%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-FCM-%EC%95%8C%EB%A6%BC-%EC%84%9C%EB%B9%84%EC%8A%A4)

<br/>

### 초보자를 위한 주식 용어 설명

![tooltip](https://github.com/user-attachments/assets/6331f0ef-9361-497c-a41f-d7f62fcf64f4)

초보자에게는 어려운 주식 용어를 쉽게 설명하기 위한 툴팁을 제공합니다.

<br/>

## 🚀 페이지 소개

### 주식 메인

![](https://github.com/user-attachments/assets/409d700a-b83d-4f40-bbb6-97e3c251e878)

- 한국투자증권 API를 통해 데이터를 수집 했습니다.
- 지수 지표(코스피, 코스닥, 원 달러 환율)를 제공합니다.
- 조회수 순으로 종목을 추천합니다.
- 등락률 순으로 차트를 제공합니다.

<br/>

### 주식 상세

![](https://github.com/user-attachments/assets/2b447667-fda0-4f0a-9c25-9ddb97693b51)

- Trading View를 사용한 시간별 그래프로 쉽게 주식 정보를 확인할 수 있습니다.
- 해당 종목의 실시간 지표를 제공합니다.
- 즐겨찾기 개념의 주식을 모의로 보유할 수 있습니다.
- 주식 소유자들과 실시간 종목별 채팅을 할 수 있습니다.
- 자신이 원하는 주가, 거래량에 맞춰 개별주식마다 알림 설정을 할 수 있습니다.

<br/>

### 주식 종목 검색

<img src="https://github.com/user-attachments/assets/6d44d8d0-fac5-4d39-9355-d13fbdc2701d" width="350"/>

- 사이드바의 검색 버튼을 통한 간편한 검색을 지원합니다.
- 검색 결과 요청 시 로딩 인디케이터를 통한 UX적으로 미려한 로딩바를 보여줍니다.

<br/>

### 다크모드 지원

![](https://github.com/user-attachments/assets/6ac3506f-5db3-4054-801d-2e63eda5a72a)

- 모든 화면에 대해 다크모드 지원합니다.
- 로그인 된 사용자를 위한 라이트 / 다크모드를 저장할 수 있습니다.

<br/>

### 로그인 및 마이페이지

| ![](https://github.com/user-attachments/assets/dc1db8f6-bcdd-4999-ac94-1a157b73d0ef) | ![](https://github.com/user-attachments/assets/ed5a7f42-9e70-4e31-9ac4-db9dd6e19e84) |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |

- 구글 로그인과 게스트 로그인을 제공합니다.
- 마이페이지에서는 닉네임 수정, 알림 내역 확인, 소유 주식 확인 및 삭제가 가능합니다.

<br/>

## ⚙ 시스템 아키텍쳐

<img src="https://github.com/user-attachments/assets/f670f644-753c-4e49-ae6f-e3d1afa8fbe6" width="500" />

<br/>

## 🎯 기술 스택

| 분야 | 기술 |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| FE | <img src="https://img.shields.io/badge/react-61DAFB?style=for-the-badge&logo=react&logoColor=black"> <img src="https://img.shields.io/badge/tailwind css-06B6D4?style=for-the-badge&logo=tailwind css&logoColor=white"> <img src="https://img.shields.io/badge/tanstack query-FF4154?style=for-the-badge&logo=reactquery&logoColor=white"> <img src="https://img.shields.io/badge/vite-646CFF?style=for-the-badge&logo=Vite&logoColor=white"> |
| BE | <img src="https://img.shields.io/badge/nestjs-E0234E?style=for-the-badge&logo=NestJS&logoColor=white"> <img src="https://img.shields.io/badge/TypeORM-FE0803?style=for-the-badge&logo=TypeORM&logoColor=white"> <img src="https://img.shields.io/badge/WebSocket-010101?style=for-the-badge&logo=websocket&logoColor=white" alt="WebSocket Badge" /> |
| Infra | <img src="https://img.shields.io/badge/GitHub%20Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white" alt="GitHub Actions Badge" /> <img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=Docker&logoColor=white"> <img src="https://img.shields.io/badge/NGINX-009639?style=for-the-badge&logo=nginx&logoColor=white" alt="NGINX Badge" /> <img src="https://img.shields.io/badge/Naver%20Cloud-03C75A?style=for-the-badge&logo=naver&logoColor=white" alt="Naver Cloud Badge" /> |
| DB | <img src="https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=MySQL&logoColor=white"> |
| Common | <img src="https://img.shields.io/badge/socket.io-010101?style=for-the-badge&logo=socket.io&logoColor=white"> <img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript Badge" /> <img src="https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge&logo=eslint&logoColor=white" alt="ESLint Badge" /> <img src="https://img.shields.io/badge/Prettier-F7B93E?style=for-the-badge&logo=prettier&logoColor=white" alt="Prettier Badge" /> <img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white" alt="GitHub Badge" /> <img src="https://img.shields.io/badge/yarn-2C8EBB?style=for-the-badge&logo=yarn&logoColor=white" alt="GitHub Badge" /> |

[🚩 FE 기술 선택 이유](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%9A%A9-FE-%EA%B8%B0%EC%88%A0-%EC%84%A0%ED%83%9D%EC%9D%B4%EC%9C%A0)

[📡BE 기술 선택 이유](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%93%A1-BE-%EA%B8%B0%EC%88%A0-%EC%84%A0%ED%83%9D-%EC%9D%B4%EC%9C%A0)

[🛠️인프라 기술 선택 이유](https://github.com/boostcampwm-2024/web17-juchumjuchum/wiki/%F0%9F%9B%A0%EF%B8%8F-%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%83%9D-%EC%84%A0%ED%83%9D-%EC%9D%B4%EC%9C%A0)

<br/>

## 💻 실행 방법

### 실행

```bash
git clone https://github.com/boostcampwm-2024/web17-juchumjuchum.git

yarn install

yarn client run
```

### docker compose

```bash
# deploy/template.env 수정
# 이후 deploy/.env로 수정
# deploy 폴더 내에서 실행

docker compose up -d

```

<br/>

## 👨‍🎓 팀원

| Backend | Backend | Backend | Frontend |
| :-------------------------------------: | :----------------------------------------------------------: | :----------------------------------------: | :--------------------------------------: |
| ![img](https://github.com/xjfcnfw3.png) | ![img](https://avatars.githubusercontent.com/u/52474291?v=4) | ![img](https://github.com/demian-m00n.png) | ![img](https://github.com/baegyeong.png) |
| [김민수](https://github.com/xjfcnfw3) | [김성환](https://github.com/swkim12345) | [문설민](https://github.com/demian-m00n) | [조배경](https://github.com/baegyeong) |
4 changes: 4 additions & 0 deletions packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"@nestjs/swagger": "^8.0.5",
"@nestjs/typeorm": "^10.0.2",
"@nestjs/websockets": "^10.4.8",
"async-mutex": "^0.5.0",
"axios": "^1.7.7",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.1",
Expand All @@ -46,6 +47,7 @@
"socket.io": "^4.8.1",
"typeorm": "^0.3.20",
"unzipper": "^0.12.3",
"web-push": "^3.6.7",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0",
"ws": "^8.18.0"
Expand All @@ -62,6 +64,7 @@
"@types/passport-local": "^1.0.38",
"@types/supertest": "^6.0.0",
"@types/unzipper": "^0.10.10",
"@types/web-push": "^3.6.4",
"@types/ws": "^8.5.13",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
Expand All @@ -73,6 +76,7 @@
"supertest": "^7.0.0",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.3",
"ts-mockito": "^2.6.1",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
Expand Down
Loading

0 comments on commit db28e9f

Please sign in to comment.