[Devfest Songdo 2023] 4. GCPλ₯Ό ν™œμš©ν•΄ Next.js 인프라 κ΅¬μΆ•ν•˜κΈ°

2023. 12. 11. 00:02ㆍExperiences/Activities

 

 

 

 

 

ꡬ글 ν΄λΌμš°λ“œ ν”Œλž«νΌ ν™œμš©μ΄ κΆκΈˆν•΄μ„œ λ“€μ–΄λ΄€λ‹€.

 

 

 

 

 

μƒŒν”„λž€μ‹œμŠ€μ½”μ—μ„œ μ˜€μ‹  ꡬ글 κ°œλ°œμžλ‹˜
ν”„λ‘ νŠΈμ—”λ“œ 개발자인데, μ„œλ²„μ™€ κ΄€λ ¨λ˜μ–΄ 고민이 λ§Žμ•„μ§

 

 

 

 

 

 

Next.js

  • react 앱을 λ§Œλ“œλŠ” κ²ƒμ—μ„œ μ‹œμž‘!
  • μ„œλ²„κ°€ ν•„μš” μ—†μœΌλ‹ˆ, νŒŒμΌμ„ μ˜¬λ¦¬λŠ” κ°œλ… (λ¦¬μ•‘νŠΈ 앱을 ν˜ΈμŠ€νŠΈν•˜λŠ” 방식)
  • λ¦¬μ•‘νŠΈ κ°œλ°œμ— λŒ€ν•œ 곡톡적인 문제점
  • 파일 μ‹œμŠ€ν…œ μžμ²΄κ°€ λΌμš°ν„°κ°€ λœλ‹€ NEXT
  • Search engine 검색 결과에 λ…ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ”λ°, μ™„λ²½ν•˜κ²Œ 좜λ ₯된 νŽ˜μ΄μ§€λ₯Ό μœ μ €μ—κ²Œ λ³΄μ—¬μ€˜μ•Ό 함
  • λ„₯μŠ€νŠΈλŠ” ν•˜λ‚˜μ˜ ν”„λ ˆμž„μ›Œν¬λ‘œ λ§Œλ“œλŠ” 메타 ν”„λ ˆμž„μ›Œν¬, λ¦¬μ•‘νŠΈλ₯Ό 잘 μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν”„λ ˆμž„μ›Œν¬
  • μ›Ήκ°œλ°œ μžμ²΄κ°€ 고도화됨, μ—¬λŸ¬ 문제λ₯Ό μœ„ν•œ ν…Œν¬λ‹‰μ΄ 개발됨 (μ„œλ²„ λ Œλ”λ§, ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§)

 

  • μ œλŒ€λ‘œ λͺ»λ§Œλ“€λ©΄ λ‘œλ”© 슀크린 많이 λ³΄μž„
    -> μ„œλ²„ λ Œλ”λ§μ„ 톡해 ν•΄κ²° κ°€λŠ₯ (이뢀뢄은 μ„œλ²„μ—μ„œ, 저뢀뢄은 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 돌리고) 
  • λͺ¨λ“  μŠ€νŽ™νŠΈλŸΌμ„ 컀버할 수 μžˆλŠ” next
  • React 개발 μ‹œμž‘ μ‹œ κ°€μž₯ ꢌμž₯ν•˜λŠ”κ²ƒμ΄ next.js

 

  • Next둜 λ§Œλ“  λ¦¬μ•‘νŠΈ μ•± / μ„œλ²„ 폴더가 μžˆλ‹€
  • 기본적으둜 μ„œλ²„κ°€ ν•„μš”ν•œ κ²½μš°κ°€ λ§Žλ‹€
  • 더이상 기쑴의 파일 μ‹œμŠ€ν…œμ΄ μ•„λ‹˜, 결ꡭ은 μ„œλ²„κ°€ ν•„μš”
  • ν”„λ‘ νŠΈμ—”λ“œ 개발자인데, μ„œλ²„μ™€ κ΄€λ ¨λ˜μ–΄ 고민이 λ§Žμ•„μ§
    μ„œλ²„ ν˜ΈμŠ€νŒ…μ€ μ–΄λ””μ—μ„œ region, cpu λ©”λͺ¨λ¦¬λŠ”? μ„œλ²„λ₯Ό λͺ‡ 개λ₯Ό λ‘˜κΉŒ, scale up은 μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
  • μ„œλ²„κ°€ μƒκΈ°λ©΄μ„œ κ³ μ • λΉ„μš©μ΄ λ“€κ²Œ 됨
  • Next.jsλŠ” μ˜€ν”ˆμ†ŒμŠ€μ΄μ§€λ§Œ, νšŒμ‚¬μ—μ„œ λ§Œλ“¦ Vercel
    ꡉμž₯히 μž˜λ‚˜κ°€λŠ” μŠ€νƒ€νŠΈμ—…

 

 

 

 

 

 

 

 

 

 

 

ꡬ글 ν΄λΌμš°λ“œ ν”Œλž«νΌμ—μ„œ next.js μ„œλΉ„μŠ€λ₯Ό λ§Œλ“œλ €λ©΄?

  • Vercel 같은 인프라λ₯Ό GCPμ—μ„œ ꡬ좕할 수 μžˆμ„κΉŒ?
  • Cloud Run
    κ°€μž₯ μ’‹μ•„ν•˜λŠ” μ„œλΉ„μŠ€
  • μ„œλ²„λ¦¬μŠ€ - λ‚΄κ°€ κ³ λ―Όν•˜μ§€ μ•Šμ•„λ„ λœλ‹€λŠ” 의미
  • μžλ™μœΌλ‘œ μ„œλ²„ 늘리고, νŠΈλž˜ν”½ μ—†μœΌλ©΄ μ„œλ²„λ₯Ό 꺼쀌 
  • λ‚˜μ—κ²Œ 도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό 쀘 (배포 기술 쀑 ν•˜λ‚˜)
  • λ‚΄κ°€ μ›ν•˜λŠ” OS와 λͺ¨λ“ˆκ³Ό λ“±λ“± μ„œλ²„λ₯Ό ꡬ동할 것이닀
    κ°„λ‹¨ν•œ 도컀 νŒŒμΌμ„ μ¨μ„œ μ˜¬λ¦°λ‹€
  • λ‚΄κ°€ 올리고 싢은 μ»¨ν…Œμ΄λ„ˆλ₯Ό 올림
  • URL을 ν•˜λ‚˜ 곡짜둜 쀌 (run.app)

 

 

 

 

 

 

 

 

 

 

μ»΄λ„€μ—μ„œ λ°°μ› λ˜ CDN :)

 

 

 

 

 

Next.js μ—μ„œ 캐싱을 ν™œμš©ν•˜λŠ” 방법

  • λ‚΄κ°€ μ“΄ λ¦¬μ•‘νŠΈ μ½”λ“œλ₯Ό μ„œλ²„μ—μ„œ κ΅¬λ™ν•˜κ³ ,
    이둜 λ§Œλ“  html νŒŒμΌμ„ μΊμ‹œμ— μ €μž₯ν•œλ‹€
  • λ…ΈμΆœμ΄ 많이 λ˜λŠ” νŽ˜μ΄μ§€ -> 10뢄에 ν•œλ²ˆ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œ λ§Œλ“€κ³  μ‹Άλ‹€
  • μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œ λ§ˆλ‹€ λ§Œλ“€κ³  싢진 μ•Šμ€λ°, 10λΆ„λ§ˆλ‹€ λ§Œλ“€κ³  μ‹Άμ–΄
    μΊμ‹œμ— μ €μž₯ν•΄μ„œ λ³΄μ—¬μ£ΌλŠ” Next.js의 κΈ°λŠ₯
  • 둜컬 파일 μ‹œμŠ€ν…œμ„ ν™œμš©ν•΄μ„œ κ΅¬ν˜„ν•¨

 

  • Cloud runμ—μ„œλŠ” 캐싱이 잘 X
  • μš”μ²­μ΄ 많이 λ“€μ–΄μ˜€λ©΄ ν•„μš”ν•œ 개수만큼 ν™•μž₯μ‹œν‚΄
  • λŒλ €μ£ΌλŠ” μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ„œλ‘œ νŒŒμΌμ‹œμŠ€ν…œμ„ κ³΅μœ ν•˜μ§€ μ•ŠμŒ
  • μ„œλ‘œ 톡신이 μ—†λ‹€λ³΄λ‹ˆ, 캐싱에 μ €μž₯ν•˜λŠ” 것이 무효
  • λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ ‘κ·Όν•  수 μ—†λŠ” 캐싱
  • 이 λΆ€λΆ„ μ„€λͺ…이 λ„ˆμ–΄μ–΄λ¬΄ μΈμƒκΉŠμ—ˆλ‹€  ! :) 
  • μ™œ λ‹€μŒ 기술둜 λ„˜μ–΄κ°€μ•Ό ν•˜λŠ”μ§€, λ…Όλ¦¬μ μœΌλ‘œ ν•„μš”μ„±μ΄ 잘 μ™€λ‹Ώμ•˜λ‹€ πŸ”₯

 

  • Firestore
    파일 μ‹œμŠ€ν…œ ν•˜λ‚˜λ₯Ό μ—¬λŸ¬ μ‹œμŠ€ν…œμ΄ κ³΅μœ ν•  수 μžˆλ‹€
    ν•˜μ§€λ§Œ λˆμ„ 많이 λ‚΄μ•Ό ν•œλ‹€.

 

  • 이에 λŒ€ν•œ λŒ€μ•ˆμ΄ firebase realtime database
  • κ·Έλƒ₯ λ˜μ§€λ©΄ μ•Œμ•„μ„œ ν•œλ‹€ (but 논리적인 사고 어렀움)
  • μΊμ‹±μ—λŠ” ꡉμž₯히 μ ν•©ν•œ μ„œλΉ„μŠ€

 

  • CDN Contents delivery Network
  • ν•œκ΅­ μœ μ €μ˜ λ―Έκ΅­ μ„œλΉ„μŠ€ (κΈ€λ‘œλ²Œ μ„œλΉ„μŠ€)
  • κΈ€λ‘œλ²Œ μœ μ €μ— λŒ€ν•œ 속도 μ €ν•˜ 문제 
  • νŒŒμΌμ— λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘, μ—¬λŸ¬ λ‚˜λΌμ— μ„œλ²„λ₯Ό λ‘ 
    CDN을 톡해 μΉ΄ν”Όλ₯Ό λ‘λŠ” 것

 

 

 

 

 

Next.jsλ₯Ό GCP ν™˜κ²½μ—μ„œ 해보고 μ‹Άλ‹€λ©΄, ꡬ경해보기!

 

 

 

 

 

Firebase hosting 

  • μœ μ €κ°€ 였면 μš°μ„  νŒŒμ΄μ–΄λ² μ΄μŠ€ ν˜ΈμŠ€νŒ…μ΄ 쀑간에 μš”μ²­μ„ λ°›μŒ
  •  url둜 .web.app 을 기본적으둜 μ€€λ‹€.
  • CDN을 μ“°κ²Œ 되면 캐쉬 μ»¨νŠΈλ‘€μ΄λΌλŠ” 헀더λ₯Ό μ¨μ„œ, 좔가적인 캐싱 κ°€λŠ₯
  • ν•œ 번 λ§Œλ“€κ³  μ—¬λŸ¬ μœ μ €κ°€ 봐도 λ˜λŠ” νŒŒμΌμ€
    Firebase hostμ—μ„œ μš”μ²­μ„ λ‹€ μ²˜λ¦¬ν•˜λ„λ‘ ν•  수 μžˆλ‹€
  • ν™•μž₯성도 νΌν¬λ¨ΌμŠ€λ„ μ’‹κ³ , 가격은 더 μ €λ ΄ν•˜λ‹€

 

 

 

 

 

λ°±μ—”λ“œ 개발자

  • ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬κ°€ 고도화 됨
  • λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈκ°€ κ°€κΉŒμ›Œμ Έμ•Ό ν•˜λŠ” ν•„μš”μ„±
  • λŒ€κ·œλͺ¨ μ„œλΉ„μŠ€ 같은 경우
    ν”„λ‘ νŠΈμ—”λ“œκ°€ ν΄λΌμš°λ“œ 인프라λ₯Ό 이해해야, 쒋은 λ¦¬μ•‘νŠΈ 앱을 λ§Œλ“€ 수 μžˆλ‹€
  • λ°±μ—”λ“œλ„ λ‹¨μˆœνžˆ μ„œλ²„λ₯Ό κ΅¬λ™ν•˜λŠ” κ°œλ°œμžκ°€ μ•„λ‹ˆλΌ,
    ν”„λ‘ νŠΈκ°€ μš”κ΅¬ν•˜λŠ” 사항을 이해해야 ν•œλ‹€
  • μ§€λ‚œ 학기에 λ“€μ—ˆλ˜ ν’€μŠ€νƒ λ„€νŠΈμ›Œν‚Ή μˆ˜μ—…μ΄ λ– μ˜€λ₯΄λŠ” λΆ€λΆ„ , , , 

 

  • λ°±κ³Ό ν”„λ‘ νŠΈκ°€ 점점 κ°€κΉŒμ›Œμ§€κ³  있고, 곡뢀할 게 훨씬 λ§Žμ•„μ§„ 상황이닀.
  • μ§„μ§œ μœ μ €λ“€μ΄ μ–»μ–΄κ°€λŠ” κ°€μΉ˜λ₯Ό λ‹€λ£¨λŠ” 것이 μž¬λ―Έμžˆμ—ˆλ‹€. 
  • μœ μ € κ΄€λ ¨ 퍼포먼슀 μ§€ν‘œλ„ νšŒμ‚¬ μž…μž₯μ—μ„œ 맀우 μ€‘μš”ν•˜λ‹€. 
  • ꢁ극의 μœ μ € μ„œλΉ„μŠ€λ₯Ό μœ„ν•΄ ν”„λ‘ νŠΈ κ³΅λΆ€ν•˜μž!