λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
React

[React, μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ] 링λͺ¨(LINGMO), λ‹Ήμ‹ μ˜ 링크 λͺ¨μŒ

by LasBe 2023. 8. 21.
λ°˜μ‘ν˜•

πŸ“’ λ‹Ήμ‹ μ˜ 링크 λͺ¨μŒ, LINGMO


(μ„œλ²„ λ‚΄λ €κ°„ μƒνƒœμž…λ‹ˆλ‹€)

 

 

링λͺ¨(LINGMO) - λ‹Ήμ‹ μ˜ 링크 λͺ¨μŒ

κ°œμ„± μžˆλŠ” λ‚˜λ§Œμ˜ 링크 λͺ¨μŒμ„ λ§Œλ“€μ–΄λ³΄μ„Έμš”!

lingmo.me

μ£Όλ³€ μ‚¬λžŒλ“€μ΄ μžμ‹ μ˜ 링크 λͺ¨μŒμ„ μΈμŠ€νƒ€κ·Έλž¨ ν”„λ‘œν•„μ— μ˜¬λ €λ‘λŠ” 것을 보고 μ‹œμž‘ν•˜κ²Œ 된 μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

 

λΉ„μŠ·ν•œ 링크 λͺ¨μŒ μ„œλΉ„μŠ€λ₯Ό 찾아보며 μ™„μ „νžˆ λ”°λΌμž‘κΈ°λŠ” 무리라고 생각해 κΈ°μ‘΄ κΈ°λŠ₯은 κ°€μ Έκ°€λ˜,
링λͺ¨μ—μ„œλŠ” 더 λ‹€μ–‘ν•˜κ³  자유둭게 색을 μ‚¬μš©ν•  수 μžˆλŠ” 것을 μ°¨λ³„μ μœΌλ‘œ κ°€μ Έκ°”μŠ΅λ‹ˆλ‹€.

 

νšŒμ‚¬λ₯Ό λ‹€λ‹ˆλ©° 혼자 기획과 λ””μžμΈ, κ°œλ°œμ„ ν•˜λ‹€ λ³΄λ‹ˆ μ²˜μŒλΆ€ν„° λ§Žμ€ κΈ°λŠ₯듀을 λ„£κΈ°μ—” 무리가 μžˆμ–΄
핡심 κΈ°λŠ₯μ—λ§Œ μ§‘μ€‘ν•˜κ³  μΆ”ν›„ 더 λ‹€μ–‘ν•œ κΈ°λŠ₯듀을 μΆ”κ°€ν•  μƒκ°μž…λ‹ˆλ‹€.


πŸ“Œ 개발 κΈ°κ°„

  • 2023λ…„ 2μ›” ~ 2023λ…„ 3μ›” / 2023λ…„ 6μ›” ~ 2023λ…„ 7μ›”

μ΄ˆλ°˜μ— 핡심적인 κΈ°λŠ₯ κ΅¬ν˜„μ€ ν•œ 달 λ§Œμ— μ „λΆ€ λλ‚¬μœΌλ‚˜
개인적인 일정과 κ³΅λΆ€ν•˜λ©° λΈ”λ‘œκ·Έμ— 글을 μž‘μ„±ν•˜λŠ” 것 λ•Œλ¬Έμ— 기간이 많이 λŠ˜μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

 

νŠΉνžˆλ‚˜ μ„œλ²„ μͺ½μ„ 거의 λͺ¨λ₯΄κ³  있던 μƒνƒœμ—μ„œ 이것저것 해보렀닀 힘이 λΉ μ Έ
4μ›” 5월은 손을 λ†¨μ—ˆμœΌλ‚˜ 6μ›”λΆ€ν„° μ •μ‹  차리고 λ§ˆλ¬΄λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ“Œ μ‚¬μš© 기술

πŸ”Ž μ„œλ²„

자취방 κ΅¬μ„μ—μ„œ ν•˜λ£¨μ’…μΌ λŒμ•„κ°€λŠ” λ…ΈνŠΈλΆ μ„œλ²„μž…λ‹ˆλ‹€.

 

λ…ΈνŠΈλΆμ„ λ§₯으둜 λ°”κΎΈλ©΄μ„œ μ„œλ²„ μ—°μŠ΅μš©μœΌλ‘œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

μœˆλ„μš°λ₯Ό 밀어버린 ν›„ Ubuntu 22.04.1 LTSλ₯Ό μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ”Ž μ‹œμŠ€ν…œ ꡬ성도

nginx μ»¨ν…Œμ΄λ„ˆλ‘œ SSL μΈμ¦μ„œλ₯Ό μ μš©ν•œ Proxy Server와 λΉŒλ“œ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” Web Serverλ₯Ό μ˜¬λ ΈμŠ΅λ‹ˆλ‹€.

 

데이터 κ΄€λ¦¬λŠ” Firebase의 Firestore Database와 Storageλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.


πŸ”Ž μ£Όμš” ν”„λ ˆμž„μ›Œν¬ 및 라이브러리

  • typescript
  • React 18
  • styled-components
  • recoil
  • craco

πŸ“Œ 핡심 κΈ°λŠ₯

μ œκ°€ ν‰μ†Œ μ‚¬μš©ν•΄λ³΄κ³  μ‹Άμ—ˆλ˜ κΈ°μˆ λ“€μ€ 이 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° 원 없이 κ³΅λΆ€ν•˜λ©΄μ„œ μ μš©ν•΄ λ΄€μŠ΅λ‹ˆλ‹€.

 

κ·Έμ€‘μ—μ„œλ„ κΈ€λ‘œ 남기며 λ‹€μ‹œ ν•œλ²ˆ λ˜μƒˆκ²Όλ˜ 것듀 μœ„μ£Όλ‘œ μ†Œκ°œλ“œλ¦½λ‹ˆλ‹€.

 

πŸ”Ž Debounce

 

[React/TypeScript] Debounce, 일정 μ‹œκ°„λ™μ•ˆ λ°œμƒν•œ 이벀트 쀑 λ§ˆμ§€λ§‰λ§Œ μ‹€ν–‰

⚑Debounceλž€ Debounceλž€ 일정 μ‹œκ°„ λ™μ•ˆ μ—°μ†μ μœΌλ‘œ λ°œμƒν–ˆλ˜ μ΄λ²€νŠΈλ“€ 쀑 λ§ˆμ§€λ§‰λ§Œ μ‹€ν–‰μ‹œμΌœ κ³Όλ‹€ν•œ ν˜ΈμΆœμ΄λ‚˜ λ Œλ”λ₯Ό 막아 μ΅œμ ν™”ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 이번 개인 ν”„λ‘œμ νŠΈ 쀑 μž…λ ₯ μ‹œ 쀑볡

lasbe.tistory.com

νŒŒμ΄μ–΄λ² μ΄μŠ€ λ¬΄λ£Œλ²„μ „μ„ μ‚¬μš©ν•˜λ©° μ„œλ²„ 읽기 μ“°κΈ° 횟수λ₯Ό μ΅œλŒ€ν•œ 쀄여야 ν–ˆλ˜ 와쀑에 λ°œκ²¬ν•΄μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•œ κΈ°μˆ μž…λ‹ˆλ‹€.


πŸ”Ž μ• λ‹ˆλ©”μ΄μ…˜

 

[CSS] Animation μ΅œμ ν™”

⚑ CSS μ• λ‹ˆλ©”μ΄μ…˜ CSS둜 μ• λ‹ˆλ©”μ΄μ…˜μ„ λ§Œλ“€μ–΄μ€„ λ•Œ λ°μŠ€ν¬ν†±μ΄λ‚˜ λ…ΈνŠΈλΆμœΌλ‘œ λΆ€λ“œλŸ½κ²Œ μž‘λ™ν•˜λŠ” 것을 ν™•μΈν–ˆμ–΄λ„ 막상 ν•Έλ“œν°μœΌλ‘œ λ³Ό λ•Œ μ—„μ²­λ‚˜κ²Œ λ²„λ²…μ΄λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ν˜„μƒμ€ 슀

lasbe.tistory.com

 

[React] 슀크둀 μ• λ‹ˆλ©”μ΄μ…˜, IntersectionObserver + styled-components

⚑️ React 슀크둀 μ• λ‹ˆλ©”μ΄μ…˜ κ΅¬ν˜„ν•˜κΈ° μ‚¬μš©μžμ˜ λˆˆκΈΈμ„ 끌기 μœ„ν•΄ λ‹€μ–‘ν•œ 방법듀이 μ‚¬μš© λ˜λŠ”λ°, κ·Έ μ€‘μ—μ„œλ„ κ°€μž₯ λˆˆμ— λ„λ˜ 것이 슀크둀 μ• λ‹ˆλ©”μ΄μ…˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 직접 κ΅¬ν˜„ν•΄λ³΄λ‹ˆ μƒκ°ν–ˆλ˜ 만

lasbe.tistory.com

ν‰μ†Œ B2B μ›Ή ν”„λ‘ νŠΈμ—”λ“œ 업무λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— κ°„λ‹¨ν•œ 효과 μ™Έ μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μ‚¬μš©ν•  일이 많이 μ—†μŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ 동적인 μ›€μ§μž„μœΌλ‘œ 일반 μ‚¬μš©μžλ“€μ˜ λˆˆκΈΈμ„ 끌기 μœ„ν•΄ 적극적인 μ• λ‹ˆλ©”μ΄μ…˜ νš¨κ³Όκ°€ ν•„μš”ν•˜λ‹€ 생각해 κ³΅λΆ€ν•˜λ©° μ μš©ν•΄ λ΄€μŠ΅λ‹ˆλ‹€.

 

μ‰¬μšΈ κ±°λž€ μ˜ˆμƒκ³Ό λ Œλ”λ§ μ΅œμ ν™” λ¬Έμ œμ™€, μˆœμ„œλ₯Ό 이리저리 λ°”κΎΈκΈ° μœ„ν•΄
데이터λ₯Ό 식별 및 μ €μž₯ν•˜κ³  타이밍을 λ§žμΆ”λŠ” λΆ€λΆ„μ—μ„œ κ½€λ‚˜ μ• λ₯Ό λ¨Ήμ—ˆλ˜ 기얡이 아직도 μƒμƒν•©λ‹ˆλ‹€.


πŸ”Ž 배포 μžλ™ν™”

 

Github Action + Docker + Nginx + React 야맀 CI/CD μ™„μ„±κΈ°

⚑️ 계기 μ„œλ²„μͺ½μ— λŒ€ν•œ 지식이 μ—†λ˜ μ €λŠ” νšŒμ‚¬ μ„œλ²„μ— κ΅¬μΆ•λœ CI/CD νŒŒμ΄ν”„λΌμΈμ„ λ³΄κ³ μ„œλŠ” 정말 μœ μš©ν•˜κ² λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. μ œλŒ€λ‘œ 된 λ°°ν¬ν•˜λŠ” 방법도 λͺ°λžλ˜ μ €λŠ”, κ·Έμ € μž‘μ„±ν•œ μ½”λ“œλ₯Ό ν‘Έ

lasbe.tistory.com

 

 

Github Action + React + Firebase API KEY 숨기기

Github Action + Docker + Nginx + React 야맀 CI/CD μ™„μ„±κΈ° ⚑️ 계기 μ„œλ²„μ— λ¬Έμ™Έν•œμ΄μ—ˆλ˜ μ €λŠ” μž…μ‚¬ ν›„ 개발 λ¦¬ν¬μ§€ν† λ¦¬μ—μ„œ μžλ™μœΌλ‘œ λ°°ν¬λ˜λŠ” λͺ¨μŠ΅μ„ λ³Έ μˆœκ°„λΆ€ν„° 홀딱 λΉ μ§€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ œλŒ€λ‘œ 된 λ°°

lasbe.tistory.com

직접 μ„œλΉ„μŠ€ν•  ν”„λ‘œμ νŠΈμ—¬μ„œ 배포 μžλ™ν™”λŠ” κΌ­ ν•„μš”ν•œ κΈ°λŠ₯이라 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

 

개인 μ„œλ²„λΌ 뢀담도 μ—†κ² λ‹€, 빨간색 fail λ”±μ§€λ§Œ μˆ˜μ‹­ 개 λ³΄λ©΄μ„œ CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕 과정을 λͺΈμ†Œ 느꼈으며

λ©λ‹¬μ•„μ„œ μ„œλ²„ μͺ½ 지식과 κ²½ν—˜λ„ ν•¨κ»˜ μŒ“μ„ 수 μžˆλŠ” μ†Œμ€‘ν•œ κΈ°νšŒμ˜€μŠ΅λ‹ˆλ‹€.


πŸ”Ž https 적용

 

[Docker + Nginx] Proxy Server에 Certbot으둜 SSL μΈμ¦μ„œ λ°œκΈ‰ λ°›κ³  Https μ μš©ν•˜κΈ°

⚑️ Certbot으둜 SSL μΈμ¦μ„œ λ°œκΈ‰λ°›κ³  Https μ μš©ν•˜κΈ° 개인 λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈλ₯Ό 8080 포트둜 올리고, 80 ν¬νŠΈμ—λŠ” Nginxλ₯Ό μ΄μš©ν•΄ ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 올렀 μ–Έμ œλ“  80 포트λ₯Ό λ°”κΏ€ 수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλ‹€μŒ

lasbe.tistory.com

막상 ν•΄λ³΄λ‹ˆ 별거 μ—†μ—ˆμ§€λ§Œ μ΄μƒν•œ 곳에 λ§‰ν˜€μ„œ κ°€μž₯ νž˜λ“€κ²Œ ν–ˆλ˜ ssl 적용 κ³Όμ •μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

 

덕뢄에 도메인 κ΄€λ ¨ 지식을 μŒ“μ„ 수 μžˆμ—ˆκ³ , ν•œ 번 ν•΄λ³΄λ‹ˆ λ‹€μŒλΆ€ν„°λŠ” μˆ˜μ›”ν•˜κ²Œ μ μš©ν•  수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.


πŸ”Ž 검색 엔진 μ΅œμ ν™”

 

[React] SPA μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ 검색 엔진 μ΅œμ ν™”(SEO) 끝μž₯λ‚΄κΈ°

⚑ SEO, 검색엔진 μ΅œμ ν™” 검색 엔진 μ΅œμ ν™” (Search Engine Optimization)λŠ” μ›Ή μ‚¬μ΄νŠΈμ˜ κ°€μ‹œμ„±μ„ ν–₯μƒμ‹œν‚€κ³  검색 엔진 κ²°κ³Ό νŽ˜μ΄μ§€(SERP)μ—μ„œ μƒμœ„μ— λ…ΈμΆœλ˜λ„λ‘ ν•˜λŠ” λ…Έλ ₯을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, λ„€μ΄λ²„λ‚˜

lasbe.tistory.com

ꡬ글과 λ„€μ΄λ²„μ˜ 검색 결과에 λ…ΈμΆœλ˜κΈ° μœ„ν•΄ SEO에 ν•„μš”ν•œ 과정듀을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

 

ν‹°μŠ€ν† λ¦¬ λΈ”λ‘œκ·Έλ₯Ό μ΅œμ ν™”ν•œλ‹€κ³  ν•œλ²ˆ ν•΄λ³Έ 적이 μžˆμ–΄μ„œ μˆ˜μ›”ν•˜κ²Œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“Œ ν›„κΈ°

κΈ°νšλΆ€ν„° λ°°ν¬κΉŒμ§€ ν”„λ‘œμ νŠΈμ˜ μ „ 과정을 μ˜¨μ „νžˆ 혼자 진행해 λ³Έ 것은 사싀상 이번이 μ²˜μŒμž…λ‹ˆλ‹€.

 

ν•„μš”μ— μ˜ν•΄ μ—¬λŸ¬ λΆ„μ•Όλ₯Ό κ³΅λΆ€ν•˜λ©° B2B ν”„λ‘ νŠΈ μ—…λ¬΄λ§ŒμœΌλ‘œ 얻을 수 μ—†λŠ” 값진 κ²½ν—˜μ„ ν–ˆλ‹€κ³  λŠλ‚λ‹ˆλ‹€.

 

λ§ˆλ¬΄λ¦¬ν•œλ‹€κ³  6κ°œμ›” μ „ μž‘μ„±ν•œ μ½”λ“œλ₯Ό λ‹€μ‹œ λ³΄λ‹ˆ κ·Έλ•Œ μ΅œμ„ μ΄μ—ˆλ˜ μ½”λ“œκ°€ λ§ˆμŒμ— μ•ˆ λ“€μ–΄μ„œ κ·Όμ§ˆκ·Όμ§ˆν•˜μ§€λ§Œ
ν•œνŽΈμœΌλ‘  κ·Έλ™μ•ˆ μ‘°κΈˆμ΄λ‚˜λ§ˆ μ„±μž₯ν•΄ κ·Έ λ‹Ήμ‹œμ— μ•ˆ 보이던 것듀이 μ§€κΈˆμ—μ„œμ•Ό 보인닀고 μƒκ°ν•˜λ©° 일단 마무리 μž‘μ—…μ„ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

ν•΄μ•Ό 될 일이 νƒœμ‚° κ°™μ•„ λ³΄μ—¬μ„œ 괜히 밍기적 거렸던 6κ°œμ›”,

돌이켜 λ³΄λ‹ˆ κ±±μ •λ§ŒνΌ 결과물은 μ»€λ‹€λž—μ§€ μ•Šμ§€λ§Œ

완성에 λŒ€ν•œ 압박감이 ν•œ λ²ˆμ— ν•΄μ†Œλ˜λŠ” κ±° κ°™μ•„ λ„ˆλ¬΄λ‚˜ μ‹œμ›ν•œ κΈ°λΆ„μž…λ‹ˆλ‹€.

 

μ•½κ°„μ˜ νœ΄μ‹μ„ μ·¨ν•œ λ’€, λ¦¬νŒ©ν† λ§λ„ ν•˜κ³  κΈ°λŠ₯좔가도 ν•˜λ©°

이번 ν”„λ‘œμ νŠΈλ₯Ό 톡해 얻은 κ²½ν—˜μœΌλ‘œ 또 λ‹€λ₯Έ 도전에 λŒ€ν•œ 고민을 μ΄μ–΄λ‚˜κ°€λ €κ³  ν•©λ‹ˆλ‹€.

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€


μ˜€ν”ˆ 채νŒ