๐Ÿ“ˆSTOCKEY


๋ชฉ์ฐจ

  1. ์„œ๋น„์Šค ๊ฐœ์š”

  2. ์„œ๋น„์Šค ํ™”๋ฉด

  3. ์ฃผ์š” ๊ธฐ๋Šฅ

  4. ๊ธฐ์ˆ  ํŠน์ด์ 

  5. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  6. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

  7. ๊ธฐํš ๋ฐ ์„ค๊ณ„

  8. ํŒ€์› ์†Œ๊ฐœ

๐Ÿ“Š์„œ๋น„์Šค ๊ฐœ์š”

์ฃผ์‹๊ณผ ๊ด€๋ จ๋œ ๋‰ด์Šค ๊ธฐ์‚ฌ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ฃผ๊ฐ€ ์ถ”์ด๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์„œ๋น„์Šค

๐Ÿ’ป์„œ๋น„์Šค ํ™”๋ฉด

๋กœ๊ทธ์ธ

์Šคํ†กํ‚ค_๋กœ๊ทธ์ธ.gif

  • ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ œ๊ณต
๋ฉ”์ธ ํŽ˜์ด์ง€(์ข…๋ชฉ-๋ฉ”์ธ)

์Šคํ†กํ‚ค_๋ฉ”์ธํŽ˜์ด์ง€.gif

  • ์ž…์žฅ์‹œ ์ข…๋ชฉ-๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

  • ๋žœ๋คํ•˜๊ฒŒ ์„ ์ •๋œ ์ข…๋ชฉ์˜ ํ‚ค์›Œ๋“œ ์ •๋ณด ์ œ๊ณต

  • ์ข…๋ชฉ๋ช…์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ƒ์„ธ ํŽ˜์ด์ง€ ์กฐํšŒ ๊ฐ€๋Šฅ

์ข…๋ชฉ-์ƒ์„ธ

์Šคํ†กํ‚ค_์ฃผ์‹ํŽ˜์ด์ง€_๋„ค์ด๋ฒ„.gif

์Šคํ†กํ‚ค_ํ•œ๊ตญ์กฐ์„ ํ•ด_ํ‚ค์›Œ๋“œ.gif

  • ์ข…๋ชฉ์˜ ๊ฐ„๋žตํ•œ ๊ฐœ์š” ๋ฐ ์ฃผ๊ฐ€ ์ถ”์ด ์ฐจํŠธ ์ œ๊ณต

  • ์ฃผ๊ฐ€ ์ฐจํŠธ์—์„œ ์„ค์ •ํ•œ ๊ธฐ๊ฐ„ ๋‚ด์˜ ํ•ด๋‹น ์ข…๋ชฉ, ์†Œ์† ์‚ฐ์—…, ๊ฒฝ์ œ ์ผ๋ฐ˜์˜ ๊ด€๋ จ ๋‰ด์Šค ๊ธฐ์‚ฌ๋กœ๋ถ€ํ„ฐ ๋ถ„์„ํ•œ ๋“ฑ์žฅ ๋นˆ๋„๊ฐ€ ๋†’์€ ํ‚ค์›Œ๋“œ ์ •๋ณด ์ œ๊ณต

  • ํ‚ค์›Œ๋“œ ์ฐจํŠธ์—์„œ ํŠน์ • ํ‚ค์›Œ๋“œ ํด๋ฆญ์‹œ ํ‚ค์›Œ๋“œ์˜ ๋“ฑ์žฅ ๋นˆ๋„ ๊ทธ๋ž˜ํ”„์™€ ์ฃผ๊ฐ€ ๊ทธ๋ž˜ํ”„์˜ ์ƒ๊ด€๊ณ„์ˆ˜, ๊ด€๋ จ ๋‰ด์Šค ๊ธฐ์‚ฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ ํŒจ๋„ ์ œ๊ณต

์‚ฐ์—…-๋ฉ”์ธ

์‚ฐ์—…_์ข…๋ชฉ์ˆœ์œ„.gif

  • ์‚ฐ์—… ๋ถ„๋ฅ˜ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ์‚ฐ์—…์˜ ์ƒ์„ธ ํŽ˜์ด์ง€ ์กฐํšŒ

  • ์‚ฐ์—…๋ณ„ ๊ทœ๋ชจ(์†Œ์† ์ข…๋ชฉ์˜ ์‹œ๊ฐ€์ด์•ก ํ•ฉ) ์ฐจํŠธ์™€ ํ•ด๋‹น ์‚ฐ์—… ๋‚ด ์ข…๋ชฉ ์‹œ๊ฐ€์ด์•ก ์ˆœ์œ„ ํ‘œ ์กฐํšŒ

์‚ฐ์—…-์ƒ์„ธ

์Šคํ†กํ‚ค_์‚ฐ์—…ํŽ˜์ด์ง€.gif

  • ์‚ฐ์—…์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช…๊ณผ ๊ทœ๋ชจ ์ฐจํŠธ ์ œ๊ณต

  • ์‚ฐ์—… ๋‚ด ์‹œ๊ฐ€์ด์•ก ์ƒ์œ„ 5๊ฐœ ์ข…๋ชฉ์— ๋Œ€ํ•œ ๋ฒ„๋ธ” ์ฐจํŠธ์™€ ์ „์ฒด ์ข…๋ชฉ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

  • ๊ทœ๋ชจ ์ฐจํŠธ์—์„œ ์„ค์ •ํ•œ ๊ธฐ๊ฐ„ ๋‚ด์˜ ๋‰ด์Šค ๊ธฐ์‚ฌ๋กœ๋ถ€ํ„ฐ ๋ถ„์„ํ•œ ๋“ฑ์žฅ ๋นˆ๋„๊ฐ€ ๋†’์€ ํ‚ค์›Œ๋“œ ์ •๋ณด ์ œ๊ณต ๋ฐ ์ข…๋ชฉ ํŽ˜์ด์ง€์—์„œ์™€ ์œ ์‚ฌํ•œ ํ‚ค์›Œ๋“œ ํŒจ๋„ ์ œ๊ณต

ํ‚ค์›Œ๋“œ-๋ฉ”์ธ

  • DB๋‚ด ์กด์žฌํ•˜๋Š” ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
ํ‚ค์›Œ๋“œ-์ƒ์„ธ

  • ์ข…๋ชฉ์ด๋‚˜ ์‚ฐ์—…์— ์ข…์†๋˜์ง€ ์•Š์€ ํ‚ค์›Œ๋“œ ์ž์ฒด์˜ ๋“ฑ์žฅ ๋นˆ๋„ ๊ทธ๋ž˜ํ”„์™€ ๋‰ด์Šค ๊ธฐ์‚ฌ ๋ชฉ๋ก์„ ํ™•์ธ ๊ฐ€๋Šฅ
๋งˆ์ด ํŽ˜์ด์ง€

my.png

my2.png

  • ๋ถ๋งˆํฌํ•œ ์ข…๋ชฉ, ์‚ฐ์—…, ํ‚ค์›Œ๋“œ ๋ชฉ๋ก์„ ํ•œ ๋ฒˆ์— ์กฐํšŒ

โœจ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ข…๋ชฉ, ์‚ฐ์—…, ๋˜๋Š” ๊ฒฝ์ œ ์ผ๋ฐ˜์˜ ๋‰ด์Šค ๊ธฐ์‚ฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ฃผ๊ฐ€/์‚ฐ์—… ๊ทœ๋ชจ ์ฐจํŠธ ๋ถ„์„ ๋ฐ ์ดํ•ด

    • ๋‰ด์Šค ๋ฐ์ดํ„ฐ์—์„œ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ, ํ‚คํ”„๋ ˆ์ด์ฆˆ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ œ๊ณต

    • ํ‚ค์›Œ๋“œ ๊ด€๋ จ ๋‰ด์Šค ๋ชฉ๋ก ์ œ๊ณต

    • ์ฃผ๊ฐ€/์‚ฐ์—… ๊ทœ๋ชจ ์ฐจํŠธ์—์„œ ์œ ์ €๊ฐ€ ์ง์ ‘ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๊ฐ„์„ ์„ค์ • ๊ฐ€๋Šฅ

    • ๋ถ„์„ํ•˜๊ณ  ์‹ถ์€ ๋‰ด์Šค ๋ฒ”์œ„๋ฅผ ์ข…๋ชฉ/์‚ฐ์—…/๊ฒฝ์ œ ์ผ๋ฐ˜ ์ค‘ ์„ ํƒ ๊ฐ€๋Šฅ

    • ํ”ผ์–ด์Šจ ์ƒ๊ด€๊ณ„์ˆ˜ ๋ถ„์„์„ ํ†ตํ•ด ์ฃผ๊ฐ€/์‚ฐ์—… ๊ทœ๋ชจ ์ฐจํŠธ์™€ ํ‚ค์›Œ๋“œ ์–ธ๊ธ‰๋Ÿ‰ ๊ทธ๋ž˜ํ”„์˜ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„

  • ์‹œ๊ฐ€ ์ด์•ก ๊ธฐ์ค€ ์ƒ์œ„ 91๊ฐœ ์ข…๋ชฉ๊ณผ 22๊ฐœ ์‚ฐ์—…์˜ ์ •๋ณด ์ œ๊ณต

    • ์ฃผ๊ฐ€(์‚ฐ์—…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ€์ด์•ก ํ•ฉ) ์ถ”์ด ๊ทธ๋ž˜ํ”„, ๊ฐ„๋žตํ•œ ๊ฐœ์š” ์ œ๊ณต

    • ๊ด€๋ จ ํ‚ค์›Œ๋“œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์ฐจํŠธ ์ œ๊ณต

    • ํŠน์ • ํ‚ค์›Œ๋“œ ํด๋ฆญ์‹œ ํ•ด๋‹น ํ‚ค์›Œ๋“œ์˜ ๋“ฑ์žฅ ๋นˆ๋„ ๊ทธ๋ž˜ํ”„, ์ข…๋ชฉ(์‚ฐ์—…)๊ณผ์˜ ์ƒ๊ด€๊ณ„์ˆ˜, ๊ด€๋ จ ๊ธฐ์‚ฌ ๋ชฉ๋ก์ด ๋‹ด๊ธด ํ‚ค์›Œ๋“œ ํŒจ๋„ ์ œ๊ณต

  • ์ข…๋ชฉ, ์‚ฐ์—…, ํ‚ค์›Œ๋“œ๋ณ„ ๊ด€์‹ฌ ๋“ฑ๋ก/ํ•ด์ œ ๊ธฐ๋Šฅ

    • ๊ด€์‹ฌ ๋“ฑ๋กํ•œ ๋ชฉ๋ก์„ ๋ถ๋งˆํฌ ํŽ˜์ด์ง€์—์„œ ์กฐํšŒ ๊ฐ€๋Šฅ
  • OAuth 2.0์„ ์‚ฌ์šฉํ•ด ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„

    • JWT Access Token/Refresh Token์„ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ์ธ์ฆ ๋ฐฉ์‹ ์ ์šฉ
    • ๋‹‰๋„ค์ž„ ์ค‘๋ณต ํ™•์ธ

โœจ๊ธฐ์ˆ  ํŠน์ด์ 

  • keyBERT ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ๋‰ด์Šค์—์„œ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ์ถ”์ถœ

    • ์–ด๋Š ๋‰ด์Šค์—์„œ๋‚˜ ์‚ฌ์šฉ๋˜๋Š” ๋ฒ”์šฉ์ ์ธ ๋‹จ์–ด, ์ข…๋ชฉ๋ช…์— ํฌํ•จ๋˜๋Š” ๋‹จ์–ด ๋“ฑ์„ ๋ถˆ์šฉ์–ด๋กœ ์„ค์ •ํ•˜์—ฌ ๋ถ„์„ ํšจ๊ณผ ์ƒ์Šน
  • ํŠน์ • ํ‚ค์›Œ๋“œ์™€ ๊ด€๋ จ๋œ ๋‰ด์Šค๋“ค ์ค‘์—์„œ ๋น„์Šทํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ง„ ๋‰ด์Šค๋“ค๋ผ๋ฆฌ ๊ทธ๋ฃนํ™”

    • DBSCAN ๋ชจ๋ธ ์‚ฌ์šฉ (๋ฐ€๋„ ๊ธฐ๋ฐ˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง)

    • ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋กœ ์œ ์‚ฌ์„ฑ ํŒ๋‹จ

    • ์ƒ์„ฑํ•œ ๋‰ด์Šค ๊ทธ๋ฃน ์ค‘ ๊ทธ๋ฃน ์‚ฌ์ด์ฆˆ๊ฐ€ ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์ธ ๊ทธ๋ฃน๋งŒ ์„ ๋ณ„

    • ๊ฐ ๊ทธ๋ฃน๋งˆ๋‹ค ๋‚ด์šฉ์„ ๋Œ€ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ํ‚คํ”„๋ ˆ์ด์ฆˆ๋ฅผ ํ•œ ๊ฐœ์”ฉ ์ œ๊ณต(keyBERT ๋ชจ๋ธ ์ด์šฉ)

  • ํ‚ค์›Œ๋“œ ๊ด€๋ จ ๋ถ„์„ ์ œ๊ณต

    • ๋ถ„์„ ๊ธฐ๊ฐ„ ๋‚ด์˜ ์ „์ฒด ๋‰ด์Šค ๋ฐ์ดํ„ฐ ์ค‘ ํ•ด๋‹น ํ‚ค์›Œ๋“œ์™€ ๊ด€๋ จ๋œ ๋‰ด์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์žˆ์—ˆ๋Š”์ง€๋ฅผ ์–ธ๊ธ‰๋Ÿ‰ ๊ทธ๋ž˜ํ”„๋กœ ์ œ๊ณต

    • ํ‚ค์›Œ๋“œ ์–ธ๊ธ‰๋Ÿ‰ ๊ทธ๋ž˜ํ”„์™€ ์ฃผ๊ฐ€/์‚ฐ์—… ๊ทœ๋ชจ ์ถ”์ด ๊ทธ๋ž˜ํ”„์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํ”ผ์–ด์Šจ ์ƒ๊ด€๊ณ„์ˆ˜ ๋ถ„์„์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•˜์—ฌ ์ œ๊ณต

  • ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘์‹œํ•œ ์ฐจํŠธ ๋””์ž์ธ

    • ๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„, ํด๋ฆญ, ๋“œ๋ž˜๊ทธ ๋“ฑ ์œ ์ €์˜ ๋™์ž‘๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฐจํŠธ ์„ค๊ณ„

    • ๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„ ์‹œ ํˆดํŒ์œผ๋กœ ์ฃผ๊ฐ€/์‚ฐ์—… ๊ทœ๋ชจ ๋“ฑ์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด ์ œ๊ณต

    • ํ‚ค์›Œ๋“œ ์ฐจํŠธ ํด๋ฆญ์‹œ ํ‚ค์›Œ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ํ‚คํ”„๋ ˆ์ด์ฆˆ ํ‘œ์‹œ

    • ์‚ฐ์—…๋ณ„ ๊ทœ๋ชจ ์ฐจํŠธ ํด๋ฆญ์‹œ ํ•ด๋‹น ์‚ฐ์—… ๋‚ด ์‹œ๊ฐ€์ด์•ก ์ƒ์œ„ 5 ์ข…๋ชฉ ์ถœ๋ ฅ

    • ์ฃผ๊ฐ€ ์ฐจํŠธ์—์„œ ๋“œ๋ž˜๊ทธ ๋˜๋Š” ๋„ค๋น„๊ฒŒ์ดํ„ฐ ์กฐ์ ˆ์„ ํ†ตํ•ด ํ‚ค์›Œ๋“œ ๋ถ„์„ ๊ธฐ๊ฐ„ ์„ค์ • ๊ฐ€๋Šฅ

โš™๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๐Ÿ‘ฉโ€๐Ÿ’ปBackend

Server

  • Ubuntu 20.04 LTS

Spring Server

  • JDK : Open JDK11

  • SpringBoot : 2.7.9

Django Server

  • Django : 4.2

  • Python : 3.10.10

FastAPI Server

  • FastAPI : 0.45

  • Python : 3.7

Infra

  • Nginx : 1.23.3

  • Jenkins : 2.375.2

Database

  • MySQL : 8.0.32

  • Redis : 7.0.8

Tools

  • VSCode : 1.73.1

  • IntelliJ : 2022.03

๐ŸŽจFrontend

  • Node.js : 18.13.0

  • React : 18.2.0

  • Typescript: 4.9.5

  • Library

    "@emotion/react": "^11.10.6",
    "@emotion/styled": "^11.10.6",
    "@mui/icons-material": "^5.11.16",
    "@mui/material": "^5.11.13",
    "@mui/material-next": "^6.0.0-alpha.79",
    "@tanstack/react-query": "^4.27.0",
    "@tanstack/react-query-devtools": "^4.27.0",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.16",
    "@types/papaparse": "^5.3.7",
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "axios": "^1.3.4",
    "dayjs": "^1.11.7",
    "highcharts": "^10.3.3",
    "highcharts-border-radius": "^0.0.4",
    "highcharts-react-official": "^3.2.0",
    "papaparse": "^5.4.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-hook-form": "^7.43.7",
    "react-query": "^3.39.3",
    "react-router-dom": "^6.9.0",
    "react-scripts": "5.0.1",
    "recoil": "^0.7.7",
    "styled-components": "^5.3.9",
    "typescript": "^4.9.5",
    "web-vitals": "^2.1.4"
    

๐Ÿ› Management Tool

  • ํ˜•์ƒ ๊ด€๋ฆฌ : Gitlab, Git Fork

  • ์ด์Šˆ ๊ด€๋ฆฌ : Jira

  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ : Mattermost, Webex, Notion

  • ๋””์ž์ธ : Figma

๐Ÿงฌ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

Cream and Brown Minimalist Accountant and Bookkeeper Marketing Presentation.png

๐Ÿ“œ๊ธฐํš ๋ฐ ์„ค๊ณ„

API ๋ช…์„ธ

ํ™”๋ฉด ์„ค๊ณ„

ํ™”๋ฉด ์„ค๊ณ„

Frame 1000002491.png

ERD

Stockey.png

๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆํŒ€์› ์†Œ๊ฐœ

๊ณต์ง„ํ˜ธ ๊น€๊ฒฝํฌ ๊น€์šฉํ˜„ ๊น€์ง€์˜ ์–‘์ค€๋ชจ ์ด์žฌํ˜‘
ํŒ€์žฅ & BE FE FE BE BE FE
  • ๊ณต์ง„ํ˜ธ : ํŒ€์žฅ, ๋‰ด์Šค ํฌ๋กค๋ง, ํ‚ค์›Œ๋“œ ๋ถ„์„, Swagger, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ์‚ฐ์—… api, ํŒŒ์ด์ฌ ์„œ๋ฒ„, ERD ์„ค๊ณ„

  • ๊น€๊ฒฝํฌ : ๋ฉ”์ธ ํŽ˜์ด์ง€, ์ข…๋ชฉ ์ƒ์„ธ ํŽ˜์ด์ง€, ํ‚ค์›Œ๋“œ ์ •๋ณด ํŒจ๋„, ํ‚ค์›Œ๋“œ ๋ถ„์„, ๋…ธ์…˜/์ง€๋ผ ๊ด€๋ฆฌ, ๋””์ž์ธ

  • ๊น€์šฉํ˜„ : ๋””์ž์ธ, ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ, ๋กœ๊ทธ์ธ, ๋งˆ์ดํŽ˜์ด์ง€, ๋ฐœํ‘œ

  • ๊น€์ง€์˜ : CI/CD, ์ข…๋ชฉ api, ์ฃผ์‹๋ฐ์ดํ„ฐ ํฌ๋กค๋ง , git ๊ด€๋ฆฌ, ERD ์„ค๊ณ„

  • ์–‘์ค€๋ชจ : ๋‰ด์Šค ํฌ๋กค๋ง, ํ‚ค์›Œ๋“œ ๋ถ„์„, ์ธ์ฆ/์ธ๊ฐ€, ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ์ ์žฌ, ํ‚ค์›Œ๋“œ api, UCC, ERD ์„ค๊ณ„

  • ์ด์žฌํ˜‘ : ๋””์ž์ธ, ์‚ฐ์—… ํŽ˜์ด์ง€, ํ‚ค์›Œ๋“œ ํŽ˜์ด์ง€, ์„œ๊ธฐ