
π κ΄λ¦¬μ μ¬μ΄νΈ κ°λ° - λλ λ¬Έμ μλΉμ€
- νλ‘μ νΈ μκ°: λλ λ¬Έμ μ μ‘ νλ«νΌμ ν΅κ³ λ° ν¬μΈνΈ κ΄λ¦¬ μ΄λλ―Ό
- μμΈ: μκΈ°λ‘ μ 곡νλ κ³ κ° ν΅κ³ μλ£λ₯Ό μΉ νλ©΄μΌλ‘ λ체. νλ‘ νΈμλλ₯Ό λ¨λ
μΌλ‘ λ΄λΉνκ³ API κ·κ²© νμλΆν° λ°°ν¬κΉμ§ μνν μΈμ£Ό νλ‘μ νΈ.
- Tech:ReactReduxMUI(Material-UI)Nivo-ChartxlsxREST APIWBSλ°μνλ°±μ€νΌμ€
- μ§ν κΈ°κ°: 2023-04-03 ~ 2023-08-29
- μμ: μΈμ£Όμμ
κ΄λ¦¬μ νμ΄μ§ λ©μΈ νλ©΄ (MVP λ¨κ³)κ΄λ¦¬μ νμ΄μ§ λͺ¨λ°μΌ λ°μν νλ©΄ (MVP)μΈμ£Ό μμ
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 μμ²μ μ μ μλ΅νλλ‘ μ‘°μ νμ¬ ν΄κ²°νμμ΅λλ€.
- λΉμμλ κ°μΈ νλ‘μ νΈμμ μμΌλμΉ΄λλ‘ λͺ¨λ νμ©νλ©΄ λλΆλΆ λμνκΈ°μ μμΈ νμ
μ μκ°μ΄ κ±Έλ Έμ΅λλ€.
μ΄ κ³Όμ μμ μ격 μ¦λͺ
μ΄ ν¬ν¨λ μμ²μλ μΆμ²λ₯Ό λͺ
μν΄μΌ νλ μ΄μ λ₯Ό μ΄ν΄νκ² λμμ΅λλ€.