Skip to content
@ClazzBridge

ClazzBridge

๐ŸŽ“ ClazzBridge

ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ(K-PaaS) ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์•„์ด๋””์–ด ๊ณต๋ชจ์ „ ์ถœํ’ˆ์ž‘



๐ŸŒŸ Description

6

๐Ÿ† ๋ชฉ์ /๋™๊ธฐ

๋„ค์ด๋ฒ„ํด๋ผ์šฐ๋“œ์บ ํ”„ ์ˆ˜๊ฐ• ์ค‘ ๊ฐ•์‚ฌ์™€ ์ˆ˜๊ฐ•์ƒ์˜ ์†Œํ†ต ๋ฌธ์ œ, ํ•™์›์˜ ์ˆ˜์—… ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ๋А๋ผ๊ณ  ๊ฐœ์„ ๋œ ํ•™์Šต ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ ์ž ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ๊ธฐ๋Œ€ ํšจ๊ณผ

ํ•™์Šต ์„ฑ๊ณผ ํ–ฅ์ƒ, ๊ฐ•์‚ฌ-ํ•™์ƒ ๊ฐ„ ์‹ ๋ขฐ ๊ฐ•ํ™”, ์ˆ˜์—… ์šด์˜ ํšจ์œจ์„ฑ ์ฆ๋Œ€, ํ•™์Šต ๊ณต๋™์ฒด ํ™œ์„ฑํ™”์™€ ๊ฐ™์€ ๊ธ์ •์ ์ธ ๋ณ€ํ™”๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“… ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ / ์ธ์›

  • ํ”„๋กœ์ ํŠธ๋ช… : ClazzBridge

  • ์ง„ํ–‰ ๊ธฐ๊ฐ„ : 2024.08 ~ 2024.11 (3๊ฐœ์›”)

  • ์ธ์›: 5๋ช…

  • ํŒ€์›:

  • Common Role : FullStack & DevOps

    • ๊ฐ•์Šฌ๊ธฐ GitHub
    • ๊ถŒ์ค€์„ฑ GitHub
    • ์ž„์ƒ์šฐ GitHub
    • ์ •์ฐฌ์šฐ GitHub
    • ์ตœ๋™์ธ GitHub
  • ํ™œ์šฉ ๊ธฐ์ˆ 

    • ๋ฉ”์ธ ๋ฐฑ์—”๋“œ - Java, Spring [Boot, Security, Data JPA], REST API, MySQL, Mapstruct
    • ์›น์†Œ์ผ“ ๋ฐฑ์—”๋“œ - Node.js, express, Socket.IO, redis, Axios
    • ํ”„๋ก ํŠธ์—”๋“œ - React, Redux, Material UI, Axios, Socket.IO
    • ๊ณตํ†ต - Role-based Access Control, JWT


๐Ÿ› ๏ธ Techs Used

Back-end

  • Java 11
  • Spring Boot 2.7.3
  • Gradle
  • Spring Data JPA
  • MySQL 8.0
  • Lombok
  • RESTful API
  • Mapstruct

Back-end WebSocket

  • Node.js
  • express
  • Socket.Io
  • redis

Front-end

  • React
  • JavaScript
  • jQuery
  • HTML 5
  • MUI
  • Axios
  • Socket.Io

Database

  • MySQL 8.0
  • Redis

Server & Deployment

  • Apache Tomcat v9.0
  • Naver Cloud Platform

CI/CD

  • GitHub Actions
  • Docker
  • Jenkins

Security

  • Spring Security
  • JWT

API

  • RESTful API

Collaboration

  • Github
  • Notion
  • Slack


๐Ÿ“ Project Design

43

14

ERD

image

47



๐Ÿ” Specific Description

๋กœ๊ทธ์ธ

16

  • JWT ์ธ์ฆ ํ™•์ธ ๋ฉ”์„œ๋“œ ์ œ์ž‘ (ํ’€์Šคํƒ)
    • ์•ก์„ธ์Šค ํ† ํฐ ์œ ํšจ ์‹œ
      1. ํด๋ผ์ด์–ธํŠธ์˜ API ์š”์ฒญ ํ—ค๋”์— ์‹ค๋ฆฐ ์•ก์„ธ์Šค ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ (๋ฐฑ์—”๋“œ)
      2. ์œ ํšจํ•  ๊ฒฝ์šฐ True ๋ฐ˜ํ™˜ ๋ฐ API ์‹คํ–‰ (๋ฐฑ์—”๋“œ)
    • ์•ก์„ธ์Šค ํ† ํฐ ๋ฌดํšจ, ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ ์œ ํšจ ์‹œ
      1. ํด๋ผ์ด์–ธํŠธ์˜ API ์š”์ฒญ ํ—ค๋”์— ์‹ค๋ฆฐ ์•ก์„ธ์Šค ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ (๋ฐฑ์—”๋“œ)
      2. ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜ (๋ฐฑ์—”๋“œ)
      3. False ๋ฐ˜ํ™˜ ์‹œ ์ฟ ํ‚ค์— ์‹ค๋ฆฐ ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ์„ ๋ฐฑ์—”๋“œ์— ๊ฒ€์‚ฌ ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ (ํ”„๋ก ํŠธ์—”๋“œ)
      4. ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ ์œ ํšจ ์‹œ True ๋ฐ˜ํ™˜ ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ (๋ฐฑ์—”๋“œ)
      5. True ๋ฐ˜ํ™˜ ์‹œ ๋ฐœ๊ธ‰๋œ ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ํ•จ๊ป˜ API ์žฌ์š”์ฒญ (ํ”„๋ก ํŠธ์—”๋“œ)
      6. ์•ก์„ธ์Šค ํ† ํฐ ๊ฒ€์‚ฌ ํ›„ ์š”์ฒญ API ์‹คํ–‰ (๋ฐฑ์—”๋“œ)
    • ์•ก์„ธ์Šค ํ† ํฐ ๋ฌดํšจ, ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ ๋ฌดํšจ ์‹œ
      1. ํด๋ผ์ด์–ธํŠธ์˜ API ์š”์ฒญ ์‹œ ํ—ค๋”์— ์‹ค๋ฆฐ ์•ก์„ธ์Šค ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ (๋ฐฑ์—”๋“œ)
      2. ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜ (๋ฐฑ์—”๋“œ)
      3. False ๋ฐ˜ํ™˜ ์‹œ ์ฟ ํ‚ค์— ์‹ค๋ฆฐ ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ์„ ๋ฐฑ์—”๋“œ์— ๊ฒ€์‚ฌ ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ (ํ”„๋ก ํŠธ์—”๋“œ)
      4. ๋ฆฌํ”„๋ ˆ์‰ฌ ํ† ํฐ ๋ฌดํšจ ์‹œ False ๋ฐ˜ํ™˜ (๋ฐฑ์—”๋“œ)
      5. False ๋ฐ˜ํ™˜ ์‹œ ๋กœ๊ทธ์•„์›ƒ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ (ํ”„๋ก ํŠธ์—”๋“œ)
  • Spring Security์™€ JWT๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ์‹ ๊ตฌํ˜„
  • DB ๋ฐ์ดํ„ฐ์™€ ๋น„๊ต ํ›„ ์ธ์ฆ ์‹คํŒจ ์‹œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

๋Œ€์‹œ๋ณด๋“œ

18

  • ๋กœ๊ทธ์ธ ์‹œ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ํŽ˜์ด์ง€
  • Role-based Access Control ์˜ˆ์™ธ์ฒ˜๋ฆฌ (๋ฐฑ์—”๋“œ)
    • ๋งค๋‹ˆ์ €๋Š” ๊ฐ•์˜ ์ง„ํ–‰ ์ƒํ™ฉ์ด ๋ณด์ด์ง€ ์•Š๊ณ , ์บ˜๋ฆฐ๋”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ๊ฐ•์‚ฌ์™€ ์ˆ˜๊ฐ•์ƒ์€ ๊ฐ•์˜ ์ง„ํ–‰ ์ƒํ™ฉ์ด ๋ณด์ด๊ณ , ์†Œ์† ๊ฐ•์˜์™€ ํ•™์› ์ „์ฒด ์ผ์ • ๋ฐ์ดํ„ฐ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์™ธ๋ถ€ API ์—ฐ๊ฒฐ, ์œ„์น˜ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค
    • OpenWeather API๋กœ ํ˜„์žฌ ์ ‘์† ์ง€์—ญ์˜ ๋‚ ์”จ ์ •๋ณด ์ œ๊ณต

๊ฐ•์˜์‹ค

35

  • ์ดํ•ด ์™„๋ฃŒ, ์† ๋“ค๊ธฐ, ์˜จ๋ผ์ธ์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ (ํ’€์Šคํƒ)
    • ๋ณธ์ธ์˜ ์ดํ•ด๋„ ๋ฐ ์† ๋“ค๊ธฐ ์ƒํƒœ๋ฅผ Floating Action Button์„ ๋ˆŒ๋Ÿฌ ํ‘œํ˜„ (์ˆ˜๊ฐ•์ƒ)
    • ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ์ดํ•ด๋„์™€ ์† ๋“ค๊ธฐ, ์˜จ๋ผ์ธ์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธ (๊ฐ•์‚ฌ)
    • WebSocket์œผ๋กœ ํ†ต์‹ ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐํšŒ ๊ฐ€๋Šฅ
    • redis-client๋ฅผ ํ†ตํ•œ redis ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
  • ํ•™์ƒ์˜ ํ˜„์žฌ ์ƒํƒœ ๋ฐ ์ขŒ์„ ๋ฐฐ์น˜ ์กฐํšŒ
    • ํ•™์ƒ ์ดํ•ด๋„, ์† ๋“ค๊ธฐ ํ™•์ธ (๊ฐ•์‚ฌ)
    • ๋ณธ์ธ์˜ ์ƒํƒœ ํ™•์ธ, ํƒ€ ํ•™์ƒ ํ”„๋กœํ•„ ์กฐํšŒ (์ˆ˜๊ฐ•์ƒ)

์งˆ์˜์‘๋‹ต ๊ฒŒ์‹œํŒ

33

  • ์งˆ์˜์‘๋‹ต CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„ (๋ฐฑ์—”๋“œ)
    • RESTful API ๊ตฌ์กฐ ์ค€์ˆ˜
    • ๋‹ต๋ณ€ CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„ (๊ฐ•์‚ฌ)
    • ์งˆ๋ฌธ CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ณธ์ธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ๋งŒ UD ๊ฐ€๋Šฅ (์ˆ˜๊ฐ•์ƒ)
  • Role-based Access Control ์˜ˆ์™ธ์ฒ˜๋ฆฌ (ํ’€์Šคํƒ)
    • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ถŒํ•œ๋ณ„ UI ์ฐจ์ด ๊ตฌํ˜„
    • ๋ฐฑ์—”๋“œ์—์„œ ๊ถŒํ•œ์— ๋งž์ง€ ์•Š๋Š” API ์š”์ฒญ ์‹œ ์—๋Ÿฌ ๋ฐ˜ํ™˜
    • ํƒ€์ธ์˜ ์งˆ๋ฌธ์— API ์š”์ฒญ ์‹œ, ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ธ์ฆ ์‹คํŒจ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜

ํˆฌํ‘œ

21

  • ํˆฌํ‘œ ๋‚ ์งœ์™€ ์ œ๋ชฉ, ๋‚ด์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ํˆฌํ‘œ ์ƒ์„ฑ (๊ฐ•์‚ฌ)
  • ํˆฌํ‘œ ๋ฆฌ์ŠคํŠธ ์ค‘ ํˆฌํ‘œ๋ฅผ ์„ ํƒํ•˜์—ฌ ํˆฌํ‘œ ๊ฐ€๋Šฅ (์ˆ˜๊ฐ•์ƒ)
  • Role-based Access Control - ๊ถŒํ•œ์— ๋งž์ง€ ์•Š๋Š” ์•ก์…˜ ์ˆ˜ํ–‰ ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์ปค๋ฎค๋‹ˆํ‹ฐ

์ปค๋ฎค๋‹ˆํ‹ฐ

  • ์งˆ๋ฌธ, ๊ณต์ง€์‚ฌํ•ญ, ํ”ผ๋“œ๋ฐฑ ๋“ฑ์˜ ์นดํ…Œ๊ณ ๋ฆฌ ๊ตฌ์„ฑ
  • ๊ณต์ง€์‚ฌํ•ญ์€ ์ตœ์ƒ๋‹จ์— ๊ณ ์ •
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด 0.5s ๋ฉˆ์ท„์„ ๋•Œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (๋””๋ฐ”์šด์‹ฑ)
  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ

๊ณผ์ œ

๊ณผ์ œ

  • ์ง„ํ–‰ ์ค‘, ๋งˆ๊ฐ ๋‹น์ผ, ๋งˆ๊ฐ๋œ ๊ณผ์ œ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋ฆฌ์•กํŠธ ํ€ผ ์—๋””ํ„ฐ๋กœ ๊ณผ์ œ ์ œ์ถœ ๊ฐ€๋Šฅ (์ˆ˜๊ฐ•์ƒ)
  • ํ•™์ƒ๋ณ„ ์ œ์ถœ ์ƒํƒœ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ (๊ฐ•์‚ฌ)
  • ๊ณผ์ œ ์ƒ์„ฑ ๊ฐ€๋Šฅ (๊ฐ•์‚ฌ)

์บ˜๋ฆฐ๋”

23

  • ์ผ์ • ๋‚ ์งœ์™€ ์ œ๋ชฉ, ๋‚ด์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ผ์ • ์ƒ์„ฑ (๊ฐ•์‚ฌ, ๋งค๋‹ˆ์ €)
  • ์ˆ˜๊ฐ•์ƒ์€ ์ผ์ • ์กฐํšŒ๋งŒ ๊ฐ€๋Šฅ (์ˆ˜๊ฐ•์ƒ)
  • ์ผ์ • ์‹œ์ž‘ ๋‚ ์งœ์™€ ๋ ๋‚ ์งœ๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • Role-based Access Control - ๊ถŒํ•œ์— ๋งž์ง€ ์•Š๋Š” ์•ก์…˜ ์ˆ˜ํ–‰ ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํšŒ์› ๊ด€๋ฆฌ

26

  • ๊ด€๋ฆฌ์ž ๊ณ„์ •๋งŒ ์ ‘๊ทผ ๋ฐ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์•„์ด๋””, ์ด๋ฉ”์ผ ๋“ฑ Key์— ๋Œ€ํ•œ ์ค‘๋ณต ์˜ˆ์™ธ์ฒ˜๋ฆฌ (ํ”„๋ก ํŠธ์—”๋“œ)
  • API์ง์ ‘ ์š”์ฒญ์œผ๋กœ ๋“ฑ๋ก ์š”์ฒญ ์‹œ์—๋„ JWT ๊ธฐ๋ฐ˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ (๋ฐฑ์—”๋“œ)

๊ฐ•์˜ ๋ฐ ๊ฐ•์˜์‹ค ๊ด€๋ฆฌ

28

  • ๊ด€๋ฆฌ์ž ๊ณ„์ •๋งŒ ์ ‘๊ทผ ๋ฐ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ๊ฐ•์˜์‹ค ์ด๋ฆ„, ์‚ฌ์šฉ์ค‘์ธ ๊ฐ•์˜์‹ค ๋“ฑ์— ๋Œ€ํ•œ ์ค‘๋ณต ์˜ˆ์™ธ์ฒ˜๋ฆฌ (ํ”„๋ก ํŠธ์—”๋“œ)
  • API์ง์ ‘ ์š”์ฒญ์œผ๋กœ ๋“ฑ๋ก ์š”์ฒญ ์‹œ์—๋„ JWT์™€ DB ๊ธฐ๋ฐ˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ (๋ฐฑ์—”๋“œ)

์ฑ„ํŒ… ๊ธฐ๋Šฅ

41

  • WebSocket์œผ๋กœ ํ†ต์‹ ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ (ํ’€์Šคํƒ)
  • Role-based Access Control ์˜ˆ์™ธ์ฒ˜๋ฆฌ
    • ์ฑ„ํŒ…์€ ์ˆ˜๊ฐ•์ƒ๊ณผ ๊ฐ•์‚ฌ๊ฐ€ ์†ํ•œ ๊ฐ•์˜ ๋ฉค๋ฒ„ ํ˜น์€ ๋งค๋‹ˆ์ €๋งŒ ์ฑ„ํŒ… ๊ฐ€๋Šฅํ•˜๋„๋ก ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • redis DB ์„ค๊ณ„
    • redis-client๋ฅผ ํ†ตํ•œ redis ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
    • ChatRoom:Id, ChatRoom:Id:Messages, User:Id๋กœ redis ๋ฐ์ดํ„ฐ Key ๊ตฌ์„ฑ

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ

47

  1. Git ์ฝ”๋“œ ๋ณ€๊ฒฝ (Git push)
  2. ์  ํ‚จ์Šค์—์„œ Github WebHook์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ธ์‹
  3. ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋กœ jar ๋นŒ๋“œ ๋ฐ docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ
  4. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ Docker Hub์— ํ‘ธ์‹œ
  5. SSH ํ‚ค ์ธ์ฆ๊ณผ ํ•จ๊ป˜ Docker Hub์— ํ‘ธ์‹œ๋œ ์ด๋ฏธ์ง€๋กœ ์ƒˆ ํ”„๋ก ํŠธ์—”๋“œ ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ
  6. ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฐฐํฌ ์™„๋ฃŒ

๋ฆฌํŒฉํ† ๋ง ๋ฐ ๋””๋ฒ„๊น…

  1. ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ฐ™์€ ๊ฐ•์˜์‹ค ์†Œ์†์˜ ๋ฉค๋ฒ„์™€ ๊ฐ•์‚ฌ, ๋งค๋‹ˆ์ € ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ ์‹๋ณ„ (๋ฐฑ์—”๋“œ)

    • Spring Data JPA๋กœ MySQL์— ๋ณต์žกํ•œ ๋กœ์ง์˜ ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ Query๋ฌธ์ด ๊ธธ๊ฒŒ ์ž‘์„ฑ๋˜๋Š” ๋ฌธ์ œ ์‹๋ณ„

    โ†’ LeftJoin, Where, Select๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด Query๋ฌธ ์ž‘์„ฑ ๋ฐ ์ตœ์ ํ™”

    โ†’ Query๋ฌธ ๊ธธ์ด ์ถ•์†Œ (100์ค„ โ†’ 6์ค„)

    โ†’ ์‹คํ–‰ ์‹œ๊ฐ„ ๋‹จ์ถ• (์•ฝ 40%)

  2. React ์ปดํฌ๋„ŒํŠธ ์ง„์ž… ๊ตฌ์กฐ๊ฐ€ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ์„ค๊ณ„๋˜๊ณ , ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šด ๋ฌธ์ œ ์‹๋ณ„ (ํ”„๋ก ํŠธ์—”๋“œ)

    โ†’ FrontEnd์˜ ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋ฅผ ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฆฌํŒฉํ† ๋ง

    โ†’ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Redux ์‚ฌ์šฉ

    โ†’ App ์ปดํฌ๋„ŒํŠธ๋ฅผ [Socket, Login, User] Provider๋กœ ๊ฐ์‹ธ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌ

  3. ์ƒˆ๋กœ๊ณ ์นจ ์‹œ UserData ์†Œ์‹ค ๋ฌธ์ œ (ํ”„๋ก ํŠธ์—”๋“œ)

    • ์ƒˆ๋กœ๊ณ ์นจ ์‹œ React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ชจ๋‘ ์–ธ๋งˆ์šดํŠธ๋œ ํ›„ ์žฌ๋งˆ์šดํŠธ
    • ์žฌ๋งˆ์šดํŠธ ๊ณผ์ •์—์„œ UserData UseState ์ดˆ๊ธฐ๊ฐ’์ธ null๋กœ ๊ฐ’ ์ดˆ๊ธฐํ™”

    โ†’ UserData UseState ์ดˆ๊ธฐ๊ฐ’์„ LocalStorage์—์„œ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •

  4. LocalStorage ๊ฐ’์„ ์ž„์˜๋กœ ์ˆ˜์ • ์‹œ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นจ (ํ”„๋ก ํŠธ์—”๋“œ)

    • LocalStorage์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๊ฐ€๊ณตํ•˜๋Š” ๋กœ์ง ๋ฐœ๊ฒฌ

    โ†’ LocalStorage ๋ฐ์ดํ„ฐ๋Š” ๋‹จ์ˆœ ์ฐธ์กฐ์šฉ์œผ๋กœ ์‚ฌ์šฉ.

    โ†’ ์žฌ๊ฐ€๊ณตํ•  ๋ฐ์ดํ„ฐ๋Š” Redux๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—”๋“œ๋กœ๋ถ€ํ„ฐ Fetchingํ•˜๋„๋ก ๋กœ์ง ๋ณ€๊ฒฝ

  5. ์ฑ„ํŒ…๋ฐฉ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋Š๊ธด ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ๋„ (ํ”„๋ก ํŠธ์—”๋“œ)

    • ์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์†Œ์ผ“ ์žฌ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋‚˜, ๋ฐ์ดํ„ฐ ์š”์ฒญ๋ณด๋‹ค ์žฌ์—ฐ๊ฒฐ์ด ๋А๋ฆฐ ๋™๊ธฐ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ
    • ์†Œ์ผ“ ์žฌ์—ฐ๊ฒฐ ์กฐ๊ฑด์ด SocketProvider ์ปดํฌ๋„ŒํŠธ ๋งˆ์šดํŠธ ์‹œ๋กœ ๋˜์–ด์žˆ์Œ์„ ๋ฐœ๊ฒฌ

    โ†’ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ(socket.emit())์‹œ

    โ†’ socket.connected() ๋ฉ”์„œ๋“œ ํ™•์ธ

    โ†’ False ์‹œ ์žฌ์—ฐ๊ฒฐ timeout 5์ดˆ ๋‚ด์— ์žฌ์—ฐ๊ฒฐ ์š”์ฒญ

    โ†’ ๋ฐ์ดํ„ฐ ์š”์ฒญ ์žฌ์‹œ๋„

    โ†’ False ์‹œ ์—๋Ÿฌ ๋ฐ˜ํ™˜

โ˜‘๏ธ ํ”„๋กœ์ ํŠธ ์„ฑ๊ณผ ๋ฐ ๋ฐฐ์šด์ 

  • ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ค‘์š”์„ฑ ๊ฒฝํ—˜
    • ์ดˆ๋ฐ˜์—” ๋– ์˜ค๋ฅด๋Š” ๋Œ€๋กœ, ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค๊ณ„ํ•˜๊ณ  UseCase ์„ค๊ณ„ ํ›„ ํ”„๋กœํ† ํƒ€์ž…์„ ์ œ์ž‘ํ•œ ๋’ค ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๊ตฌ์กฐ๊ฐ€ ์ œ๋Œ€๋กœ ํ™•๋ฆฝ๋˜์ง€ ์•Š์•„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์— ํฐ ์ฐจ์งˆ์„ ๋นš์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฒฐ๊ตญ ๋ถ€ํŠธ์บ ํ”„๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐฐ์šด ๊ฐœ๋ฐœ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ด ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ํƒ€์ž… ์ œ์ž‘ ํ›„ UseCase๋ฅผ ์•กํ„ฐ๋ณ„๋กœ ์‹๋ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์™€์ด์–ด ํ”„๋ ˆ์ž„์„ ์‹ค์„œ๋น„์Šค์— ๊ฐ€๊น๊ฒŒ ์„ค๊ณ„ํ•œ ๋’ค DB ๋ชจ๋ธ๋ง์„ ์ง„ํ–‰ํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๊ทธ ๊ฒฐ๊ณผ DB๋ชจ๋ธ๋ง์— ๋”ฐ๋ผ DDL๊ณผ Domain์„ ๋จผ์ € ๊ตฌํ˜„ํ•œ ๋’ค, UseCase์— ๋”ฐ๋ผ Controller์™€ Service๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ˆ ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰์ด ํ›จ์”ฌ ๋งค๋„๋Ÿฝ๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์–ด ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์˜ ์ˆœ์„œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ ์ง€ ๋ชธ์†Œ ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„ ์‹œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํ™•๋ฆฝ์˜ ์ค‘์š”์„ฑ
    • ์ฒซ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์ด๊ธฐ์— ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๊ฐœ๋…์ด ํ™•๋ฆฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ Domain, Controller, Service์˜ ๋ถ„๋ฆฌ ์—†์ด ํ†ต์งธ๋กœ ์ง„ํ–‰ํ•˜๋˜ ์ค‘ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์ด ์‰ฝ๊ณ  ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ Domain, Controller, Service, Util Method, RESTful API์˜ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ›จ์”ฌ ์šฉ์ดํ•ด์ง์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ธฐ๋ณธ ์›์น™์ธ SOLID ์›์น™์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์†Œํ†ต์˜ ์ค‘์š”์„ฑ ๊ฒฝํ—˜
    • ๊ฐ™์€ ํšŒ์˜๋ฅผ ํ•ด๋„ ๊ฐ์ž ์ƒ๊ฐํ•œ ๊ธฐ์ค€๊ณผ ์ฃผ๊ด€์ด ๋‹ฌ๋ผ ์†Œํ†ต์˜ ๊ฐ„๊ฒฉ์ด ๋„“์„์ˆ˜๋ก ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์› ๊ฐ„์˜ ์†Œํ†ต ์ฃผ๊ธฐ๋ฅผ ์ค„์—ฌ ๋” ์žฆ์€ ๋Œ€ํ™”๋ฅผ ์ด๋Œ์–ด ์ฃผ๊ด€ ์ฐจ์ด๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๊ฒ ์ง€, ํ•˜๋Š” ์‚ฌ์†Œํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ๋ชจ๋‘ ์†Œํ†ตํ•ด์•ผ ํ•จ์„ ๊นจ๋‹ซ๊ณ  ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์†Œํ†ตํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๊ทธ ๊ฒฐ๊ณผ ์†Œํ†ต์˜ ์ฐจ์ด๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ํŒ€๋‚ด ์†Œํ†ต์˜ ์˜ค๋ฅ˜๋ฅผ ์ค„์—ฌ ๋ถˆํ™”์˜ ์œ„๊ธฐ๋„ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์†Œํ†ต์˜ ๋นˆ๋„๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ, ์ฃผ๊ด€ ์ฐจ์ด์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Popular repositories Loading

  1. BackEnd BackEnd Public

    Java 3

  2. FrontEnd FrontEnd Public

    JavaScript 3

  3. .github .github Public template

  4. BackEnd-WebSocket BackEnd-WebSocket Public

    JavaScript 2

Repositories

Showing 4 of 4 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loadingโ€ฆ

Most used topics

Loadingโ€ฆ