[StockHub]
๐ ํ๋ก์ ํธ ์๊ฐ
Web Site https://stockhub.co.kr/
Stock Hub๋ ๋ด๊ฐ ์ ํํ ์ข
๋ชฉ์ ๋ํ ๋งค์ ์๊ฒฌ์ ๊ณต์ ํ๋ ์ฅ์์
๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ์๋ค๋ก๋ถํฐ ๊ฒ์๊ธ์ ๋ํ ํ๊ฐ๋ฅผ ๋ฐ๋ ๊ฒ์ ๋ฌผ๋ก , ๊ฒ์๊ธ ์์ฑ ์์ ๋ถํฐ์ ์์ต๋ฅ ๋ ๋ณด์ฌ์ค์!
์ฌ๊ณ ์ถ์ ์ข
๋ชฉ์ด ์๋๋ฐ, ๋ด ์๊ฐ์ด ๋ง๋์ง ํ์ ์ด ์๋ค๋ฉด Stock Hub์ ๊ณ ์๋ค์๊ฒ ๊ฒ์ฆ์ ๋ฐ์๋ณด์์ฃ !
์จ์ด์๋ ๋ฐฉ๊ตฌ์ ์ ๋๋ฆฌ์คํธ๋ค์ด ๋ง์๊ป ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๋ ๊ทธ๋ ๊น์ง ํ์ดํ
์
๋๋ค!
ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋ฐ ํ๊ฒฝ
2022/06/24 ~ 2022/08/05
FrontEnd : React
BackEnd : SpringBoot
์์ด์ดํ๋ ์
ํผ๊ทธ๋ง
https://www.figma.com/file/xg1wpWqkAv4cK4DIYlfHjV/%ED%95%AD%ED%95%B499_StockHub?node-id=0%3A1
ํ ๋
ธ์
๋
ธ์
https://swift-pelican-d17.notion.site/StockHub-3192bde33d57493da00ff60d3f3645a3
ํ์์๊ฐ
์๋น์ค ์ํคํ
์ฒ
โ ์ฃผ์ ๊ธฐ๋ฅ
- ๊ฒ์๊ธ ์์ฑ/์ญ์ : KOSPI/KOSDAQ ์์ฅ ์ฃผ์์ ํ ๊ฐ์ง ์ ํํ์ฌ ๊ทธ ์ฃผ์์ ๋ํ ๋งค์ ์๊ฒฌ์ ๊ฒ์
- ์ฐฌ๋ฐ ํฌํ: ํ์ธ์ ๊ฒ์๊ธ์ ๋ํด ์ฐฌ์ฑ/๋ฐ๋์ ํฌํ๋ฅผ ํ์ฌ ๋๋ ์์ ํ์ฌ ๊ฐ๋ฅ
- ๋๊ธ ์์ฑ/์ญ์
- ์์ต๋ฅ ๊ธฐ๋ก: ๊ฒ์๊ธ์ด ์์ฑ ์์ ๋ถํฐ ๊ฒ์๊ธ ์กฐํ ์์ ๊น์ง์ ์์ต๋ฅ ์ ํ์
- ๊ธฐ์ฌ ํ์: ๊ฒ์๊ธ ํด๋น ์ข
๋ชฉ๋ช
์ผ๋ก ๊ฒ์ํ์ ๋ ๋์ค๋ ๋ค์ด๋ฒ ๊ธฐ์ฌ๋ฅผ ํ์
- ๋ชจ์๋ณด๊ธฐ: ๋ณธ์ธ ๋ฐ ํ ์ ์ ์ ๊ฒ์๊ธ์ ๋ชจ์๋ณด๊ธฐ
- ๊ฒ์๊ธ ๊ฒ์ : ํด๋น ํค์๋๊ฐ ๋ค์ด๊ฐ ๊ฒ์๊ธ ๊ฒ์ ๊ธฐ๋ฅ ( ๋์ด์ฐ๊ธฐ๋ก ์ค๋ณต ๊ฒ์์ด ์
๋ ฅ ๊ฐ๋ฅ )
- ์ธ๊ธฐ๊ธ ๊ฒ์ํ ๋ฑ๋ก: 1) 3ํ ์ด์์ ์ฐฌ์ฑ ํ๋ฅผ ํ๋ + 2) 2๋ฐฐ์ ์ด์์ ์ฐฌ์ฑ/๋ฐ๋ ๋น์จ ๋ฌ์ฑ
- ์์ต์ ๊ฒ์ํ ๋ฑ๋ก: 5% ์ด์์ ์์ต๋ฅ ๋ฌ์ฑ
- ํ์ ๋ฆฌ๋ฏธํธ: ์์ต๋ฅ ๊ธฐ๋ก์ ์ผ์ ๊ธฐ๊ฐ ํ์ ๋ฉ์ถ๋ ๊ธฐ๋ฅ (2์ฃผ, 1๊ฐ์, 3๊ฐ์, 6๊ฐ์, 1๋
, 2๋
, 3๋
)
- ๋ชฉํ ์์ต๋ฅ : ๊ฒ์๊ธ ์์ฑ ์ ๋ชฉํ์์ต๋ฅ ์ค์ (+10%, +20%, + 30%, +50%, +100%, +150%, +200%)
- ๋ฉ์ธ ๋ฐฐ๋: ์ข
ํฉ ์ฃผ๊ฐ ์ง์ ์ ๋ณด๋ฅผ ๋ฐฐ๋์ ํ๋ฅด๋ ํํ๋ก ๊ฒ์
- ์ฃผ๊ฐ ์ฐจํธ: ๊ฒ์๊ธ ํด๋น ์ข
๋ชฉ์ 1๋
์น ์ ์ฐจํธ, ์ผ๋ด์ฐจํธ ํ์
- ๋ญํฌ ์์คํ
: ๊ฒ์๊ธ/๋๊ธ ์์ฑ ์ค์ ๊ณผ ์ธ๊ธฐ๊ธ ๋ฌ์ฑ ์
์ ์ ์ ์ํ ํด์ ๋ญํฌ ์์คํ
์ ์ ์ฉ (์ ์
0์ - ์ด๋ณด 10์ - ์ค์ 100์ - ๊ณ ์ 200์ - ์ง์กด 500์ / ๊ฒ์๊ธ ์์ฑ +30์ , ๋๊ธ ์์ฑ +5์ , ์ธ๊ธฐ๊ธ ๋ฌ์ฑ +50์ )
- ์๋ฆผ ๊ธฐ๋ฅ: ์ธ๊ธฐ๊ธ/์์ต์ ๋ฌ์ฑ, ๋๊ธ, ์ฐฌ๋ฐํฌํ ๋ฑ์ ๋ํ ์๋ฆผ
- ์ฑํ
๋ฐฉ: ๋ก๊ทธ์ธํ ์ ์ ๋ค๋ผ๋ฆฌ ํ ๋ก ํ ์ ์๋ ์ฑํ
๋ฐฉ
๊ธฐ์ ์คํ ๋ฐ ์ ์ ์ด์
:boom: Frontend
๊ธฐ์ ์คํ
์ ์ ์ด์
* CloudFront
* ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ด์ ๋ https ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ๊ธฐ ์ํจ์
๋๋ค.
* ๊ตญ๋ด ์ฃผ๊ฐ๋ง ๋ณด์ฌ์ฃผ๋ ๋งํผ ํ๋ก์ ํธ์ ํ๊ฒ์ ๊ตญ๋ด ์ฑ์ธ์
๋๋ค. ๋ฐ๋ผ์ CloudFront CDN ์๋น์ค๊ฐ ๊ผญ ํ์ํ ํ๋ก์ ํธ๋ ์๋๋ผ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ผ์๋ CDN ์๋น์ค์ ๋ฉ๋ฆฌํธ๊ฐ ์๋ค๋ ์ ๊ณผ amplify , vercel ๋ค์ํ ํ๋ณด๋ค ์ค ์ฐ๊ฒฐ๋ง ํ๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋๋ ํ๊ฒฝ๊ณผ ๋ค๋ฅด๊ฒ github action์ ์ด์ฉํด์ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ค๋ ์ ์์ ํ๋ ๋ ํ์ตํด๋ณด๊ณ ์ถ๋ค๋ ์์ฌ์ผ๋ก CloudFront๋ฅผ ์ ํํ๊ฒ ๋์ต๋๋ค.
* React-Query
* ํญํด ์ ๋ฐ์ ์ธ ๊ณผ์ ์์ ์ฌ์ฉํ๋ redux-thunk๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ์๋ก์ด ๊ธฐ์ ์คํ์ ๋๋ ค๋ณด๊ณ ์ถ๋ค๋ ์์ฌ๊ณผ ์ฐํํํ
ํฌ์ธ๋ฏธ๋์์ React Query ์์์ ๋ณด๊ณ ํธ๊ธฐ์ฌ์ ๊ฐ๊ฒ ๋์ต๋๋ค.
* ์ด๋ฐ ๊ธฐํ ๋น์ ์ค์๊ฐ ์ฃผ๊ฐ ๋ฐ์ดํฐ ๋ฑ **์ค์๊ฐ**์ ๋ชฉํ๋ก ํ๊ณ ์์๊ธฐ ๋๋ฌธ์, store์ ์ ์ฅํ๋ ๊ฒ์ด ์๋, ์ ์ฐํ refetch๋ฅผ ์ฌ์ฉํ ์ ์๋ query๊ฐ ์ ์ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
* Recoil
* MVP ๊ฐ๋ฐ ๋น์์๋ ์ต์ํ Redux๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ํ์คํ ์ํ๊ด๋ฆฌ์ ๋ฐ์ดํฐ ํ๋ก์ฐ๋ฅผ ๊ทธ๋ฆด ์ ์๋ค๋ ์ฅ์ ์ด ์์ผ๋ฉด์, ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๋ง๋ค๋ ๋จ์ ์ ๋๊ผ์ต๋๋ค.
* ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ react-query๋ฅผ ์ด์ฉํ๋ค๋ณด๋ ๋ฐ์ดํฐ ํ๋ก์ฐ์ ์ฅ์ ์ด ์ฌ๋ผ์ก๊ณ , ์ํ๊ด๋ฆฌ์ ํ์์ฑ ๋ํ ์ ์ด์ก์ต๋๋ค. ๊ทธ๋์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์
ํ๊ธฐ๋ก ๊ฒฐ์ฌํ์ต๋๋ค.
* redux๋ณด๋ค ๊ฐ๋ณ๊ณ ์ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฆฌ์์นํ์ฌ Context API, mobX, recoil 3๊ฐ์ ํ๋ณด๊ตฐ์ ๋ฐ๊ฒฌํ๊ณ , ์ฝ๋ ๋ณผ๋ฅจ์ ์ค์ฌ๋ณด์๋ 1์ฐจ์ ์ธ ๋ชฉํ์, ํ๋ก์ ํธ ๊ธฐ๊ฐ์ ๊ณ ๋ คํ์ ๋ ๋น ๋ฅด๊ฒ ์ต๋ํ๊ณ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ 2์ฐจ ๋ชฉํ์ ๋ถํฉํ๋ ํ๋ณด๊ตฐ ์ค ๋ฆฌ์กํธ ํ
๊ณผ ์ ์ฌํ ์ธํฐํ์ด์ค๋ฅผ ๋ณด์ด๋ฉฐ, Docs๋ฅผ ๋ดค์ ๋ ์ ์ ๋ฆฌ๋ ๊ฒ ๊ฐ์ ๋งค๋ ฅ์ ์ธ ๋๋์ ๋ฐ์ recoil์ ์ ํํ๊ฒ ๋์ต๋๋ค.
* styled componenent
* ๋์์ด๋๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ํด ์ฐธ์ฌํ๋๋ฐ, ๊ฐ๋ฐ ์์ค์ด ๋ฎ์ ๋์์ด๋์ ํฌํธํด๋ฆฌ์ค ์ง์ ๋ฎ์ถ๋ฉด ์๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐ๋ผ์ ๋์์ด๋๊ฐ ์ํ๋ ๋์์ธ๊ณผ ํจ๊ณผ๋ฅผ ๊ฐ์ฅ ์ ํํํ๊ธฐ ์ํด์๋ ์ต์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ์๊ฐํ๊ธฐ์, ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ณ ๊ฐ์ฅ ์ต์ํ styled-compoenents๋ฅผ ์ ํํ์ต๋๋ค.
* ApexChart
* ์ฐจํธ๋ฅผ ๊ตฌํํจ์ ์์ด์, CSS๋ฅผ ์ด์ฉ ๋๋ SVG๋ฅผ ํ์ตํด ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ์ต๋๋ค. CSS๋ง ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋ง๋์ ๊ธ์กํ๋ง์ ์์ฑํ์ ๋ ์๊ฐ๋ณด๋ค ๋ง์ ์๊ฐ์ ์์ํ๊ณ , hover์ ์ฃผ๊ฐ ์ ๋ณด ๋ณด์ ๋ฑ ํํ ๋ณด์ด๋ ์ฐจํธ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ ๋ง์ ์๊ฐ์ด ํ์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ํํ๋ณด๋ค ์ด์์ง ๋ชปํ๋ค๋ ์ ๋ ๋ฌธ์ ๊ฐ ๋์ต๋๋ค.
* ํ๋ก์ ํธ์ ์์ฑ๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๊ฒ๋๊ณ , candle ์ฐจํธ์ line ์ฐจํธ๋ฅผ ๋๋ค ์ ๊ณตํ๊ณ , ์ปค์คํ
์ด ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ์์น ๊ณผ์ ์์ docs๊ฐ ์ ๋์ด์์ผ๋ฉฐ ๋ง์ ์ต์
์ผ๋ก ์ปค์คํ
ํ๊ธฐ ํธ๋ฆฌํ ApexChart๋ฅผ ์ ํํ๊ฒ ๋์ต๋๋ค.
* sockJS, stomp
* ์ฒ์ ์๋ํด๋ณด๋ ๊ธฐ๋ฅ์ ๋์ ์ด์๊ธฐ์, ๊ด๋ จ๋ ์์ค๊ฐ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๋ ค๊ณ ํ์ต๋๋ค. spring๊ณผ ์๋ฆผ์ด๋ ์ฑํ
๊ณผ ๊ฐ์ ํ
์คํธ ์์ผ ์ฐ๊ฒฐ์ stomp๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ฉฐ, ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ SockJS๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ค๋ ๋ด์ฉ์ ๋ดค๊ณ , ๋๋ถ๋ถ์ ์์ ๋ฑ์ด stomp์ sockjs๋ก ๊ตฌํํ ๊ฒ์ ํ์ธํ์ฌ ์ ํํ์ต๋๋ค.
* axios
* ํ๋ณด๋ ajax, axios, fetch 3๊ฐ์ง๊ฐ ์์์ต๋๋ค. ajax๋ Jquery๋ฅผ ์ฌ์ฉํ ๋ ์ ๋ง ํธํ๊ฒ ์ฌ์ฉํ์ง๋ง, ์์ Ajax๋ง์ ์ฌ์ฉํ ๋๋ ์ง๊ด์ ์ด์ง ๋ชปํ๊ณ ์ต์ํ์ง ์์ ์ ์ธํ์ต๋๋ค.
* axios, fetch ๋ ์ค์์ ์ฅ ๋จ์ ์ ๋น๊ตํด ๋ดค์ต๋๋ค. fetch๋ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ค์น๊ฐ ํ์์๊ณ axios์ ๋นํด ๊ฐ๋ณ๋ค๋ ์ฅ์ ์ด ์์๊ณ axios๋ ์๋์ผ๋ก JSON๋ฐ์ดํฐ ํ์์ผ๋ก ๋ณํ์ด ๋๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋ ํธํ๊ณ ๊ธฐ๋ฅ์ด ๋ง๋ค๋ ์ฅ์ ์ด ์์์ต๋๋ค. ๋์ ๋น๊ตํ์ ๋ react๋ axios๊ฐ ๋ ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ธฐ๋ ๋ง์๊ณ , ์๋ ์ฐจ์ด์์ ์ ์๋ฏธํ ํฌ๊ธฐ์ ์ฐจ์ด๊ฐ ์์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ , ์ต์ํ๊ณ ์ฌ์ฉํ๊ธฐ ํธํ axios๋ฅผ ์ ํํ์ต๋๋ค.
## ๐ฅ Trouble Shooting
์ด์
https://github.com/HH99-StockHub/FrontEnd/issues/1 ๊ฒ์๊ธ ์์ฑ์์ ์์ฑ ํฌ์ธํธ๋ฅผ ์ญ์ ํ๋ฉด ๊ทธ ํ์ ์์ฑ ํฌ์ธํธ ๊ฐ ์ด๊ธฐํ ๋๋ ์ด์
https://github.com/HH99-StockHub/FrontEnd/issues/6 ์ฃผ์ ์ข
๋ชฉ ์ ํ ์ ๋๋กญ๋ค์ด ํญ๋ชฉ์ ํค๋ณด๋ ๋ฐฉํฅํค๋ก ์ ํ ํ ์ ์๋๋ก
https://github.com/HH99-StockHub/FrontEnd/issues/11 KaKao ๋ก๊ทธ์ธ ์ ๋ก๊ทธ์ธ ์์ฒญ์ 2๋ฒ ํ๋ ์ด์
https://github.com/HH99-StockHub/FrontEnd/issues/37 ํน์ submit ์ด๋ฒคํธ ์ useQuery ์คํํ๊ธฐ
https://github.com/HH99-StockHub/FrontEnd/issues/49 ์์ธํ์ด์ง์์ ๊ฒ์๊ธ ์ญ์ ๋ฒํผ์ด ์์ ์ด ์ด ๊ธ์ด๋ฉด true๋ก ๋ฐ๊ฟ ํ๋ฉด์ ๋ณด์ด๊ฒํ๊ณ
๋ค๋ฅธ ์ฌ๋์ ๊ธ์ด๋ฉด false๋ก ๋ฐ๊ฟ ๊ฒ์๊ธ ์ญ์ ๋ฒํผ์ด ํ๋ฉด์ ์๋ณด์ด๊ฒ ํ๊ธฐ
https://github.com/HH99-StockHub/FrontEnd/issues/122 ๋๋ฉ์ธ ์ฃผ์์ S3 ์ฃผ์์ ๋ฒ์ ์ด ๋ค๋ฅธ ์ด์
## ๐ FE ์ปจ๋ฒค์
WIKI
https://github.com/HH99-StockHub/FrontEnd/wiki/FE-:-Git-Flow Git-Flow
https://github.com/HH99-StockHub/FrontEnd/wiki/FE-:-%EC%BD%94%EB%93%9C-%EC%BB%A8%EB%B2%A4%EC%85%98 FE ์ฝ๋ ์ปจ๋ฒค์
https://github.com/HH99-StockHub/FrontEnd/wiki/FE-%ED%9A%8C%EC%9D%98%EB%A1%9D FE ํ์๋ก
## ์ ์ ํผ๋๋ฐฑ ๋ฐ ๊ฐ์ ์ฌํญ
๊ฐ์ ์ฌํญ
* ์ด๊ธฐ ๋ฐฐํฌ ํ์ ๊ฒ์๊ธ์ด ์์ ๊ฒฝ์ฐ ๋๋ฌด ํกํด ๋ณด์ธ๋ค๋ ํผ๋๋ฐฑ์ด ์์ด, ํ
์คํธ๋ก ์ด๋ฃฌ ์นด๋๋ฅผ ๋ฃ์ด ์ฌ๋ฐฑ์ ์ฑ์ ์ต๋๋ค.
![gq](https://user-images.githubusercontent.com/97582834/183237173-5f376de9-0188-481b-951f-91807e25a6f2.JPG)
* ์ฐจํธ์์ ๋ ์ง ๊ตฌ๋ถ์ด ํ๋ค๋ค๋ ํผ๋๋ฐฑ์ด ์์ด, ์ ๋
๋ ๋ ์ง์๋ ์ฐ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
![h122](https://user-images.githubusercontent.com/97582834/183237198-22f97da9-c3be-4bf6-ad78-45104699c0d1.JPG)
* ๊ฒ์๊ธ์ ๊ฒ์ํ์ ๋ ๋ด์ฉ์ด ์์ผ๋ฉด ์๋ด ๋ฌธ๊ตฌ ํ๋๋ง ๋์ค๊ณ ํ๋ฉด์ด ๋นํ๋ฉด์ด๋ผ ๋ถํธํ๋ค๋ ํผ๋๋ฐฑ์ด ์์ด, ์ถ๊ฐ ์๋ด ํ์ด์ง๋ฅผ ๋ง๋ค์์ต๋๋ค.
![1234](https://user-images.githubusercontent.com/97582834/183237230-f07d3bfe-5098-4f14-933a-90f39fceef02.JPG)
* ๊ฒ์๊ธ ์ญ์ ์ ์ค์๋ก ๋๋ ๋๋ฐ ์ด๋ค ํ์ธ์กฐ์น ์์ด ์ญ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ด, ํ๋ฒ ๋ ํ์ธํ๋ ์ ์ฐจ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
![5123](https://user-images.githubusercontent.com/97582834/183237243-f130431c-a804-4b9e-ba0a-14df4985a3c6.JPG)