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

 
 
 

Contributors