Skip to content

CLOVIDER/.github

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

45 Commits
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“Œ Kids In Company - ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ๊ณต์ •ํ•œ ์ถ”์ฒจ ์„œ๋น„์Šค

์ž‘์„ฑ์ž: ๊น€ํ˜„๊ฒธ

๐Ÿ“Œ์‹คํ–‰ ๋ฐฉ๋ฒ•(๋กœ์ปฌ)

FE & BE ๋กœ์ปฌํ™˜๊ฒฝ ์‹คํ–‰ ๋ฐฉ๋ฒ•

๐Ÿ“Œ๋ฐฐํฌ ํ™˜๊ฒฝ

KIC-์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ

๋ชฉ์ฐจ

๐Ÿ€ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

1๏ธโƒฃ ์„œ๋น„์Šค ๊ธฐํš ์ด์œ 

์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘์€ ์ง์›๋“ค์—๊ฒŒ ์ค‘์š”ํ•œ ๋ณต์ง€ ์‹œ์„ค์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜์š”๊ฐ€ ๋งŽ์•„ ๋ชจ๋“  ์ง์›์˜ ์ž๋…€๊ฐ€ ์–ด๋ฆฐ์ด์ง‘์„ ์ด์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ง์›๋“ค ์‚ฌ์ด์—์„œ ๋ถˆ๋งŒ์„ ์ผ์œผํ‚ค๊ณ , ๊ณต์ •์„ฑ๊ณผ ํˆฌ๋ช…์„ฑ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

โœ… ๊ทธ๋ž˜์„œ ์ €ํฌ CloviderํŒ€์€ ๊ณต์ •ํ•œ ๊ฐ€์ค‘์น˜ ์ ์šฉํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹น์ฒจ ํ™•๋ฅ  ์ œ๊ณตํ•˜์—ฌ ๊ณต์ •ํ•˜๊ณ  ํˆฌ๋ช…ํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์„œ๋น„์Šค ์ฐจ๋ณ„์ 

  1. ๊ณต์ •์„ฑ ํ™•๋ณด: ๊ทผ์†๋…„์ˆ˜, ์‚ฌ๋‚ด ๋ถ€๋ถ€, ๋‹ค์ž๋…€ ๊ฐ€์ • ๋“ฑ ์—ฌ๋Ÿฌ ํƒ€๋‹นํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ํ†ตํ•ด ์ถ”์ฒจ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. ํˆฌ๋ช…์„ฑ ํ™•๋ณด: ์‹ ์ฒญํ•œ ์–ด๋ฆฐ์ด์ง‘ ๋ชจ์ง‘์˜ ๋‹น์ฒจ ํ™•๋ฅ ์„ ๊ณต๊ฐœํ•˜์—ฌ ์ถ”์ฒจ ๊ณผ์ •๊ณผ ๊ฒฐ๊ณผ๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ํ•ด ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

  3. ํšจ์œจ์„ฑ ํ–ฅ์ƒ: ์ˆ˜์ž‘์—…์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ์ถ”์ฒจ ๊ณผ์ •์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

3๏ธโƒฃ ์„œ๋น„์Šค ์†Œ๊ฐœ

๋””์ผ€์ดํ…Œํฌ์ธ ๋‚ด๋ถ€์˜ ๊ณต์ •ํ•˜๊ณ  ํˆฌ๋ช…ํ•œ ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ์ธ์› ๋ฐฐ์ •์„ ์œ„ํ•ด ์–ด๋ฆฐ์ด์ง‘ ๋ชจ์ง‘๊ณผ ์ถ”์ฒจ์„ ์ž๋™ํ™”ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.


๐Ÿ€ํ•ต์‹ฌ ๊ธฐ๋Šฅ

โญ ์‚ฌ์šฉ์ž

  • 1๊ฐœ์˜ ์‹ ์ฒญ์„œ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ์ถ”์ฒจ ํ†ตํ•ฉ ์‹ ์ฒญ
  • ์ง€์›ํ•œ ์ถ”์ฒจ ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒ, ๋‹น์ฒจ ํ™•๋ฅ  ์กฐํšŒ
  • ๊ณต์ง€์‚ฌํ•ญ ์กฐํšŒ, ์งˆ์˜์‘๋‹ต ์ž‘์„ฑ
  • ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ์ •๋ณด ์กฐํšŒ

โญ ๊ด€๋ฆฌ์ž

  • ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ ์กฐํšŒ (์„œ๋น„์Šค ํ†ต๊ณ„ ์ •๋ณด)
  • ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ๋ชจ์ง‘ ์ƒ์„ฑ ๋ฐ ์‹ ์ฒญํ˜„ํ™ฉ ๊ด€๋ฆฌ
  • ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ์ถ”์ฒจ ์ง„ํ–‰ & ๊ฒฐ๊ณผ ๊ด€๋ฆฌ
  • Google SMTP๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์ถ”์ฒจ ๊ฒฐ๊ณผ ์ „์†ก
  • ๊ณต์ง€์‚ฌํ•ญ, ์งˆ์˜์‘๋‹ต ๊ด€๋ฆฌ
  • ์‚ฌ๋‚ด ์–ด๋ฆฐ์ด์ง‘ ์ •๋ณด ๊ด€๋ฆฌ

๐Ÿ€ERD

image

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

image

๐Ÿ€์ตœ์ ํ™”ํ•œ ์‚ฌํ•ญ

๐ŸŒ• Frontend

1. ์ง€์—ฐ๋กœ๋”ฉ

  • ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ Editor์— ์ง€์—ฐ๋กœ๋”ฉ์„ ์ ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ๋˜๋Š” JS ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™” ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • unpacked size 3.5MB -> 0MB๋กœ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
import dynamic from 'next/dynamic'
const BlockNoteEditor = dynamic(() => import('./BlockNoteEditor'), {
  ssr: false,
  loading: () => <LoadingSpinner />,
})

2. ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”

  • useCallback, useMemo๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋„ ์พŒ์ ํ•œ UX๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
export default function useCreateQuery() {
  const searchParams = useSearchParams()

  const createQueryString = useCallback(
    (name: string, value: string) => {
      const params = new URLSearchParams(searchParams.toString())
      params.set(name, value)

      return params.toString()
    },
    [searchParams],
  )
  return createQueryString
}

3. ํŠธ๋ฆฌ์…ฐ์ดํ‚น

  • package.json์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉํ•˜์—ฌ ํŠธ๋ฆฌ์…ฐ์ดํ‚น์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•ด, ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ๋˜๋Š” ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ 25% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
  "sideEffects": false

4. ํฐํŠธ์ตœ์ ํ™”

  • NextJs๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ, JS ๋‹ค์šด๋กœ๋“œ๋กœ ์ธํ•œ UI blocking ํ˜„์ƒ์„ ์ตœ์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • display: swap ์„ค์ •์„ ํ†ตํ•ด ์œ ์ €๋Š” ํฐํŠธ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ๋นˆํ™”๋ฉด์„ ๋ณด๊ณ ์žˆ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ์›น ์„ฑ๋Šฅ์ง€ํ‘œ ์ค‘ FCP, TTI๋ฅผ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
const Pretendard = localFont({
  src: './fonts/PretendardVariable.woff2',
  display: 'swap',
  weight: '45 920',
})

5. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ตœ์ ํ™”

  • framer-motion์€ transform ๊ธฐ๋ฐ˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ reflow, repaint๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • GPU ๊ฐ€์†์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์›น ์„ฑ๋Šฅ์„ ์ €ํ•ดํ•˜์ง€ ์•Š๊ณ  ๊ณ ์‚ฌ์–‘์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
<motion.div
        initial={{ y: 0 }}
        animate={{ y: [0, -20, 0] }}
        transition={{
          duration: 2,
          ease: 'easeInOut',
          repeat: Infinity,
          repeatType: 'loop',
        }}
      >

6. ๋™์‹œ์„ฑ ๋ Œ๋”๋ง

  • useDeferredValue๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ, UI ๋ Œ๋”๋ง๋ณด๋‹ค ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ์ด ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ms ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋””๋ฐ”์šด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  const [searchInput, setSearchInput] = useState<string>('')
  const deferredSearchInput = useDeferredValue(searchInput)

๐ŸŒ‘ Backend

1. ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ API ๊ฐœ๋ฐœ์„ ํ†ตํ•œ ํŽ˜์ด์ง€ ์•ฝ 2.3๋ฐฐ ์ตœ์ ํ™”

PR #77

2. Scheduler๋ฅผ ํ†ตํ•œ ์„œ๋น„์Šค ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ฐ„ S3 ํ˜ธ์ถœ ์˜์กด์„ฑ ์ œ๊ฑฐ

PR #59

3. Redis ์บ์‹ฑ์„ ํ†ตํ•œ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ๋ชจ์ง‘ ์ •๋ณด, ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ ์†๋„ ๊ฐœ์„  ๋ฐ ์ตœ์ ํ™”

#186

4. ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ™œ์šฉํ•œ ๊ด€๋ฆฌ์ž ๋ชจ์ง‘ ๊ฒฐ๊ณผ ์ด๋ฉ”์ผ ์ „์†ก(SMTP) ๊ธฐ๋Šฅ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

PR #49

5. ์ ์ง„์ ์ธ ๊ณต์ง€์‚ฌํ•ญ ์กฐํšŒ์ˆ˜ ์ค‘๋ณต ์ฒ˜๋ฆฌ ๋ฐฉ์ง€ ๋กœ์ง ๊ฐœ์„  (์ฟ ํ‚ค -> redis)

PR #59 PR #141

6. Aws Lambda๋ฅผ ํ†ตํ•œ ๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž์˜ ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋‹น์ฒจ ํ™•๋ฅ  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฒ˜๋ฆฌ -> ์†๋„ ๊ฐœ์„ 

๐ŸŒ— Infra

1. Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - Gradle JIB ๋นŒ๋“œ๋ฅผ ํ†ตํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ 77% ๋‹จ์ถ•

image

2. Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ - JRE ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ์„ฑ ๊ฐ•ํ™” ๋ฐ ์ด๋ฏธ์ง€ 2.5๋ฐฐ ๊ฒฝ๋Ÿ‰ํ™”

image

PR #120

3. Github Self-hosted Runner๋ฅผ ํ†ตํ•œ Private Workflow ์ด์šฉ ์ œํ•œ ํ•ด๊ฒฐ

image

๐Ÿ€ํ™”๋ฉด ๊ตฌ์„ฑ

์‚ฌ์šฉ์ž ๋žœ๋”ฉ ํŽ˜์ด์ง€ ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ
image image
์–ด๋ฆฐ์ด์ง‘ ๋ชจ์ง‘ ์‹ ์ฒญ ํŽ˜์ด์ง€ 1 ์–ด๋ฆฐ์ด์ง‘ ๋ชจ์ง‘ ์‹ ์ฒญ ํŽ˜์ด์ง€ 2
image
๋ชจ์ง‘ ์‹ ์ฒญ ๋‚ด์—ญ ํŽ˜์ด์ง€ ๋ชจ์ง‘ ๋‹น์ฒจ ํ™•๋ฅ  ํŽ˜์ด์ง€
๊ด€๋ฆฌ์ž ๋ชจ์ง‘ ์„ค์ • ํŽ˜์ด์ง€ 1 ๊ด€๋ฆฌ์ž ๋ชจ์ง‘ ์„ค์ • ํŽ˜์ด์ง€ 2
๊ด€๋ฆฌ์ž ์‹ ์ฒญ ๊ด€๋ฆฌ ํŽ˜์ด์ง€ ๊ด€๋ฆฌ์ž ์ถ”์ฒจ ๊ด€๋ฆฌ ํŽ˜์ด์ง€
๊ณต์ง€์‚ฌํ•ญ ํŽ˜์ด์ง€ ์–ด๋ฆฐ์ด์ง‘ ์ •๋ณด ํŽ˜์ด์ง€
image image

๐Ÿ€๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰๊ธฐ๊ฐ„ : 24.07.01 ~ 08.23

์ž‘์—… ๊ธฐ๊ฐ„ ํ”„๋กœ์„ธ์Šค ๋‹จ๊ณ„ ์ž‘์—… ๋‚ด์—ญ ์‚ฐ์ถœ๋ฌผ
24.07.01 ~ 07.14 ์„œ๋น„์Šค ๊ธฐํš ๐Ÿ“Œ ์š”๊ตฌ์‚ฌํ•ญ ๋„์ถœ, ์ •์˜, ๊ฒ€ํ† 
๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ์„ค์ •, ์„œ๋น„์Šค ๋„๋ฉ”์ธ ์กฐ์‚ฌ
์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ, WBS, ์šฉ์–ด ์‚ฌ์ „
24.07.12 ~ 07.21 ์„ค๊ณ„ ๋‹จ๊ณ„ ๐Ÿ“Œ UI/UX ์„ค๊ณ„, ๋ฉ”๋‰ด ๊ตฌ์กฐ๋„, ์—…๋ฌด ํ๋ฆ„๋„
๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„, ํ…Œ์ด๋ธ” ๋ช…์„ธ์„œ
๐Ÿ“Œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„, ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •
ํ™”๋ฉด ์„ค๊ณ„์„œ, ๋ฉ”๋‰ด ๊ตฌ์กฐ๋„, ์—…๋ฌด ํ๋ฆ„๋„
ERD, ํ…Œ์ด๋ธ” ๋ช…์„ธ์„œ, ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„์„œ
์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜, ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ๋„
24.07.22 ~ 08.16 ๊ตฌํ˜„ ๋‹จ๊ณ„ ๐Ÿ“Œ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ๋ฐ ์ฝ”๋“œ ๊ฐœ๋ฐœ, UI ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
๐Ÿ“Œ Request, Response DTO ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
๐Ÿ“Œ Restful API ๊ฐœ๋ฐœ, Infra ๊ตฌ์ถ•
ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ, ๋„์ปค ์ด๋ฏธ์ง€, ์ธํ”„๋ผ ํ™˜๊ฒฝ
24.08.11 ~ 08.17 ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„ ๐Ÿ“Œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
๐Ÿ“Œ ๋ธŒ๋ผ์šฐ์ € ์†๋„ ํ…Œ์ŠคํŠธ, Lighthouse ๋ถ„์„
JMeter ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ณด๊ณ ์„œ
24.08.17 ~ 08.23 ์ข…๋ฃŒ ์‚ฌ์šฉ์ž ๋ฐ ๊ด€๋ฆฌ์ž ํ™”๋ฉด ๋ฐ๋ชจ ์˜์ƒ
ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ
๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  ์ง„ํ–‰
๐Ÿ“Œ ์ข…๋ฃŒ ๋ณด๊ณ ์„œ ์ž‘์„ฑ ๋ฐ ๋ฐœํ‘œ ์ค€๋น„
ํšŒ๊ณ ๋ก, ๋ฐ๋ชจ์˜์ƒ
๋ฐœํ‘œ์ž๋ฃŒ, ์ข…๋ฃŒ ๋ณด๊ณ ์„œ

๐Ÿ€ํŒ€ & ์„œ๋น„์Šค ์†Œ๊ฐœ

Team: Clovider Service: KIC

๐Ÿ€ํŒ€์› ์†Œ๊ฐœ

BE

No.1 No.2 No.3
๊น€ํ˜„๊ฒธ ๊ถŒ๋ฏผ์šฐ ์ •์ค€ํฌ
PM, BE PL, BE BE
kylo-dev MINUUUUUUUUUUUU sungsil0624
No.4 No.5 No.6
์ •ํฌ์ฐฌ ์ด์ฃผ์•  ๊น€๊ด€์ผ
BE, Infra BE, Infra BE
anselmo228 leejuae KIM-KWAN-IL

FE

No.1 No.2 No.3
๊น€์„ฑ๋ฏผ ๊ณต์˜ˆ์˜ ์„œ์šฉ์ค€
PL, FE FE FE
Collection50 yeyounging mango0422

๐Ÿ€๊ธฐ์ˆ  ์Šคํƒ

image

About

Kids In Company Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published