[도전 기술!] μ ‘κ·Ό κΆŒν•œ 처리

2021. 8. 21. 08:00ㆍFront-End μž‘μ—…μ‹€/기타 μ°Έκ³  자료

728x90
λ°˜μ‘ν˜•

 

μ•ˆλ…•ν•˜μ„Έμš”? μ£Όλ‹ˆν•˜λž‘ μž…λ‹ˆλ‹€.

λ³Έ λ‚΄μš©μ€ μ£Όλ‹ˆν•˜λž‘μ΄ Web 개발 ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ λ„μ „ν–ˆλ˜ κΈ°μˆ λ“€μ— λŒ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•˜λŠ” κ³³ μž…λ‹ˆλ‹€!

이 글은 ν•¨κ»˜ ν”„λ‘œμ νŠΈ ν–ˆλ˜ Front End κΏˆλ‚˜λ¬΄ Crewκ°€ μž‘μ„±ν•œ κ²ƒμ΄μ—μš”.

μ£Όλ‹ˆν•˜λž‘μ€ Back End κ°œλ°œμ„ λ§‘μ•˜μ—ˆλ‹΅λ‹ˆλ‹€!

 

 


 

 

λ‘œκ·ΈμΈν•œ νšŒμ›λ§Œ μ§„μž… κ°€λŠ₯ν•œ νŽ˜μ΄μ§€, κ΄€λ¦¬μžλ§Œ μ§„μž… κ°€λŠ₯ν•œ νŽ˜μ΄μ§€ 등을 ꡬ별해야 ν•©λ‹ˆλ‹€.

저희 μš°λ„λ…μ˜ νšŒμ› 등급은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • GUEST → λΉ„νšŒμ›
  • BLACK → λΈ”λž™ νšŒμ›
  • USER → 일반 νšŒμ›
  • ADMIN → κ΄€λ¦¬μž

μƒμœ„ 등급은 ν•˜μœ„ λ“±κΈ‰μ˜ κΆŒν•œμ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Reactμ—μ„œ νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•˜κΈ° μ „ 인증을 μ²΄ν¬ν•΄μ„œ 인증을 ν†΅κ³Όν•˜μ§€ μ•ŠμœΌλ©΄ μ•„μ˜ˆ λ Œλ”λ₯Ό μ•ˆν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ HOCλ₯Ό 톡해 νŠΉμ • μ»΄ν¬λ„ŒνŠΈλ₯Ό 감싼 ν›„ HOC의 λ‹¨κ³„μ—μ„œ λ°±λ‹¨μœΌλ‘œ axios을 λ‚ λ €μ„œ ν•΄λ‹Ή μœ μ €κ°€ 둜그인된 μƒνƒœμΈμ§€, μœ μ €λ“±κΈ‰μ€ 무엇인지 μ²΄ν¬ν•˜κ³  νŠΉμ • μ»΄ν¬λ„ŒνŠΈλ‘œ μ ‘μ†ν•˜κ²Œ λ§Œλ“€κ±°λ‚˜ κ°•μ œλ‘œ λ‹€λ₯Έ 곳을 λ¦¬λ‹€μ΄λ ‰νŠΈ ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

 

 

ꡐ차 μ»΄ν¬λ„ŒνŠΈ(HOC)λž€?

  • HOC(Higher-Order-Component)
  • μ»΄ν¬λ„ŒνŠΈλ₯Ό 인자둜 λ°›μ•„ μƒˆλ‘œμš΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

 

HOC을 μ‚¬μš©ν•œ 이유?

μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ κΆŒν•œ μ²΄ν¬λ‚˜ 둜그인 μƒνƒœλ₯Ό μ²΄ν¬ν•˜κΈ° λ³΄λ‹€λŠ” 인증 λ‘œμ§μ„ HOC둜 λΆ„λ¦¬ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš©μ„±λ„ 높일 수 있고, μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ—­ν•  뢄리도 μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μž‘λ™ 방식

λΌμš°ν„°μ—μ„œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ— 접속할 수 μžˆλŠ” νšŒμ›μ˜ 등급을 λ§€κ°œλ³€μˆ˜λ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•  λ•Œ hoc -> auth λ‘œμ§μ„ 톡해 'api/auth' get λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ„€μ •ν•œ λ§€κ°œλ³€μˆ˜μ™€ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•˜λŠ” νšŒμ›μ˜ νΌλ―Έμ…˜μ„ λΉ„κ΅ν•˜μ—¬ 쑰건에 λΆ€ν•©ν•˜μ§€ μ•Šλ‹€λ©΄ νΌλ―Έμ…˜ λ””λ‚˜μ΄λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ(App)

<Route path="/login" component={Auth(LogIn, 'GUEST')} />
// 둜그인 νŽ˜μ΄μ§€λŠ” λΉ„νšŒμ›μΈ GUEST만 μ ‘κ·Ό κ°€λŠ₯
<Route path="/mybookrecord" component={Auth(MyBookRecord, 'USER')} />
// λ…μ„œκΈ°λ‘ νŽ˜μ΄μ§€λŠ” λ‘œκ·ΈμΈν•œ μ‚¬μš©μž λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯
<Route path="/event/write" component={Auth(EventWrite,'ADMIN')} />
// 이벀트 μž‘μ„± νŽ˜μ΄μ§€λŠ” κ΄€λ¦¬μžμΈ ADIM만 μ ‘κ·Ό κ°€λŠ₯

 

 


 

μ£Όλ‹ˆν•˜λž‘μ˜ 글이 λ§ˆμŒμ— λ“œμ…¨λ‚˜μš”? ꡬ독과 곡감! 그리고, λŒ“κΈ€μ€ μ£Όλ‹ˆν•˜λž‘μ—κ²Œ λ§Žμ€ 힘이 λ©λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•