• ์๋ ํ์ธ์~ ์ด์ ์ ์ด์ํ๋ ๋ธ๋ก๊ทธ ๋ฐ GitHub, ๊ณต๋ถ ๋ด์ฉ์ ์ ๋ฆฌํ๋ Study-GitHub ๊ฐ ์์ต๋๋ค!
• ๐
โ CLASS101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด - Chapter3 CPU Bound ์ ํ๋ฆฌ์ผ์ด์ ๋ฌด์ค๋จ ๋ฐฐํฌ
์๋ ํ์ธ์, ํด๋์ค101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด ๊ฐ์๋ฅผ ๋ฃ๊ณ , ๋ณต์ต ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์ฌ ๋จ๊ธฐ๋ ค๊ณ ํฉ๋๋ค! ํน์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๊ธ์ ์ญ์ ํ๊ฒ ์ต๋๋ค !! |
class101.net/products/5fc4a3b4fc231b000d85661b
โ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ์ํ ํ๊ฒฝ ์ดํดํ๊ธฐ
• ๋ฌด์ค๋จ + ๋ฐฐํฌ = ๋ฐฐํฌ๋ฅผ ์ค๋จ์์ด ์งํํ๋ค๋ ์๋ฏธ
• ๋ฐฐํฌ(Deploy)๋, ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ฐ๋ฐ๋ ์ฝ๋๋ฅผ ํจํค์งํ์ฌ ์๋ก์ด ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฒ
๊ตฌ ๋ฒ์ (v1)์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ๊ณ , ์๋ก์ด ๋ฒ์ (v2)์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ์ค๋น๊ฐ ๋ ๋๊น์ง ์๋น์ค๊ฐ ์ค๋จ๋ฉ๋๋ค.
์ด๋ ๊ฒ, ์๋น์ค๊ฐ ์ค๋จ๋๋ ์๊ฐ์ ๋ค์ดํ์(downtime) ์ด๋ผ๊ณ ํฉ๋๋ค.
๐ ์๋ก์ด ๋ฒ์ (v2)๋ฅผ ์์ํ๊ธฐ ์ ์ ๊ตฌ ๋ฒ์ (v1)์ ๋ด๋ ค์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
• v1๊ณผ v2๊ฐ ๋์ผํ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
• ํ ์๋ฒ์์ ํ ํฌํธ๋ฅผ ๋์์ ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๐ ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด, ๋จ์ํ ์๋ฒ๋ง ๋ ๋๋ก ๋๋ฆฐ๋ค๋ฉด ํด๊ฒฐ์ด ๋ ๊น์?
• ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๋ ๋ ์๋ฒ์ IP ํน์ DNS ์ฃผ์๋ฅผ ์์์ผ ํ๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
• ๋ํ ์ด๋ ํ ์๋ฒ๊ฐ ๋ฐฐํฌ๋๋์ง ์ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
๐ ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ฌ์ฉ์ ์ฌ์ด์ ์ค๊ณ(Proxy)ํด ์ค ์๋ฒ๊ฐ ํ์ํฉ๋๋ค.
• ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ฌ์ฉ์ ์ฌ์ด์์ ์์ฒญ์ ์ค๊ณํด์ฃผ๋ ์๋ฒ๋ฅผ '๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy)' ๋ผ๊ณ ํฉ๋๋ค.
• ํ๋ก์๋, ๋๋ฆฌ์์ ๋ป์ผ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ์จ๊ฒจ์ฃผ๋ ์ญํ (์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์๋ณ์ด ๋ถ๊ฐ๋ฅ)
• ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํ๋ก์์ ๋ฐ๋๋ก ์๋ฒ๋ฅผ ์จ๊ฒจ์ฃผ๋ ์ญํ (ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ณ์ด ๋ถ๊ฐ๋ฅ)
๐ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ก ์๋ฒ๋ฅผ ์จ๊ธฐ๋ค๋ณด๋, ํธ๋ํฝ๋ ๋ถ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
• ํ๋์ ์๋ฒ์์ ๋ฐ์์ผ ํ ํธ๋ํฝ์ ์ฌ๋ฌ ์๋ฒ๋ก ๋ถ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
• ์ด๋ฅผ ๋ถํ ๋ถ์ฐ(๋ก๋ ๋ฐธ๋ฐ์ฑ) ์ด๋ผ๊ณ ํฉ๋๋ค.
• ์ด๋ฌํ ๋ฆฌ๋ฒ์ค ํ๋ก์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํด ํ์ฌ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ์น์๋ฒ๊ฐ "Nginx(์์ง์์ค)" ์ ๋๋ค.
๐ Nginx ๋ง์ผ๋ก ํธ๋ํฝ ์ฒ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ ๊น์?
• Nginx๋ ์๋ฒ ์์์ ์ฌ์ฉํด์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐ์ ํธ๋ํฝ์ ๋ฌดํ์ ๋ฐ์๋ผ ์๋ ์์ต๋๋ค.
• ๋ค์๊ณผ ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ฐํ ์ ์์ต๋๋ค.
• Nginx๊ฐ ์คํ๋๋ ์๋ฒ์ Scale-Up ์ ํ ์ ์์ต๋๋ค.
• ๋คํธ์ํฌ ์ฅ์น(ํ๋์จ์ด ์ฑ๋ฅ ↑)๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ(L4, L7 ๋ก๋ ๋ฐธ๋ฐ์)
• DNS ๋ฆฌ๋ค์ด๋ ์
๐ ์ฒดํฌํ ์ฌํญ
• ๋ฐฐํฌ ์ฑ๊ณต ์ฌ๋ถ ์ฒดํฌ
• ๋ฐฐํฌ ์คํฌ๋ฆฝํธ ์์ฒด์ ํฌํจ๋ ์ ์์ผ๋, ์๋ก ๋ฐฐํฌ๋ ์๋น์ค์ ํน์ API ์์ฒญ์ ํ์๋, ์ฌ๋ฐ๋ฅธ ์์ฒญ์ด ๋์ฐฉํ
๋์ง ์ฒดํฌ(Health Check)
• ๋กค๋ฐฑ์ ์๋์ผ๋ก ํ ์ง, ์๋์ผ๋ก ํ ์ง์ ์ฌ๋ถ
โ Nginx๋ฅผ ํตํ ๋ก๋๋ฐธ๋ฐ์ฑ ๊ตฌ์ฑ
• ๋ฌด์ค๋จ + ๋ฐฐํฌ = ๋ฐฐํฌ๋ฅผ ์ค๋จ์์ด ์งํํ๋ค๋ ์๋ฏธ
• ๋ฐฐํฌ(Deploy)๋, ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ฐ๋ฐ๋ ์ฝ๋๋ฅผ ํจํค์งํ์ฌ ์๋ก์ด ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฒ
๐ GCP ์ธ์คํด์ค ๋ณต์ (๋จธ์ ์ด๋ฏธ์ง) - ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ ์ฉํ๊ธฐ ์ํด ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑ
GCP์์ ๋จธ์ ์ด๋ฏธ์ง > ๋จธ์ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ด๋ฆ, ์์ค VM ์ธ์คํด์ค๋ฅผ ์์ ํ ํ CREATE๋ฅผ ๋๋ฆ ๋๋ค.
์์ ์ ์ > ์ธ์คํด์ค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ด๋ฆ๋ง ์์ ํ๊ณ , ๋๋จธ์ง๋ ๊ธฐ์กด์ ์ธ์คํด์ค๋ฅผ ๋ณต์ ํ์ผ๋ฏ๋ก ๋์ผํ ์ค์ ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๊ฐ์ด ์์ ํ ํ ์์ฑํฉ๋๋ค.
์์ ๊ฐ์ด ๋์ผํ๊ฒ cpu์ ์ธ์คํด์ค๋ฅผ 3๊น์ง ๋ง๋ค์ด ์ค๋๋ค.
Jenkins์์ ๊ด๋ฆฌ > ์์คํ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ์ ์์ ๊ฐ์ด SSH Server์ ์ถ๊ฐํด์ค๋๋ค.
• Hostname์ GCP์์ ๋ด๋ถ IP๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Jenkins์์ GCP์ ์ธ์คํด์ค 1,2,3 ์ ๋ชจ๋ ๋ฐฐํฌํด์ผ ํ๊ธฐ์ ํ๋ก์ ํธ Name์ ์์๊ฐ์ด ์ผ๋ถ ์์ ํฉ๋๋ค.
๊ทธ ํ ํ๋ก์ ํธ์์ ๊ตฌ์ฑ์ ํด๋ฆญํ ๋ค, ์์ ๊ฐ์ด GCP ์ธ์คํด์ค 2, 3๋ฒ์ ๋ํ SSH Server๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ํ ๊ธฐ์กด์ /dev/null ๋ฒ๋ ธ๋ ๋ก๊ทธ๋ฅผ, ์ด๋ฒ์๋ ๋จ๊ฒจ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Exec command ๋ช ๋ น์ด๋ฅผ ๋ค์์ฒ๋ผ ์์ ํฉ๋๋ค.
nohup docker run -p 8080:80 docker๊ณ์ /docker repo์ด๋ฆ > nohup.out 2>&1 &
ex) nohup docker run -p 8080:80 juhyun419/spring-boot-cpu-bound > nohup.out 2>&1 &
์์๊ฐ์ด ์์ ํ ํ ์ ์ฅ์ ํ๊ณ ๋ฐฐํฌ(Build Now)๋ฅผ ์งํํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ํ ๋ค ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ๋ฑํ ์ค๋ฅ๊ฐ ์๋๋ฐ, GCP ์ธ์คํด์ค์ SSH์์ nohup.out ํ์ผ์ ํ์ธํด ๋ด ๋๋ค.
GCP์์ ์ธ์คํด์ค-1์ ์์ ๊ฐ์ด port is already allocated ๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฆ, Port๊ฐ ์ด๋ฏธ ํ ๋น๋์๋ค๋ ์ค๋ฅ์ธ๋ฐ์..
๊ธฐ์กด์ 8080 ํฌํธ๋ฅผ ์คํ์ค์ด์๊ธฐ์ ๋ฐ์ํ๋ ์ค๋ฅ์ ๋๋ค.
๋ํ GCP ์ธ์คํด์ค-2,3 ์ ์์ ๊ฐ์ด Docker demon์ ์ฐ๊ฒฐํ ์ ์๋ค๊ณ , ์คํ์ค์ธ ์ํ๋๊ณ ์น์ ํ๊ฒ ๋ก๊ทธ๋ฅผ ์๋ ค์ค๋๋ค.
์ธ์คํด์ค-2,3 ์ ๋ก๊ทธ๋ฅผ ์ข ๋ฃ(Ctrl + C) ํ ๋ค, docker๋ฅผ ์คํํด์ค๋๋ค.
$ sudo systemctl start docker
๋ํ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ๊ถํ์ ์์ ํด์ค๋๋ค.
$ sudo chmod 666 /var/run/docker.sock
์ ๊ณผ์ ์ ๋๋ด๊ณ Jenkins์์ ๋ค์ ๋ฐฐํฌ๋ฅผ ํด๋ด ์๋ค!!
nohup ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด์๋ฉด, GCP ์ธ์คํด์ค-2,3 ์ ์ด์ ์ ์์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค ๐
๐ Nginx GCP ์ธ์คํด์ค ์์ฑํ๊ธฐ
์ด์ Nginx ์ธ์คํด์ค๋ฅผ ์์ฑํด์ค๋๋ค!!
์ด๋ฆ์ nginx-instance-1
๋ฆฌ์ ์ ํ์ด์์ผ๋ก ์ค์ ํฉ๋๋ค.(์์ธ ๋ฆฌ์ ์ ์ต๋ 4๊ฐ๊ฐ ๋๋๋ฐ, ๋ชจ๋ ํ ๋นํ๊ธฐ๋๋ฌธ)
๋จธ์ ์ ํ์ e2-medium ์ผ๋ก ์ค์ ํฉ๋๋ค.
๊ธฐํ CentOS 7, ๋ฐฉํ๋ฒฝ์ HTTP, HTTPS ๋ชจ๋ ํ์ฉ์ ๋์ผํ๊ฒ ์ค์ ํ๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
๐ GCP ์ธ์คํด์ค์์ Nginx ์ค์น & ์คํํ๊ธฐ
์ธ์คํด์ค ์์ฑ์ด ๋ค๋์์ผ๋ฉด, SSH๋ฅผ ์ ์ํด์ Nginx๋ฅผ ์ค์นํด์ค๋๋ค.
$ sudo yum install nginx
์ค์น๊ฐ ๋ค ๋๋ฌ์ผ๋ฉด Nginx๋ฅผ ์คํํฉ๋๋ค.
$ sudo systemctl start nginx
Nginx๋ฅผ ์ค์นํ ์ธ์คํด์ค์ ์ธ๋ถIP๋ก ์ ์ํด๋ณด๋ฉด ์์ ๊ฐ์ ์ฌ์ดํธ๊ฐ ๋์ต๋๋ค. โ
๐ Nginx ๋ก๋๋ฐธ๋ฐ์ฑ ์ค์
Nginx์ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ค์ ํ๊ธฐ ์ํด ์ conf ํ์ผ์ vi ๋ชจ๋๋ก ์คํํฉ๋๋ค.
Nginx์ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ค์ ์ ํฉ๋๋ค.
์์ ๊ฐ์ ์ค์ ํ์ผ์ Nginx์ ๊ณต์ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ๋ฉ๋๋ค.
๋ํ server๋ GCP ์ธ์คํด์ค์ ๋ด๋ถ IP๋ฅผ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
upstream์ ๊ฐ๋จํ ์ค๋ช
... upstream <upstream name> { <๋ก๋๋ฐธ๋ฐ์ค ํ์ > - default๋ ๋ผ์ด๋ ๋ก๋น(๋ค์ด์จ ์์๋๋ก ์ฒ๋ฆฌ) server <host1>:<port1> <option ...> ... server <host2>:<port2> <option ...> } weight: ๋ก๋๋ฐธ๋ฐ์ฑ์ ๊ฐ์ค์น๋ฅผ ๋ฌ์ ๋ถ์ฐ์ํต๋๋ค. max_conns: ์ต๋ ์ฐ๊ฒฐ ํ๊ณ๋ฅผ ์ ํฉ๋๋ค. max_fails: ์ต๋ ์คํจ ํ๊ณ๋ฅผ ์ ํฉ๋๋ค.(์ต๋ ์คํจํ์์ ๋๋ฌํ๋ฉด ์๋ฒ๊ฐ ์ฃฝ์๊ฒ์ผ๋ก ๊ฐ์ฃผ) fail_timeout: ์๊ฐ ์ง์ (์ด ์๊ฐ์ ๋์ด์๋ ์๋ต์ด ์์ผ๋ฉด ์๋ฒ๊ฐ ์ฃฝ์๊ฒ์ผ๋ก ๊ฐ์ฃผ) backup: backup ์๋ฒ๋ก, ๋ค๋ฅธ ์๋ฒ๊ฐ ์ฃฝ์์ ๋ ๋์ |
Nginx์ IP์์ /hash/123 ์ผ๋ก ์ ๊ทผ์ ํ๋ ค๊ณ ํ๋ฉด ํ์ฌ๋ ๋ก๋๋ฐธ๋ฐ์ฑ์ด ์ ์ฉ์ด ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์,
404 ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์, Nginx๋ฅผ reload(restart) ํ ๋ค ์ ์ฉํฉ๋๋ค.
$ sudo systemctl reload nginx
๋ํ ์๋ ์ค์ ์ ์ง์ ํฉ๋๋ค.
$ sudo setsebool -P httpd_can_network_connect on
๊ทธ ํ Nginx์ ์๋ฒ๋ก ์ ์ํด๋ณด๋ฉด /hash/123 URL์ด ์ ์์ ์ผ๋ก ์ ๊ทผ์ด ๋ฉ๋๋ค!! ๐
๋๊ธ