๐Ÿš€ Vite + React ํ”„๋กœ์ ํŠธ๋ฅผ GCP์— ๋ฐฐํฌํ•˜๊ธฐ

HMJยท2025๋…„ 5์›” 15์ผ

Vite๋Š” ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Vite + React๋กœ ์ œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ GCP ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. โœ…

โœ… 1. ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ๋นŒ๋“œ

๋จผ์ €, Vite ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

	cd ํ”„๋กœ์ ํŠธ๋ช…
	npm install
	npm run build

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด dist ํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. dist ํด๋”์—๋Š” ๋ฐฐํฌํ•  ์ •์  ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

โœ… 2. gcloud CLI ํ™˜๊ฒฝ ์„ค์ • ๋ฐ SSH ํ‚ค ์ƒ์„ฑ

gcloud CLI๋ž€?

gcloud CLI๋Š” GCP ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. SSH ํ‚ค ์ƒ์„ฑ, VM ์ธ์Šคํ„ด์Šค ์ ‘์†, ํŒŒ์ผ ์ „์†ก ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  1. gcloud CLI ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜:
	gcloud auth login
	gcloud config set project <PROJECT_ID>
  1. SSH ํ‚ค ์ƒ์„ฑ ๋ฐ ์ ‘์†:
  • SSH ํ‚ค ์ž๋™ ์ƒ์„ฑ
	gcloud compute ssh <INSTANCE_NAME> --zone=<ZONE>

~/.ssh/google_compute_engine ๊ฒฝ๋กœ์— SSH ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์„œ๋ฒ„์— ์ž๋™ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ์กด SSH ํ‚ค ์‚ญ์ œ ๋ฐ ์žฌ์ƒ์„ฑ:
	rm -f ~/.ssh/google_compute_engine*
	gcloud compute ssh <INSTANCE_NAME> --zone=<ZONE>
  • ์ˆ˜๋™ SSH ํ‚ค ์ƒ์„ฑ:
	ssh-keygen -t rsa -f ~/.ssh/my-gcp-key

์ƒ์„ฑ๋œ ๊ณต๊ฐœ ํ‚ค๋ฅผ GCP Console > Metadata > SSH Keys์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

โœ… 3. ํŒŒ์ผ ์ „์†ก (gcloud CLI vs SCP)

Vite + React ํ”„๋กœ์ ํŠธ์˜ dist ํด๋”๋ฅผ GCP ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ gcloud CLI์™€ SCP ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋‘ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์˜ ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค:

๊ตฌ๋ถ„gcloud CLISCP
์‚ฌ์šฉ ๋ช…๋ น์–ดgcloud compute scpscp
SSH ํ‚ค ๊ด€๋ฆฌ์ž๋™ ๊ด€๋ฆฌ (~/.ssh/google_compute_engine)์ˆ˜๋™ ๊ด€๋ฆฌ (-i ์˜ต์…˜ ์‚ฌ์šฉ)
ํŒŒ์ผ ๊ฒฝ๋กœ/home/<USERNAME>/frontend//home/<USERNAME>/frontend/
์ „์†ก ๋ฐฉ์‹GCP CLI ๋‚ด๋ถ€ ๋ช…๋ น์–ด๋กœ ์ „์†กLinux, macOS ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋กœ ์ „์†ก
๋ช…๋ น์–ด ์˜ˆ์‹œgcloud compute scp --recurse ./dist/ <INSTANCE_NAME>:/home/<USERNAME>/frontend --zone=<ZONE>scp -i ~/.ssh/google_compute_engine -r ./dist/* <USERNAME>@<SERVER_IP>:/home/<USERNAME>/frontend/

โœ… ๊ถŒ์žฅ ๋ฐฉ๋ฒ•:

GCP ํ™˜๊ฒฝ์— ์ต์ˆ™ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ๊ฐ€ GCP CLI๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ gcloud CLI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
SSH๋ฅผ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, GCP CLI ํ™˜๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ SCP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • gcloud CLI๋กœ ํŒŒ์ผ ์ „์†ก:
	gcloud compute scp --recurse ./dist/ <INSTANCE_NAME>:/home/<USERNAME>/frontend --zone=<ZONE>
  • SCP๋กœ ํŒŒ์ผ ์ „์†ก:
	scp -i ~/.ssh/google_compute_engine -r ./dist/* <USERNAME>@<SERVER_IP>:/home/<USERNAME>/frontend/

โœ… 4. ์„œ๋ฒ„์—์„œ dist ํด๋” ์ด๋™ ๋ฐ Nginx ์„ค์ •

  • ์„œ๋ฒ„๋กœ ์ ‘์†:
	gcloud compute ssh <INSTANCE_NAME> --zone=<ZONE>
  • dist ํด๋” ์ด๋™:
	sudo mv /home/<USERNAME>/frontend/* /var/www/html/
  • Nginx ์„ค์ • ํŒŒ์ผ ์—ด๊ธฐ:
	sudo nano /etc/nginx/sites-available/default
  • Nginx ์„ค์ • ์ถ”๊ฐ€:
	server {
 	   listen 80;
  	  server_name <DOMAIN_OR_IP>;

  	  root /var/www/html;
  	  index index.html;

  	  location / {
    	    try_files $uri $uri/ /index.html;
 	   }
	}
  • ์„ค์ • ์ €์žฅ ํ›„ Nginx ์žฌ์‹œ์ž‘:
	sudo nginx -t
	sudo systemctl restart nginx

โœ… 5. ๋ฐฐํฌ ํ™•์ธ ๋ฐ ๋กœ๊ทธ ํ™•์ธ

  • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†:

    http://์„œ๋ฒ„IP๋กœ ์ ‘์†ํ•˜์—ฌ ๋ฐฐํฌ๋œ Vite + React ์•ฑ์ด ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Nginx ๋กœ๊ทธ ํ™•์ธ:

	sudo tail -f /var/log/nginx/access.log
	sudo tail -f /var/log/nginx/error.log

์ด์ œ Vite + React์—์„œ ๋นŒ๋“œํ•œ dist ํŒŒ์ผ์ด GCP ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์ด ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋‚˜ ์ถ”๊ฐ€์ ์ธ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„  ๋‹ค์Œ ๊ธ€์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘๐Ÿ˜Š

0๊ฐœ์˜ ๋Œ“๊ธ€