Skip to content

BongSangKim/Moducha

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Moducha (๋ชจ๋‘์ฐจ, ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ฐจ)

๋งˆ์ž์šฉ (๊ตฌ๋ฏธย 2๋ฐ˜ย 2์กฐ D202)

๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ฐจ

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 2024.07.01 - 2024.08.16 (7์ฃผ)


๋…ธ์…˜ ย  | ย  JIRA ๋ฐฑ๋กœ๊ทธ ย  | ย  ํ”ผ๊ทธ๋งˆ ย  | ย  ๋ฏธ๋กœ ย  | ย  dockerhub


์นดํ…Œ๊ณ ๋ฆฌ

Application Domain Language Framework
โœ… Desktop Web ๐Ÿ”ฒ AI ๐Ÿ”ฒ JavaScript ๐Ÿ”ฒ Vue.js
โœ… Mobile Web ๐Ÿ”ฒ Big Data โœ… TypeScript โœ… React
โœ… Responsive Web ๐Ÿ”ฒ Blockchain ๐Ÿ”ฒ C/C++ ๐Ÿ”ฒ Angular
๐Ÿ”ฒ Android App ๐Ÿ”ฒ IoT ๐Ÿ”ฒ C# โœ… NginX
๐Ÿ”ฒ iOS App ๐Ÿ”ฒ AR/VR/Metaverse ๐Ÿ”ฒ Python ๐Ÿ”ฒ Flask/Django
๐Ÿ”ฒ Desktop App ๐Ÿ”ฒ Game โœ… Java โœ… Spring/Springboot
๐Ÿ”ฒ Kotlin


๐Ÿ‘‡ ๋ชจ๋‘์ฐจ ์†Œ๊ฐœ ๋ฐ ์‹œ์—ฐ ์˜์ƒ ๐Ÿ‘‡

๋ชจ๋‘์ฐจ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๐Ÿ‘‰์—ฌ๊ธฐ๐Ÿ‘ˆ์—์„œ ๋” ์ž์„ธํžˆ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๐Ÿต ๋ชจ๋‘์ฐจ ์ƒ์„ธ ์„ค๋ช…

๐Ÿ“Œ ๊ธฐํš ๋ฐฐ๊ฒฝ

ํ‹ฐํƒ€์ž„ ๋ฐฉ์†ก์„ ํ†ตํ•ด ์ฐจ ๋ฌธํ™”๋ฅผ ์ฆ๊ธฐ๊ณ , ์ฐจ๋ฅผ ์†Œ๋ถ„ํ•˜๋ฉฐ ์„œ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฌธํ™”๋ฅผ ํ•จ๊ป˜ํ•˜๋Š” ํ”Œ๋žซํผ


โ“ ์™œ ํ‹ฐํƒ€์ž„์„ ์˜จ๋ผ์ธ์œผ๋กœ ํ•˜๋‚˜์š”?

์ฐจ๋Š” ๋‹จ์ˆœํžˆ ์šฐ๋ฆฌ๊ณ  ๋งˆ์‹œ๋Š” ๊ฒƒ๋งŒ์ด ์ „๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
์ฐจ๋ฅผ ์šฐ๋ฆฌ๊ณ  ์‹œ์Œํ•˜๊ณ  ์ฆ๊ธฐ๋Š” ๊ณผ์ • ๊ทธ ์ž์ฒด๋ฅผ ํ•จ๊ป˜ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ฐจ๋ฅผ ์ฆ๊ธฐ๋Š” ์‚ฌ๋žŒ, ์ฐจ๋ฅผ ์ฆ๊ธฐ๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ ๋ชจ๋‘ ๊ฐ™์ด ์ฆ๊ฑฐ์›€์„ ๋Š๋‚„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ชจ๋‘์ฐจ ๋ชฉ์ 

์ฐจ ๋ฌธํ™”์— ์ž…๋ฌธํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์‰ฝ๊ฒŒ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ์ฐจ๋ฅผ ์ฆ๊ธฐ๋˜ ์• ํ˜ธ๊ฐ€๋“ค๋„ ๋‚˜๋ˆ”์˜ ์ฆ๊ฑฐ์›€์„ ๋” ํ‚ค์šธ ์ˆ˜ ์žˆ๊ฒŒ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ์ฐจ ๋ฌธํ™”๋ฅผ ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ–ฅ์œ  ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค.

  • ์• ํ˜ธ๊ฐ€ : ์ฐจ๋ฅผ ๋‚˜๋ˆ”ํ•˜๊ณ , ํ•จ๊ป˜ ์ฐจ๋ฅผ ๋งˆ์‹œ๋ฉฐ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
  • ๐ŸŒฑ์ž…๋ฌธ์ž : ์ฐจ์˜ ์ข…๋ฅ˜์™€ ๋ง›, ์ทจํ–ฅ, ์ฐจ ์šฐ๋ฆฌ๋Š” ๋ฒ• ๋“ฑ ์ •๋ณด๋ฅผ ์–ป๋Š”๋‹ค.

๐Ÿ€ ์ฐจ๋ฅผ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ฆ๊ฑฐ์›€๊ณผ ํŽธ์˜ ์ œ๊ณต


๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ์‚ฌ์šฉ์ž ๋ชฉํ‘œ

์ฐจ๋ฅผ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์˜จ๋ผ์ธ์œผ๋กœ ์‹œ์ŒํšŒ๋ฅผ ์ฆ๊ธฐ๊ณ , ๋ถ€๊ฐ€์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํ™”์ƒ๋ชจ์ž„/์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ


์ฐจ์™€ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์ฆ๊ฑฐ์›€/ํŽธ์˜ ์ œ๊ณต

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


๐Ÿ–ฅ๏ธ ๋ชจ๋‘์ฐจ ์„œ๋น„์Šค ํ™”๋ฉด

๋ฉ”์ธ

๋ฉ”์ธ

๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ

๋‚˜๋ˆ” - ๋ชฉ๋ก, ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ

๋‚˜๋ˆ” ๋ชฉ๋ก ์กฐํšŒ

๋‚˜๋ˆ” - ๊ธ€ ์“ฐ๊ธฐ, ์กฐํšŒ, ์ˆ˜์ •

๋‚˜๋ˆ” ๊ธ€

๋‚˜๋ˆ” - ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€

๋‚˜๋ˆ” ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€

๋‚˜๋ˆ” - ์ฐธ๊ฐ€

๋‚˜๋ˆ” ์ฐธ๊ฐ€

๋‚˜๋ˆ” - ์ฐธ๊ฐ€์ž ๋ชฉ๋ก ์กฐํšŒ

๋‚˜๋ˆ” ์ฐธ๊ฐ€์ž ๋ชฉ๋ก ์กฐํšŒ

ํ‹ฐํƒ€์ž„ - ๋ชฉ๋ก, ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ

ํ‹ฐํƒ€์ž„ ๋ชฉ๋ก ์กฐํšŒ

ํ‹ฐํƒ€์ž„ - ๊ธ€ ์“ฐ๊ธฐ, ์กฐํšŒ, ์ˆ˜์ •

ํ‹ฐํƒ€์ž„ ๊ธ€

ํ‹ฐํƒ€์ž„ - ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€

ํ‹ฐํƒ€์ž„ ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€

ํ‹ฐํƒ€์ž„ - ์ฐธ๊ฐ€

ํ‹ฐํƒ€์ž„ ์ฐธ๊ฐ€

ํ‹ฐํƒ€์ž„ - ๋ฐฉ์†ก, ์นด๋ฉ”๋ผ ๋ฐ ์†Œ๋ฆฌ on/off, ๊ฐ•ํ‡ด, ์ฑ„ํŒ…

ํ‹ฐํƒ€์ž„ ๋ฐฉ์†ก ํ‹ฐํƒ€์ž„ ๊ฐ•ํ‡ด

ํ‹ฐํƒ€์ž„ - ์ฑ„ํŒ…

ํ‹ฐํƒ€์ž„ ์ฑ„ํŒ…

๋งˆ์ดํŽ˜์ด์ง€ - ํ‹ฐํƒ€์ž„,๋‚˜๋ˆ” ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ

๋งˆ์ดํŽ˜์ด์ง€ ์กฐํšŒ

๋งˆ์ดํŽ˜์ด์ง€ - ๋‹‰๋„ค์ž„ ์ˆ˜์ •

๋งˆ์ดํŽ˜์ด์ง€ ๊ฐœ์ธ ์ •๋ณด-๋‹‰๋„ค์ž„ ์ˆ˜์ •

๋งˆ์ดํŽ˜์ด์ง€ - ํƒˆํ‡ด

๋งˆ์ดํŽ˜์ด์ง€ ๊ฐœ์ธ ์ •๋ณด-ํƒˆํ‡ด



๐Ÿ”Ž ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ
    • OAuth2๋ฅผ ์ด์šฉํ•œ ๊ตฌ๊ธ€ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ง€์›
  • webRTC๋ฅผ ํ†ตํ•œ ํ‹ฐํƒ€์ž„ ๋ฐฉ์†ก
    • ๋น„๋””์˜ค ๋ฐ ์†Œ๋ฆฌ on/off, ๊ฐ•ํ‡ด, ํ™”๋ฉด ๊ณต์œ , ์ฑ„ํŒ…
  • ์ฐจ ๋‚˜๋ˆ”/ํ‹ฐํƒ€์ž„ ๊ฒŒ์‹œํŒ
  • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ

์ฐจ๋ณ„์ 

๊ธฐ์ˆ  ๊ด€์ 

  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™”
  • WebRTC & WebSocket ๊ธฐ๋ฐ˜์˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์ฑ„ํŒ… ๊ธฐ๋Šฅ ์ œ๊ณต
  • Nginx Reverse Proxy ์‚ฌ์šฉ
  • Nginx SSL Termination์„ ํ†ตํ•œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • FE, BE, MediaServer, DB๋ฅผ ๊ฐ docker ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ. ์•ˆ์ •์ ์ธ CI / CD ๊ตฌ์ถ•
  • Google OAuth2 + Spring Security + JWT ๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์ธ ๋กœ์ง ๊ตฌํ˜„์œผ๋กœ ์•ˆ์ •์ ์ด๋ฉฐ statelessํ•œ ์ธ์ฆ/์ธ๊ฐ€ ๊ตฌํ˜„

๊ธฐ๋Šฅ ๊ด€์ 

  • ์ฐจ ๋ฌธํ™”๋ฅผ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต.

    • ์›๊ฒฉ ํšŒ์˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์›๊ฒฉ ์‹œ์ŒํšŒ ์ง€์›
    • ์›ํ™œํ•œ ์‹œ์ŒํšŒ ์ง„ํ–‰์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋ณด์กฐ๊ธฐ๋Šฅ ์ œ๊ณต
      • ํ™”๋ฉด ๊ณต์œ 
      • ์Œ์†Œ๊ฑฐ ๋ฐ ํ•ด์ œ
      • ํ™”๋ฉด ๋„๊ธฐ ๋ฐ ์ผœ๊ธฐ
      • ๊ฐ•์ œํ‡ด์žฅ
  • ์ฐจ๋ฅผ ๋‚˜๋ˆ”ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ œ๊ณต

    • ๊ฒŒ์‹œ๊ธ€ ์“ฐ๊ธฐ ๋ฐ ๋Œ“๊ธ€/๋Œ€๋Œ“๊ธ€์„ ํ†ตํ•ด ์†Œํ†ต ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์ž์—๊ฒŒ ์ฐธ๊ฐ€์ž ๋ฐฐ์†ก์ •๋ณด ๋ฆฌ์ŠคํŠธ ์ œ๊ณต
  • ๋งˆ์ดํŽ˜์ด์ง€

    • ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๊ธ€, ์ฐธ์—ฌํ•œ ๊ธ€ ๋ชฉ๋ก ์ œ๊ณต
  • ๋ฐ˜์‘ํ˜• ์›น

    • ๋ชจ๋ฐ”์ผ UI ์ง€์›
    • ๋‹คํฌ๋ชจ๋“œ ์ง€์›


๐Ÿ”จ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๐Ÿ› ๏ธBackend

  • IntelliJ
  • spring boot
  • spring-boot-jpa
  • Spring Security
  • OAuth2
  • Java 17
  • MySQL
  • Redis
  • Gradle

๐Ÿ› ๏ธFrontend

  • Visual Studio Code
  • React
  • daysiUI
  • Zustand
  • TypeScript

๐Ÿ› ๏ธWeb RTC

  • OpenVidu 3.0.0-beta2

๐Ÿ› ๏ธCI/CD

  • aws ec2
  • docker
  • nginx
  • jenkins


๐Ÿ“‹ ๋ชจ๋‘์ฐจ ๊ด€๋ จ ๋ฌธ์„œ

๊ธฐ๋Šฅ ์ •์˜์„œ

๊ธฐ๋Šฅ ์ •์˜์„œ


์™€์ด์–ดํ”„๋ ˆ์ž„

์™€์ด์–ดํ”„๋ ˆ์ž„


์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€


ERDiagram

ERD ์ด๋ฏธ์ง€


Sequence Diagram

Sequence Diagram


API ๋ช…์„ธ์„œ

API ๋ช…์„ธ์„œ


๊ทธ๋ผ์šด๋“œ ๋ฃฐ

ํŒ€๊ทธ๋ผ์šด๋“œ ์ด๋ฏธ์ง€



๋ฉค๋ฒ„ ์†Œ๊ฐœ

๊น€๋ด‰์ƒ (FE) ๊ถŒ๋Œ€ํ˜ธ (FE) ์ตœ์ง„์˜ค (FE)
@BongSangKim @vaaast-lake @sidamodev
ํŒ€์žฅ
ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์žฅ
ํŒ€์› ํŒ€์›

๊น€์˜๊ทผ (BE) ๊น€๋ฒ”์ค‘ (BE) ๊น€์†Œ์—ฐ (BE)
@ramen4598 @bbamjoong @so-oyeon
๋ฐฑ์—”๋“œ ํŒ€์žฅ ํŒ€์› ํŒ€์›

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published