Skip to content

chshin59/U-R-IN

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

681 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

1. ์„œ๋น„์Šค ์†Œ๊ฐœ

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

  • ์ง„ํ–‰ ๊ธฐ๊ฐ„ย :ย 2022.07.11 ~ 2022.08.19(6์ฃผ)
  • ํ•œ ์ค„ ์†Œ๊ฐœ : ๋ฉด์ ‘ ์Šคํ„ฐ๋”” + AI ๋ฉด์ ‘ ๋ถ„์„
  • ์„œ๋น„์Šค ๋ช… :ย urin

๊ธฐํš ๋ฐฐ๊ฒฝ

์ทจ์—…์„ ์ค€๋น„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋ฉด์ ‘ ์—ญ๋Ÿ‰์„ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค. ๋ฉด์ ‘ ์Šคํ„ฐ๋””์— ๋Œ€ํ•œ ๊ด€์‹ฌ๋„ ๋งค์šฐ ๋†’์ง€๋งŒ, ์Šคํ„ฐ๋””๋ฅผ ๊ตฌํ•  ๋งˆ๋•…ํ•œ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉด์ ‘ ์Šคํ„ฐ๋””์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์š”๋ฅผ ์›ํ™œํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฉด์ ‘ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉด์ ‘ ์Šคํ„ฐ๋”” ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฉด์ ‘ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ๊ฐ™์€ ์Šคํ„ฐ๋””์›์˜ ํ”ผ๋“œ๋ฐฑ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AI์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ ˆํฌํŠธ๋กœ ์ œ๊ณต ๋ฐ›์•„ ๋‚˜์˜ ํ˜„์žฌ ๋ฉด์ ‘ ์—ญ๋Ÿ‰์„ ํŒŒ์•… ๋ฐ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒ€๊ฒŸ

  1. ๋ฉด์ ‘์— ๋Œ€๋น„ํ•˜๊ณ  ์‹ถ์€ ์ทจ์—… ์ค€๋น„์ƒ
  2. ๋ฉด์ ‘ ์ „ํ˜• ํƒˆ๋ฝ์˜ ์›์ธ ํŒŒ์•…์ด ํž˜๋“  ์‚ฌ๋žŒ

2. ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ

์„œ๋น„์Šค ์ธํŠธ๋กœ

  • ์นด์นด์˜ค ๋กœ๊ทธ์ธ
  • ์Šคํ„ฐ๋”” ์ œ๋ชฉ & ํ•ด์‹œํƒœ๊ทธ ๊ฒ€์ƒ‰

๋ฉด์ ‘ ์Šคํ„ฐ๋”” ์ง„ํ–‰ ํ™”๋ฉด

  • ํ™”์ƒ๋ฏธํŒ…์— 2๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์กด์žฌ (์ผ๋ฐ˜, ๋ฉด์ ‘ ๋ชจ๋“œ)
  • ๋ฉด์ ‘ ๋ชจ๋“œ๋Š” ๋ฉด์ ‘์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค. ๋ฉด์ ‘์ž๋ฅผ ํ•œ ๋ช… ์„ ํƒ ๊ฐ€๋Šฅ
    • ๋ฉด์ ‘ ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํƒ€์ด๋จธ๋กœ ๋ฉด์ ‘ ์ง„ํ–‰ ์‹œ๊ฐ„ ํŒŒ์•… ๊ฐ€๋Šฅ
    • ์ถ”๊ฐ€๋กœ AI๊ฐ€ ๋ฉด์ ‘์ž์˜ ํ‘œ์ • & ์ž์„ธ๋ฅผ ๋ถ„์„
  • ๋ฉด์ ‘ ์ง„ํ–‰ํ•˜๋ฉฐ ํ‰๊ฐ€์ž ์—ญํ• ์„ ๋งก์€ ์‚ฌ๋žŒ๋“ค์€ ํ”ผ๋“œ๋ฐฑ์„ ์ž‘์„ฑ ๊ฐ€๋Šฅ

AI ๋ถ„์„ & ํ‰๊ฐ€์ž ํ”ผ๋“œ๋ฐฑ Report

  • ๋ฉด์ ‘ ๋ชจ๋“œ์—์„œ ๋ฉด์ ‘์ž์˜ ํ‘œ์ • & ์ž์„ธ๋ฅผ AI๊ฐ€ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ์™€ ํ‰๊ฐ€์ž๋“ค์ด ์ž‘์„ฑํ•œ ํ”ผ๋“œ๋ฐฑ๋“ค์„ Report์—์„œ ํ•œ ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

3. ๊ธฐํš

ERD

Figma

API ๋ช…์„ธ

4. ๊ธฐ์ˆ  ์Šคํƒ ๋ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ

Frontend

prettier์™€ eslint๋กœ ์ฝ”๋“œ ์Šคํƒ€์ผ ํ†ต์ผ(Airbnb style) redux, reduxjs/toolkit, react-router-dom v6 ์‚ฌ์šฉ

  • OpenVidu
    OpenVidu is a platform to facilitate the addition of video calls in your web or mobile application.

WebRTC๋ฅผ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ธํ™˜์„ฑ์ด ๋†’์€ openvidu๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. openvidu tutorial์˜ openvidu-call-react์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”์ƒํšŒ์˜๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค

  • face-api
    JavaScript face recognition API for the browser and nodejs implemented on top of tensorflow.js core

urinย ์—์„œ๋Š”ย face api์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ค‘ Face Detectionย ์„ ํ†ตํ•ด ์–ผ๊ตด์„ ๊ฐ์ง€ํ•˜๊ณ  Face Expression Recognition์„ ์ด์šฉํ•ด ๋ฉด์ ‘์ž์˜ ๊ฐ์ •์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

  • Teachablemachine/pose
    Teachable Machine์€ ๋ˆ„๊ตฌ๋‚˜ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ œ์ž‘๋œ ์›น ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

urin์—์„œ๋Š” Teachablemachine์˜ pose ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ฉด์ ‘์ž์˜ ์ž์„ธ๋ฅผ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

Backend

CI & CD

Version

Frontend

  • NodeJS : 16.16.0
  • React : 18.2.0
    • React-redux : 8.0.2
    • React-router-dom : 6.3.0
  • face-api.js : 0.22.0
  • teachablemachine/pose : 0.8.6

Backend

  • JAVA : JDK 11
  • Spring Boot : 2.6.10
  • MySQL : 8.0.29

CI / CD

  • Ubuntu : 20.04 LTS
  • Docker : 20.10.12
  • Nginx : 1.18.0
  • Jenkins : 2.346.2

5. ํ”„๋กœ์ ํŠธ ์ง„ํ–‰

Git Flow

git flow ์ „๋žต๊ณผ github flow ์ „๋žต ์ค‘ git flow ์ „๋žต์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. feature๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ํ›„fronend or backend๋ธŒ๋žœ์น˜๋กœ Merge Request๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

MR์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ ๋ณธ์ธ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด MR์„ ์Šน์ธํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. frontend์™€ backend์— ์Œ“์ธ commit์€ ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด develop, main ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. commit message๋Š” (gitmoji) <ํƒ€์ž…> : <์ œ๋ชฉ> <#์ด์Šˆ๋ฒˆํ˜ธ> ํ˜•ํƒœ๋กœ ํ†ต์ผํ•˜์—ฌ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค

# (gitmoji) <ํƒ€์ž…> : <์ œ๋ชฉ> <#์ด์Šˆ๋ฒˆํ˜ธ>

##### ์ œ๋ชฉ์€ ์ด์Šˆ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ตœ๋Œ€ 50 ๊ธ€์ž๊นŒ์ง€ ํ•œ ์ค„๋กœ ์ž…๋ ฅ ############## -> |

# ๋ณธ๋ฌธ์€ ์œ„์— ์ž‘์„ฑ
######## ๋ณธ๋ฌธ์€ ํ•œ ์ค„์— ์ตœ๋Œ€ 72 ๊ธ€์ž๊นŒ์ง€๋งŒ ์ž…๋ ฅ ########################### -> |

# --- COMMIT END ---
# <ํƒ€์ž…> ๋ฆฌ์ŠคํŠธ
#   โœจ(:sparkles:) feat   : ๊ธฐ๋Šฅ (์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ)
#   ๐Ÿ›(:bug:) fix         : ๋ฒ„๊ทธ (๋ฒ„๊ทธ ์ˆ˜์ •)
#   โ™ป(:recycle:) refactor : ๋ฆฌํŒฉํ† ๋ง
#   ๐Ÿ’„(:lipstick:) style   : ์Šคํƒ€์ผ (์ฝ”๋“œ ํ˜•์‹, ์„ธ๋ฏธ์ฝœ๋ก  ์ถ”๊ฐ€: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€๊ฒฝ ์—†์Œ)
#   ๐Ÿ“(:memo:) docs        : ๋ฌธ์„œ (๋ฌธ์„œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ)
#   โœ…(:white_check_mark:) test : ํ…Œ์ŠคํŠธ (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€๊ฒฝ ์—†์Œ)
#   ๐Ÿ”จ(:hammer:) chore     : ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ (๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • ๋“ฑ)
# ------------------
#     ์ œ๋ชฉ์€ ๋ช…๋ น๋ฌธ์œผ๋กœ
#     ์ œ๋ชฉ ๋์— ๋งˆ์นจํ‘œ(.) ๊ธˆ์ง€
#     ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์„ ํ•œ ์ค„ ๋„์›Œ ๋ถ„๋ฆฌํ•˜๊ธฐ
#     ๋ณธ๋ฌธ์€ "์–ด๋–ป๊ฒŒ" ๋ณด๋‹ค "๋ฌด์—‡์„", "์™œ"๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.
#     ๋ณธ๋ฌธ์€ ํ•œ ์ค„์„ ์ž‘์„ฑํ•˜๊ณ  . ๋งˆ์นจํ‘œ๋ฅผ ์ฐ์–ด์„œ ๋ถ„๋ฆฌํ•œ๋‹ค.
# ------------------

Jira

  • ๋งค ์ฃผ ์›”์š”์ผ, ์ฃผ๊ฐ„ ํšŒ์˜๋ฅผ ํ†ตํ•ด ํ•œ ์ฃผ ๊ฐ„์˜ ๋ชฉํ‘œ๋ฅผ ์ •ํ•˜๊ณ  Sprint๋ฅผ ์ƒ์„ฑ
  • ์ดˆ๋ฐ˜์—๋Š” ์ผ์ •์— ๋งž์ถฐ Epic ์ƒ์„ฑ
  • JIRA ํ”ผ๋“œ๋ฐฑ ์ดํ›„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ณ„ Epic์ƒ์„ฑ

Notion

1) ํšŒ์˜๋ก

  • ๋งค์ผ ์•„์นจ๋งˆ๋‹ค ์–ด์ œ ํ–ˆ๋˜ ์ผ, ์˜ค๋Š˜์˜ ๊ณ„ํš์„ ๊ณต์œ ํ•˜๋Š” Daily Scrum์„ ์ง„ํ–‰
  • ๊ฐ ํšŒ์˜ ๋‚ด์šฉ์„ Tag๋กœ ๋ถ„๋ฅ˜ํ•œ ํšŒ์˜๋ก์— ์ƒ์„ธํžˆ ๊ธฐ๋ก

2) ์ž๋ฃŒ ๊ณต์œ  (Wiki)

  • ์ค‘์š”ํ•œ ์ž๋ฃŒ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ

6. ํƒ€์ž„๋ผ์ธ

1์ฃผ์ฐจ(7/11 ~ 7/15)

  • ์•„์ด๋””์–ด ํšŒ์˜ & ์„ ์ •

2์ฃผ์ฐจ(7/18 ~ 7/22)

  • Ver1(์„œ๋น„์Šค ํ•ต์‹ฌ ๊ธฐ๋Šฅ) ๊ธฐํš
  • ERD, Wireframe, ๊ธฐ๋Šฅ ์ •์˜์„œ ์ž‘์„ฑ

3์ฃผ์ฐจ(7/25 ~ 7/29)

  • [FE] ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋„ ์ž‘์„ฑ & HTML ๊ฐœ๋ฐœ
  • [BE] CI / CD ๊ตฌ์ถ•
  • [BE] API ๊ฐœ๋ฐœ

4์ฃผ์ฐจ(8/1 ~ 8/5)

  • [FE] Redux, Axios
  • [BE] ์†Œ์…œ ๋กœ๊ทธ์ธ & API ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • [BE] ์„œ๋น„์Šค ๋ฐฐํฌ

5์ฃผ์ฐจ(8/8 ~ 8/12)

  • Ver2(์„œ๋น„์Šค ํŠนํ™” ๊ธฐ๋Šฅ) ๊ธฐํš
  • [FE] OpenVidu ์ถ”๊ฐ€
  • [FE] Face-API, Teacherable-Machine ์ถ”๊ฐ€
  • [BE] Ver2 API ๊ฐœ๋ฐœ & Ver1 API ์œ ์ง€ ๋ณด์ˆ˜

6์ฃผ์ฐจ(8/16 ~ 8/19)

  • Ver2 ๊ฐœ๋ฐœ ๋งˆ๋ฌด๋ฆฌ
  • UCC ์ œ์ž‘, ๋ฐœํ‘œ ์ค€๋น„, ์ตœ์ข… ํ…Œ์ŠคํŠธ
  • 8/19 ์ตœ์ข…๋ฐœํ‘œ

7. ์†Œ๊ฐ ๋ฐ ๋ฐฐ์šด ์ 

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

2. ์†Œ๊ฐ

๊น€์‹ ์ฒ 

์„œ๋น„์Šค ๋‚ด ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ํ˜‘์—…์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์„œ ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ํ˜‘์—…์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์ด๊ฒƒ์ €๊ฒƒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ๋ฐ”๋กœ ๋ฌผ์–ด๋ณด๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ์ฐจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ API ๋ช…์„ธ์„œ๋‚˜ ์—๋Ÿฌ ์ƒํ™ฉ ์ •๋ฆฌ ๋“ฑ์„ ๋จผ์ € ํ™•์ธํ•˜๋ฉด์„œ ์„œ๋กœ์˜ ์—…๋ฌด๋ถ€๋‹ด์„ ์ค„์—ฌ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฌด๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์‹ค์ œ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌ๊นŒ์ง€ ํ•ด๋ณด๋ฉด์„œ ๋‚ด๊ฐ€ ๋งˆ์ฃผํ•œ ์ง€๊ธˆ ์˜ค๋ฅ˜๊ฐ€ ํ”„๋ก ํŠธ์™€ ๋ฐฑ ์ฝ”๋“œ์ธ์ง€, ์•„๋‹ˆ๋ฉด ์„œ๋ฒ„ ๊ตฌ๋™์˜ ๋ฌธ์ œ์ธ์ง€ ๋“ฑ์„ ์Šค์Šค๋กœ ์ฐพ์•„๋‚˜๊ฐ€๋ฉด์„œ ๊ฐ ๋ถ€๋ถ„์„ ๋งก์€ ๋™๋ฃŒ๋“ค๊ณผ ์†Œํ†ตํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ›„๋ฐ˜๋ถ€์— ์—๋Ÿฌ ๋””๋ฒ„๊น…์„ ๋งก์•„ ํŒ€์›๋“ค์ด ์ด๋ฏธ ๊ตฌํ˜„๋œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ผ์„ ๋งก์•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ํ†ต์ผ๋œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๊ฐ€ ๋ถ€์žฌํ–ˆ๋‹ค๋Š” ์ ์€ ์•„์‰ฌ์›€์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋˜ ๋ถ€๋ถ„์€ ์žˆ์—ˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋†“์นœ ๋ถ€๋ถ„๋“ค์ด ๊ฝค ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ฆฌ์•กํŠธ๋ฅผ ๋ชจ๋‘ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” ํŒ€์›๋“ค๊ณผ ํ˜‘์—…ํ•˜๋ฉด์„œ ํฐ ์˜ค๋ฅ˜์™€ ์ถฉ๋Œ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ž˜ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค.
๋‘๋ฒˆ์งธ๋กœ ๋‚จ๋Š” ์•„์‰ฌ์›€์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ฆฌ์•กํŠธ์— ๋Œ€ํ•œ ์ดํ•ด๋„์ž…๋‹ˆ๋‹ค. ์—๋Ÿฌ ์ƒํ™ฉ์„ ๊ณ ์ณ๋‚˜๊ฐ€๋ฉด์„œ ์ œ๊ฐ€ ์ง  ์ฝ”๋“œ๋“ค์ด ์ •๋ง ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์Šค๋Ÿฝ๊ณ  ๋ฆฌ์•กํŠธ์Šค๋Ÿฌ์› ๋Š”๊ฐ€ ์˜๋ฌธ์„ ํ’ˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ์  ํŠน์„ฑ์„, ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ํŠน์„ฑ์„ ์ž˜ ์‚ด๋ฆฌ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด ์•„์‰ฌ์›€์ด ๋‚จ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ์—๋Š” ์ด๊ฒƒ์ด ์‹œ๊ฐ„์„ ์•„๋ผ๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ๊ตฌํ˜„์ด ๋˜๋Š” ๋ฐ์— ์ดˆ์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ง‰์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„, ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ๋ณ„๋กœ ์ชผ๊ฐœ๊ณ  ์ ์žฌ์ ์†Œ์— ๋น„๋™๊ธฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ธฐํšํ–ˆ๋˜ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€ ๋‹จ์ˆœํžˆ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ข‹์€ UX๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์–ด์„œ ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊น€ํ˜„๊ต

๊ฐœ์ธ์ ์œผ๋กœ JPA๋‚˜ Spring boot๋“ฑ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ํ•™์Šตํ–ˆ๋˜ ๊ธฐ์ˆ ๋“ค์„ ํ™œ์šฉํ•˜๋ฉฐ ์ฒด๋“ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ฌธ์ œ, Fetch Join ์ค‘๋ณต ๋ฌธ์ œ ๋“ฑ ๊ฐ•์˜๋ฅผ ์ˆ˜๋™์ ์œผ๋กœ ๋“ค์„ ๋•Œ๋Š” ์ƒ๊ฐํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ๋“ค์„ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ดํ•ด์™€ ์ˆ™๋ จ๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ณต์žกํ•œ Spring Security๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํž˜๋“ค์—ˆ์ง€๋งŒ, ๊ณต์‹๋ฌธ์„œ, ์œ ํŠœ๋ธŒ, ๋ธ”๋กœ๊ทธ ๋“ฑ ์—ฌ๋Ÿฌ ๋งค์ฒด๋“ค๋กœ ๋ถ€๋”ชํžˆ๋ฉฐ ๊ฒฐ๊ตญ ๊ตฌํ˜„ํ•ด๋ƒˆ๊ณ , ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ํ•™์Šตํ•  ๋•Œ ํ•„์š”ํ•œ ์ธ๋‚ด์‹ฌ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ์œผ๋กœ ์„œ๋น„์Šค ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ฒฝํ—˜ํ–ˆ๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋‚˜ ๋กœ๊น…์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ์š”์†Œ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ๋‹ค์–‘ํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํŠผํŠผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ™•์‹ ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋น ๋ฅธ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ์„ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒ€์ ์œผ๋กœ๋Š” ํ”„๋ก ํŠธ & ๋ฐฑ์—”๋“œ๋ฅผ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœํ•ด ๋ณธ ๊ฒƒ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํ‰์†Œ ํ˜‘์—…์„ ์ž˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์ด ์žˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ƒ๋Œ€์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ†ต ๋ฐฉ๋ฒ•, ์†Œํ†ต์˜ ๊ฒฐ๊ณผ๋ฌผ์„ API ๋ช…์„ธ์„œ์— ์ƒ์„ธํžˆ ๊ธฐ๋กํ•˜์—ฌ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ๋“ฑ ํ˜‘์—… ์Šคํ‚ฌ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”„๋กœ์ ํŠธ ํŒ€์žฅ์„ ๋งก์œผ๋ฉด์„œ ํšŒ์˜๋ฅผ ์ž˜ ์ฃผ๋„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ์‹œ๋„๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ํ•ด๋ณด๋ฉด์„œ ์–ด๋А ์ •๋„ ๊ทธ ํ•ด๋‹ต์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
ํŒ€์› ๋ชจ๋‘๊ฐ€ ํŠน์žฅ์ ์ด ๋‹ฌ๋ž๊ณ , ๊ฐ์ž๊ฐ€ ์ œ ์—ญํ• ์„ ๋„ˆ๋ฌด ์ž˜ ํ•ด์ฃผ์–ด์„œ 6์ฃผ ๋‚ด๋‚ด ์ˆ˜์›”ํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๋ถ„๋“ค์˜ ํŒ€์žฅ์„ ๋งก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒŒ ๊ฐ€์žฅ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋“ค ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค!!

๊น€ํ˜œ๋ฆผ

๊ฐœ๋ฐœ์ž๋กœ ์ง„๋กœ๋ฅผ ์ „ํ™˜ํ•˜๊ณ  ์ฒ˜์Œ์œผ๋กœ ๊ทœ๋ชจ์žˆ๋Š” (๋น„๊ต์ ) ์žฅ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํŒ€์œผ๋กœ์จ์˜ ์‹œ๋„ˆ์ง€๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ œ ์ž์‹ ์ด 1์ธ๋ถ„์„ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด์„œ ๋” ๊ฑฑ์ •์ด ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ €ํฌ๊ฐ€ ๋ฐ”๋ผ๋˜ ํ˜•ํƒœ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด์„œ ์ •๋ง ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค:)
์‚ฌ์‹ค ๊ณตํ†ตํ”„๋กœ์ ํŠธ๋Š” ์ €์—๊ฒŒ ๋งค ์ˆœ๊ฐ„์ด ๋„์ „์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€์„ ๋งŒ๋“ค์–ด๊ฐ€๊ณ , ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๊ณ , ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ , ์‹ค์ œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์–ด๋А ๊ฒƒ ํ•˜๋‚˜ ์‰ฝ๊ฒŒ ๋„˜์–ด๊ฐ”๋˜ ๊ฒƒ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ฌ์„ฑํ•ด ๋‚˜๊ฐ€๊ณ  ์–ด๋ ค์›€์„ ๊ทน๋ณตํ•  ๋•Œ๋งˆ๋‹ค ๋А๊ฒผ๋–ค ์งง๊ณ  ๊ตต์€ ํฌ์—ด์€ ๋‚˜์ค‘์—๋„ ๊ณ„์† ๊ธฐ์–ต์— ๋‚จ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ €ํฌ๊ฐ€ ์›ํ•˜๋˜ ๋ชฉํ‘œ๋ฅผ ์ด๋ฃฌ ์ด ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ์ด ๋”์šฑ ๋ฟŒ๋“ฏํ•˜๊ฒŒ ๋А๊ปด์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ง€๋‚œ๋ฒˆ์— ํŒ€์›๋“ค์—๊ฒŒ ๋งํ–ˆ๋“ฏ, ์ €ํฌ ํŒ€์€ ๊ฐ์ž ํ•œ๋ช… ํ•œ๋ช…์˜ ์žฅ์ ์ด ๋ช…ํ™•ํ•œ ํŒ€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ถ„๋ช…ํžˆ ๊ตฌ๋ถ„๋œ ์žฅ์ ์ด ์„œ๋กœ๋ฅผ ๋ณด์™„ํ•˜๊ณ  ๋•Œ๋ก  ์‹œ๋„ˆ์ง€๋ฅผ ๋ฐœํœ˜ํ•ด ๊ฐ์ž 1.3์ธ๋ถ„์”ฉ์€ ๋“ ๋“ ํ•˜๊ฒŒ ๋งก์•„์คฌ๋˜ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณตํ†ต ํ”„๋กœ์ ํŠธ์—์„œ ์ง„์ •ํ•œ ํ˜‘์—…์ด๋ž€ ๋ฌด์—‡์ธ์ง€๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด ๋„ˆ๋ฌด๋‚˜ ๋œป๊นŠ๊ณ  ๋•Œ๋ก  ๊ฐ๋™์ ์ธ ์ˆœ๊ฐ„๋“ค์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค ๋‹จ๊ณ„์—์„œ ํšจ์œจ์ ์œผ๋กœ ์†Œํ†ตํ•˜๊ณ  ๋งก์€ ๋ฐ” ์ตœ์„ ์„ ๋„˜์–ด ์ตœ๊ณ ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด์ค€ ํŒ€์›๋“ค์—๊ฒŒ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์”€ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. 4ํŒ€ ๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์‹ ๋ฏผ์•„

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋งŽ์€ ์‹ ๊ธฐ์ˆ ๊ณผ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. CI/CD๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ ํ‰์†Œ์— ๊ด€์‹ฌ์žˆ์—ˆ๋˜ Docker๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๋ฉฐ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆํ™” ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•, Docker์˜ ๋ช…๋ น์–ด์™€ Dockerfile ์ž‘์„ฑ๋ฒ• ๋“ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋ฐ Docker์— ๋Œ€ํ•œ ๊ธฐ์ดˆ์ ์ธ ์ง€์‹์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Jenkins๋„ ๋„์ž…ํ•˜์—ฌ Frontend์™€ Backend ๊ฐœ๋ฐœ ์‹œ ์ž๋™์œผ๋กœ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ์— ๊ฐ€๊น๊ฒŒ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ์˜ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ๋ฟŒ๋“ฏํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ์™ธ์—๋„ ์ „๋ฐ˜์ ์ธ ์„œ๋ฒ„ ๊ด€๋ฆฌ๋ฅผ ๋„๋งก์•„์„œ Ubuntu ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ  Nginx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ SSL ์ ์šฉ๋„ ํ•ด๋ณด๋ฉฐ ์กฐ๊ธˆ ๋” ํ˜„์—…์—์„œ ์‚ฌ์šฉํ•˜๋Š” DevOps์™€ ๊ฐ€๊นŒ์›Œ ์ง„ ๊ฒƒ ๊ฐ™์•„ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ‰์†Œ์— ์‚ฌ์šฉํ•ด ๋ณด์ง€ ๋ชปํ•œ Spring Boot ๊ด€๋ จ ๊ธฐ์ˆ ์ธ JPA๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ DB ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํ™œ๋ฐœํ•œ Code Review๋ฅผ ํ†ตํ•ด ๋†“์ณค๋˜ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ–ˆ๋˜ ๊ฒฝํ—˜๊ณผ, Spring Security์™€ QueryDsl ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ์ฒดํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ธฐ์–ต์— ๋‚จ์Šต๋‹ˆ๋‹ค!
ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ Jira, Notion์„ ํ†ตํ•ด ์ฒด๊ณ„์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ์ผ๊ฐ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด ์ข‹์•˜์œผ๋‚˜, ์ƒ๊ฐ๋ณด๋‹ค ๋ฒ„๊ทธ์™€ ์‹ธ์šฐ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์„œ ์‹œ๊ฐ„ ๋ถ„๋ฐฐ ๋“ฑ์„ ์ •ํ™•ํ•˜๊ฒŒ ํ•˜์ง€ ๋ชปํ•œ ์ ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ, ์—ด์ •์ ์ด๊ณ  ๋„์ „์ ์ด๋ฉฐ ๋Šฅ๋ ฅ์น˜๊ฐ€ ์ข‹์€ ํŒ€์›๋“ค์„ ๋งŒ๋‚˜ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ๋„ ์‹ญ์‹œ์ผ๋ฐ˜ ๋„์™€์ฃผ์…”์„œ ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•œ ์ ๋„ ๋งŽ๊ณ  ํƒ„ํƒ„ํ•œ ํŒ€์›Œํฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ UR IN์ด๋ผ๋Š” ๋ฉด์ ‘ ์„œ๋น„์Šค ๊ฐœ๋ฐœ์„ ์ˆœ์กฐ๋กญ๊ฒŒ ๋งˆ๋ฌด๋ฆฌ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๊ณ ์ƒ ๋งŽ์ดํ•œ ๋™๋ฅ  ์—†๋Š” ๋™๋ฅ ํŒ€ ํŒ€์›๋“ค๊ป˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์‹ ์ฐฝํ˜ธ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ 6์ฃผ๋ผ๋Š” ์งง์€ ๊ธฐ๊ฐ„๋™์•ˆ ํ•˜๊ธฐ์—๋Š” ์กฐ๊ธˆ ๋งŽ์€ ๋ชฉํ‘œ๋ฅผ ์„ธ์› ๋Š”๋ฐ ํŒ€์›๋“ค์ด ๊ฐ์ž์˜ ์—ญํ• ์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ด ์ฃผ์…”์„œ ์ด๋ ‡๊ฒŒ ์ข‹์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ž ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ๋‹ฌ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์œ ๊ธฐ์ ์œผ๋กœ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•ด ์ตœ๊ณ ์˜ ํšจ์œจ์„ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋˜ React, OpenVidu, teachablemachine, face-api์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์— ๋งŽ์ด ๋„์ „ํ–ˆ๋Š”๋ฐ ๋•Œ๋ก  ํฐ ๋‚œ๊ด€์— ๋ถ€๋”ชํ˜€ ํž˜๋“ค๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๋๊นŒ์ง€ ์ตœ์„ ์„ ๋‹คํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ทธ๋งŒํผ ์„ฑ์žฅํ•˜์ง€ ์•Š์•˜๋‚˜ ์‹ถ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•จ๊ป˜ ๊ณ ์ƒํ•ด์ค€ ํŒ€์›๋“ค, ์ •๋ง ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํŒ€์›๋“ค์ด์—ˆ๊ณ  ๊ฐ™์ด ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ •๋ง ์ข‹์•˜์Šต๋‹ˆ๋‹ค! ๋ชจ๋‘ ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค~

์•ˆ์›…์ง„

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— ์ค‘๊ฐ„์— ํ•ฉ๋ฅ˜ํ•˜๊ฒŒ๋˜์–ด ์ด๋ž˜์ €๋ž˜ ๋ถ€์กฑํ•œ๋ถ€๋ถ„๋„ ๋งŽ์•˜์ง€๋งŒ ์ข‹์€ ํŒ€์›๋ถ„๋“ค์ด ์žˆ์–ด ๋งŽ์ด ๋ฐฐ์šฐ๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—์„œ react๋ฅผ ํ•˜๊ฒŒ๋˜์–ด ์ฒ˜์Œ์ด์—ˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ๊ฒฝํ—˜์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ๋ฐฐ์šด ํ˜‘๋ ฅ๊ฒฝํ—˜๊ณผ ๊ธฐ์ˆ ์„ ๊ฐ€์ง€๊ณ  ํŒ€์›๋ถ„๋“ค ๋‹ค ์ž˜๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ๊ณผ ์ž˜ ์ด๋Œ์–ด์ฃผ์‹  ํŒ€์›๋ถ„๋“ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 49.3%
  • Java 43.3%
  • CSS 6.9%
  • Other 0.5%