IKKIM

πŸ“‹ κ΄€λ¦¬μž μ‚¬μ΄νŠΈ 개발 - λŒ€λŸ‰ 문자 μ„œλΉ„μŠ€

κ΄€λ¦¬μž νŽ˜μ΄μ§€ 메인 ν™”λ©΄ (MVP 단계)
κ΄€λ¦¬μž νŽ˜μ΄μ§€ 메인 ν™”λ©΄ (MVP 단계)
κ΄€λ¦¬μž νŽ˜μ΄μ§€ λͺ¨λ°”일 λ°˜μ‘ν˜• ν™”λ©΄ (MVP)
κ΄€λ¦¬μž νŽ˜μ΄μ§€ λͺ¨λ°”일 λ°˜μ‘ν˜• ν™”λ©΄ (MVP)
μ™Έμ£Ό μž‘μ—… API 규격 ν˜‘μ˜μ„œ
μ™Έμ£Ό μž‘μ—… API 규격 ν˜‘μ˜μ„œ

πŸ“Œ ν”„λ‘œμ νŠΈ κ°œμš”

  • λŒ€λŸ‰ 문자 전솑 ν”Œλž«νΌμ˜ 톡계 및 포인트 관리 μ–΄λ“œλ―Όμž…λ‹ˆλ‹€.
    수기둜 μ œκ³΅ν•˜λ˜ 고객 톡계 자료λ₯Ό μ›Ή ν™”λ©΄μœΌλ‘œ λŒ€μ²΄ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 문자 솑신 톡계 쑰회, 포인트 쑰회 및 μΆ©μ „, μ—‘μ…€ λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • λ§ˆμŠ€ν„°, 일반 μ‚¬μš©μž, μ‹œμŠ€ν…œ 3단계 κΆŒν•œμ— 따라 μ ‘κ·Ό 메뉴와 쑰회 λ²”μœ„κ°€ 달라지도둝 κ΅¬μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ°œμ£Όμ‚¬ λ°±μ—”λ“œ κ°œλ°œμžμ™€ API κ·œκ²©μ„ ν˜‘μ˜ν•˜λ©° μ§„ν–‰ν•œ μ™Έμ£Ό ν”„λ‘œμ νŠΈλ‘œ, ν”„λ‘ νŠΈμ—”λ“œλ₯Ό λ‹¨λ…μœΌλ‘œ λ‹΄λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ§‘β€πŸ’» μ£Όμš” κΈ°μ—¬

API 규격 ν˜‘μ˜ 및 연동

  • λ°±μ—”λ“œκ°€ μ΄ˆμ•ˆν•œ κ·œκ²©μ„ κ²€ν† ν•΄ λΆˆν•„μš”ν•œ 응닡 쀑첩 제거,
    GET+Body 쑰합을 POST둜 톡일할 것 등을 μ œμ•ˆν•˜κ³  λ°˜μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 응닡 데이터 쀑볡, κΆŒν•œ μ½”λ“œ 체계 λ“± 규격 였λ₯˜λ₯Ό 사전에 λ°œκ²¬ν•΄ μˆ˜μ •μ„ μš”μ²­ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • μƒˆλ‘œκ³ μΉ¨ μ‹œ 둜그인이 ν’€λ¦¬λŠ” λ¬Έμ œμ— λŒ€ν•΄ μ €μž₯ 방식을 μ œμ•ˆν•˜μ—¬,
    인증 κ°±μ‹  APIκ°€ μ‹ μ„€λ˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

데이터 μ‹œκ°ν™” 및 λ‹€μš΄λ‘œλ“œ

  • Nivo Chart둜 μ›ν˜• 및 μ„ ν˜• μ°¨νŠΈμ™€ 이톡사별 집계 ν‘œλ₯Ό κ΅¬μ„±ν•˜κ³ ,
    고객사와 쑰회 κΈ°κ°„ 선택에 따라 κ°±μ‹ λ˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • xlsx 라이브러리둜 톡계 ν‘œλ₯Ό μ—‘μ…€ 파일둜 λ‚΄λ €λ°›λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κΆŒν•œλ³„ ν™”λ©΄ λΆ„κΈ° 및 포인트 관리

  • λ§ˆμŠ€ν„°, 일반 μ‚¬μš©μž, μ‹œμŠ€ν…œ 3단계 κΆŒν•œμ— 따라 μ ‘κ·Ό 메뉴와 쑰회 λ²”μœ„λ₯Ό λΆ„κΈ°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    일반 μ‚¬μš©μžλŠ” μžμ‚¬ λ°μ΄ν„°λ§Œ, λ§ˆμŠ€ν„°λŠ” 고객사λ₯Ό 선택해 μ‘°νšŒν•©λ‹ˆλ‹€.
  • 포인트 쑰회, μΆ©μ „ 이λ ₯, μΆ©μ „ νŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    μΆ©μ „κ³Ό ν™˜λΆˆμ€ λ§ˆμŠ€ν„° κΆŒν•œμ—μ„œλ§Œ κ°€λŠ₯ν•˜λ„λ‘ μ œν•œν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 운영

  • 착수 μ‹œ μ—‘μ…€ 기반 WBS (Work Breakdown Structure)λ₯Ό μž‘μ„±ν•΄ 일정을 ν•©μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • μΈμˆ˜μΈκ³„μš© λΉŒλ“œ κ°€μ΄λ“œ READMEλ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • MUI 기반으둜 화면을 ꡬ성해, λ””μžμΈ λ¦¬μ†ŒμŠ€ 없이 짧은 κΈ°κ°„ 내에 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ°˜μ‘ν˜• μ›ΉμœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ λ‹€μ–‘ν•œ λ””λ°”μ΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ”§ 기술 선택 및 섀계 κ³ λ―Ό

문제 상황

  • 둜그인 ν›„ 화면을 μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ 둜그인이 ν’€λ¦¬λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    둜그인 μ‘λ‹΅μœΌλ‘œ 받은 μ‚¬μš©μž 정보(κΆŒν•œ λ“±κΈ‰, 쑰회 κ°€λŠ₯ν•œ 고객사 λͺ©λ‘ λ“±)κ°€ λ©”λͺ¨λ¦¬μ—λ§Œ μžˆμ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

ν•΄κ²° 방법

  • μ‚¬μš©μž 정보λ₯Ό λΈŒλΌμš°μ €μ— κ·ΈλŒ€λ‘œ μ €μž₯ν•˜λ©΄ μƒˆλ‘œκ³ μΉ¨ λ¬Έμ œλŠ” ν•΄κ²°λ˜μ§€λ§Œ,
    κΆŒν•œ 정보가 ν΄λΌμ΄μ–ΈνŠΈμ— λ…ΈμΆœλ˜μ–΄ μž„μ˜λ‘œ μˆ˜μ •λ  수 μžˆλ‹€κ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.
  • λŒ€μ‹  μ„Έμ…˜ κ°’λ§Œ μ €μž₯ν•˜κ³ , μƒˆλ‘œκ³ μΉ¨ μ‹œ κ·Έ κ°’μœΌλ‘œ μ‚¬μš©μž 정보λ₯Ό λ‹€μ‹œ λ°›μ•„μ˜€λŠ” 방식을 μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€.
    ν΄λΌμ΄μ–ΈνŠΈμ—λŠ” 검증 κ°€λŠ₯ν•œ κ°’ ν•˜λ‚˜λ§Œ 남고, κΆŒν•œ νŒλ‹¨μ€ μ„œλ²„κ°€ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • 이λ₯Ό μœ„ν•œ APIκ°€ μ—†μ—ˆκΈ°μ— μš”μ²­ 및 응닡 ν˜•νƒœλ₯Ό 정리해 μ „λ‹¬ν•˜μ˜€κ³ , λ°±μ—”λ“œμ—μ„œ 인증 κ°±μ‹  μ—”λ“œν¬μΈνŠΈλ₯Ό μ‹ μ„€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    이후 ν•΄λ‹Ή μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μ„Έμ…˜ 만료 μ‹œκ°„λ„ ν•¨κ»˜ κ°±μ‹ λ˜λ„λ‘ ν˜‘μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ°›μ•„μ˜¨ μ‚¬μš©μž μ •λ³΄λŠ” Redux둜 μ „μ—­ κ΄€λ¦¬ν•˜μ—¬,
    ν—€λ”μ˜ 포인트 ν‘œμ‹œ, 메뉴 λΆ„κΈ°, 쑰회 쑰건 λ“± μ—¬λŸ¬ ν™”λ©΄μ—μ„œ ν•¨κ»˜ μ‚¬μš©ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ”₯ νŠΈλŸ¬λΈ”μŠˆνŒ…

CORS둜 μΈν•œ 인증 μš”μ²­ 차단

  • 둜그인 μš”μ²­μ΄ μ„œλ²„μ— 도달쑰차 ν•˜μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    μ„œλ²„κ°€ Access-Control-Allow-Origin을 μ™€μΌλ“œμΉ΄λ“œ("*")둜 μ‘λ‹΅ν•˜κ³  μžˆμ—ˆλŠ”λ°,
    자격 증λͺ…을 ν¬ν•¨ν•œ μš”μ²­μ—λŠ” μ™€μΌλ“œμΉ΄λ“œλ₯Ό μ“Έ 수 μ—†μ–΄ λΈŒλΌμš°μ €κ°€ μ°¨λ‹¨ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • ν—ˆμš© 좜처λ₯Ό λͺ…μ‹œν•˜λ„λ‘ λ°”κΎΈμž μ΄λ²ˆμ—λŠ” preflight OPTIONS μš”μ²­μ΄ 정상 응닡을 λ°›μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ μ΄μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.
    λ³Έ μš”μ²­ 이전 λ‹¨κ³„μ—μ„œ λ§‰νžˆλ‹€ λ³΄λ‹ˆ body 데이터 μžμ²΄κ°€ μ„œλ²„μ— μ „λ‹¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • proxy μ„€μ • μœ λ¬΄μ— 따라 증상이 λ‹¬λΌμ§€λŠ” 점을 μ΄μš©ν•΄,
    ν΄λΌμ΄μ–ΈνŠΈ 원인과 μ„œλ²„ 원인을 뢄리해 μ •λ¦¬ν•œ λ’€ λ°±μ—”λ“œμ— μ „λ‹¬ν–ˆμŠ΅λ‹ˆλ‹€.
    • proxy 미적용 μ‹œ: CORS 차단 λ°œμƒ
    • proxy 적용 μ‹œ: CORSλŠ” ν†΅κ³Όν•˜λ‚˜ 응닡 이상
  • μ΅œμ’…μ μœΌλ‘œ μ„œλ²„μ—μ„œ μš”μ²­ Origin을 κ·ΈλŒ€λ‘œ λ°˜ν™˜ν•˜κ³  OPTIONS μš”μ²­μ— 정상 μ‘λ‹΅ν•˜λ„λ‘ μ‘°μ •ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ‹Ήμ‹œμ—λŠ” 개인 ν”„λ‘œμ νŠΈμ—μ„œ μ™€μΌλ“œμΉ΄λ“œλ‘œ λͺ¨λ‘ ν—ˆμš©ν•˜λ©΄ λŒ€λΆ€λΆ„ λ™μž‘ν–ˆκΈ°μ— 원인 νŒŒμ•…μ— μ‹œκ°„μ΄ κ±Έλ ΈμŠ΅λ‹ˆλ‹€.
    이 κ³Όμ •μ—μ„œ 자격 증λͺ…이 ν¬ν•¨λœ μš”μ²­μ—λŠ” 좜처λ₯Ό λͺ…μ‹œν•΄μ•Ό ν•˜λŠ” 이유λ₯Ό μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.