Kubernetes๋ฅผ ์ฌ์ฉํ์ฌ CI/CD ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ ๋ ์๋ก์ด ์ธํ๋ผ์ ์๊ตฌ ์ฌํญ๊ณผ ์ฌ๊ธฐ์ ์ ์ก๋๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ ๋นํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํนํ, ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ถ ๋จ๊ณ์์๋ ๋ค์์ ์ป๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ ์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง ๋ชจ๋ ํ๋ก์ ํธ ํ๊ฒฝ ๋ฐ ํด๋ฌ์คํฐ. ์ด ์์น์ ์ฌ๋ฐ๋ฅธ ์์น์ ๊ธฐ์ด๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์ดํธ์ ์ฝ๋๊ฐ ๊ธฐ์ฑ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ์์๋ ๋๊ตฌ๋ ๋ณผ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ์ฌ์ฉ์ด ์ ํ๋ฉ๋๋ค. "์ผ๋ฐ ํ๊ฒฝ"์์๋ ์ด ๋์์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ง๋ง Kubernetes์์๋ ํนํ ์ฒ์์ผ๋ก ์ด๋ฌํ ๋์์ ์ ํ ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์ฐฝ์์ ์ธ ์๊ฐ์ ๊ฐ์ง ์ฌ๋์ ์ธ๋ป ๋ณด๊ธฐ์ ๋ช ๋ฐฑํ๊ณ ์ข์ ๋ณด์ด๋ ์ธํ๋ผ ์๋ฃจ์ ์ ์๊ฐํด ๋ผ ์ ์์ง๋ง... ๋๋ถ๋ถ์ ์ํฉ์์๋ ๊ทธ๋ด ์ ์๊ณ ๋ ๊ทธ๋์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ตฌ์กฐ์ ์ผ๋ก ํด๊ฒฐํ๋ค.
ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ ๋ ๋ถ์พํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ ํ์ผ ์ ์ฅ์ ๋ํ ์ธ๊ธฐ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ณ ๋ณด๋ค ์ ํํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ ์ ์ ์ฅ
์ค๋ช ์ ์ํด ์ผ์ข ์ ์ ์ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ จ์ ์ด๋ฏธ์ง, ์คํ์ผ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ์ป๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ณด์ธ์. ์๋ฅผ ๋ค์ด Yii PHP ํ๋ ์์ํฌ์๋ ๊ณ ์ ํ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ ์์ฑํ๋ ์์ฐ ๊ด๋ฆฌ์๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ถ๋ ฅ์ ๋ถ๋ช ํ ์๋ก ๊ต์ฐจํ์ง ์๋ ์ ์ ์ฌ์ดํธ์ ๋ํ ๊ฒฝ๋ก ์งํฉ์ ๋๋ค(์ด๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ํ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ํ๋์์ต๋๋ค). ๋ฐ๋ผ์ ์น ๋ฆฌ์์ค ๋ชจ๋์ ์ฒ์ ์ก์ธ์คํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ์ผ(์ค์ ๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง ๋์ค์ ์์ธํ ์ค๋ช )์ด ๊ตฌ์ฑ๋์ด ์ด ๋ฐฐํฌ์ ๊ณ ์ ํ ๊ณตํต ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ๋ฐฐ์น๋ฉ๋๋ค.
-
webroot/assets/2072c2df/css/โฆ
-
webroot/assets/2072c2df/images/โฆ
-
webroot/assets/2072c2df/js/โฆ
ํด๋ฌ์คํฐ ์ธก๋ฉด์์ ์ด๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
๊ฐ์ฅ ๊ฐ๋จํ ์
์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐํฌํ๊ณ ๊ฐ๋จํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด PHP ์์ nginx๊ฐ ์ค๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ - ์ ๊ฐ ๋ ๊ฐ์ ์ปจํ ์ด๋๋ก:
apiVersion: apps/v1
kind: Deployment
metadata:
name: site
spec:
selector:
matchLabels:
component: backend
template:
metadata:
labels:
component: backend
spec:
volumes:
- name: nginx-config
configMap:
name: nginx-configmap
containers:
- name: php
image: own-image-with-php-backend:v1.0
command: ["/usr/local/sbin/php-fpm","-F"]
workingDir: /var/www
- name: nginx
image: nginx:1.16.0
command: ["/usr/sbin/nginx", "-g", "daemon off;"]
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: nginx.conf
๋จ์ํ๋ ํํ๋ก nginx ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฝ๋ฉ๋๋ค.
apiVersion: v1
kind: ConfigMap
metadata:
name: "nginx-configmap"
data:
nginx.conf: |
server {
listen 80;
server_name _;
charset utf-8;
root /var/www;
access_log /dev/stdout;
error_log /dev/stderr;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
์ฌ์ดํธ์ ์ฒ์ ์ก์ธ์คํ๋ฉด ์์ฐ์ด PHP ์ปจํ
์ด๋์ ๋ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋์ ํฌ๋ ๋ด์ ๋ ๊ฐ์ ์ปจํ
์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ nginx๋ (๊ตฌ์ฑ์ ๋ฐ๋ผ) ์ ๊ณต๋์ด์ผ ํ๋ ์ด๋ฌํ ์ ์ ํ์ผ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ CSS ๋ฐ JS ํ์ผ์ ๋ํ ๋ชจ๋ ์์ฒญ์ โโ๋ํด 404 ์ค๋ฅ๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ
์ ์ปจํ
์ด๋์ ๋ํ ๊ณตํต ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ ์ต์
- ์ผ๋ฐ emptyDir
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: site
spec:
selector:
matchLabels:
component: backend
template:
metadata:
labels:
component: backend
spec:
volumes:
- name: assets
emptyDir: {}
- name: nginx-config
configMap:
name: nginx-configmap
containers:
- name: php
image: own-image-with-php-backend:v1.0
command: ["/usr/local/sbin/php-fpm","-F"]
workingDir: /var/www
volumeMounts:
- name: assets
mountPath: /var/www/assets
- name: nginx
image: nginx:1.16.0
command: ["/usr/sbin/nginx", "-g", "daemon off;"]
volumeMounts:
- name: assets
mountPath: /var/www/assets
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: nginx.conf
์ด์ ์ปจํ ์ด๋์ ์์ฑ๋ ์ ์ ํ์ผ์ด nginx์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๊ณต๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์์์ ์ธ ์๋ฃจ์ ์ด๋ผ๋ ์ ์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฆ, ์ด์์ ์ธ ์๋ฃจ์ ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๊ณ ์๋์์ ์ค๋ช ํ๋ ๊ณ ์ ํ ๋์์ค์ ๋จ์ ์ด ์์์ ์๋ฏธํฉ๋๋ค.
๋์ฑ ๋ฐ์ ๋ ์คํ ๋ฆฌ์ง
์ด์ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ์คํ์ผ์ด ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ ์ฌ์ฉ์๊ฐ ์ด ํ์ด์ง๋ฅผ ์ฝ๋ ๋์ ์ปจํ ์ด๋๋ฅผ ๋ค์ ๋ฐฐํฌํ๋ ์ํฉ์ ์์ํด ๋ณด์ธ์. ์์ฐ ์นดํ๋ก๊ทธ๊ฐ ๋น์ด ์์ผ๋ฉฐ ์ ์นดํ๋ก๊ทธ ์์ฑ์ ์์ํ๋ ค๋ฉด PHP์ ๋ํ ์์ฒญ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ดํ์๋ ์ด์ ์ ์ ์ ๋ํ ๋งํฌ๋ ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ์ ์ ํ์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ํ ๋ก๋๋ ํ๋ก์ ํธ๊ฐ ๋ค์ ๋ง์ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ๋ณธ ํ๋๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์์ ์๋ฏธํฉ๋๋ค.
- ๊ท๋ชจ๋ฅผ ํค์๋ณด์ ์ ๊ฐ ๋ณต์ ๋ณธ์ ์ต๋ XNUMX๊ฐ์ ๋๋ค.
- ์ฌ์ดํธ์ ์ฒ์ ์ก์ธ์คํ์ ๋ ํ๋์ ๋ณต์ ๋ณธ์ ์์ฐ์ด ์์ฑ๋์์ต๋๋ค.
- ์ด๋ ์์ ์์ ์์ ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ชฉ์ ์ผ๋ก ๋ ๋ฒ์งธ ๋ณต์ ๋ณธ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ๋ก ๊ฒฐ์ ํ์ง๋ง ์ด๋ฌํ ์์ฐ์ ์์ง ๊ฑฐ๊ธฐ์ ์์ต๋๋ค. ์๋๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์กด์ฌํ์ง ์์ ์๋ ์์ต๋๋ค.
RollingUpdate
ํ์ฌ ์ฐ๋ฆฌ๋ ๋ฐฐํฌ๋ฅผ ์ํํ๊ณ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ ๋ค์ ์ค์์ ๋๋ค.
์ค๋๋ ์์ฐ์ ์์ง ์์ผ๋ ค๋ฉด ๋ค์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. emptyDir
์ hostPath
, ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ข์ง ์์ต๋๋ค. ์๋ํ๋ฉด ์ค์ ๋ก๋ ํน์ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ฐ์ธ๋ฉ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ ๋๋ ํฐ๋ฆฌ์ ํ์ํ ํ์ผ์ด ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๋ ๋
ธ๋ ๊ฐ์ ์ผ์ข
์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๋ ํฐ๋ฆฌ ๋๊ธฐํ๊ฐ ํ์ํฉ๋๋ค.
ํด๊ฒฐ์ฑ ์ ๋ฌด์์ ๋๊น?
- ํ๋์จ์ด์ ๋ฆฌ์์ค๊ฐ ํ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ธํํ ์ ์ ์๊ตฌ์ ๋ง๊ฒ ๋๋ฑํ๊ฒ ์ก์ธ์ค ๊ฐ๋ฅํ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.๊ณต์ ๋ฌธ์ SSD ๋๋ผ์ด๋ธ, ์ต์ XNUMX์ค ๋ณต์ ๋ฐ ํด๋ฌ์คํฐ ๋ ธ๋ ๊ฐ์ ์์ ์ ์ธ "๋๊บผ์ด" ์ฐ๊ฒฐ์ ๊ถ์ฅํฉ๋๋ค. - ๋ ๊น๋ค๋ก์ด ์ต์ ์ NFS ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์น ์๋ฒ์ ์์ฒญ ์ฒ๋ฆฌ์ ๋ํ ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํ๋ฉฐ ๋ด๊ฒฐํจ์ฑ์ ์์ง ๋ง์ด ๋ถ์กฑํฉ๋๋ค. ์คํจ์ ๊ฒฐ๊ณผ๋ ์น๋ช ์ ์ ๋๋ค. ๋ง์ดํธ๊ฐ ์์ค๋๋ฉด ํ๋๋ก ๋์งํ๋ LA ๋ถํ์ ์๋ ฅ์ผ๋ก ์ธํด ํด๋ฌ์คํฐ๊ฐ ์ฌ๋งํ๊ฒ ๋ฉ๋๋ค.
๋ฌด์๋ณด๋ค๋ ์๊ตฌ ์ ์ฅ์๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ชจ๋ ์ต์
์๋ ๋ค์์ด ํ์ํฉ๋๋ค. ๋ฐฐ๊ฒฝ ์ฒญ์ ํน์ ๊ธฐ๊ฐ ๋์ ๋์ ๋ ์ค๋๋ ํ์ผ ์ธํธ. PHP๊ฐ ํฌํจ๋ ์ปจํ
์ด๋ ์์ ๋ค์์ ๋ฃ์ ์ ์์ต๋๋ค. ๋ฐ๋ชฌ์
์ ํ๋ ์๊ฐ ๋์ ์์ฐ ์ฌ๋ณธ์ ์ ์ฅํ๋ nginx ์บ์ฑ์์. ์ด ๋์์ ๋ค์์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. proxy_cache
์ผ ๋จ์ ๋๋ ๊ธฐ๊ฐ๋ฐ์ดํธ ๋จ์์ ๋์คํฌ ๊ณต๊ฐ ์ ์ฅ ๊น์ด.
์์์ ์ธ๊ธํ ๋ถ์ฐ ํ์ผ ์์คํ ๊ณผ ์ด ๋ฐฉ๋ฒ์ ๊ฒฐํฉํ๋ฉด ์ด๋ฅผ ๊ตฌํํ๊ณ ์ง์ํ ์ฌ๋๋ค์ ์์ฐ๊ณผ ๊ธฐ์ ์ ์ ์ฌ๋ ฅ์ ์ํด์๋ง ์ ํ๋๋ ์์์ ๊ฑฐ๋ํ ์์ญ์ด ์ ๊ณต๋ฉ๋๋ค. ๊ฒฝํ์ ํตํด ์ฐ๋ฆฌ๋ ์์คํ ์ด ๋จ์ํ ์๋ก ๋ ์์ ์ ์ผ๋ก ์๋ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ณ์ธต์ด ์ถ๊ฐ๋๋ฉด ์ธํ๋ผ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์์ง๊ณ ๋์์ ์ฅ์ ๋ฅผ ์ง๋จํ๊ณ ๋ณต๊ตฌํ๋ ๋ฐ ์์๋๋ ์๊ฐ๋ ๋์ด๋ฉ๋๋ค.
์ถ์ฒ
์ ์๋ ์คํ ๋ฆฌ์ง ์ต์ ์ ๊ตฌํ์ด ๊ทํ์๊ฒ ์ ๋นํ์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด(๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค...) ๋ฐ๋ํธ์์ ์ํฉ์ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฆ, ํ๋ก์ ํธ ์ํคํ ์ฒ๋ฅผ ์์ธํ ์ดํด๋ณด๊ณ ์ฝ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ธ์, ์ด๋ฏธ์ง์ ์ผ๋ถ ์ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฐ๊ฒฐ๋์ด ์ด๋ฏธ์ง ์กฐ๋ฆฝ ๋จ๊ณ์์ "์๋ฐ์ " ๋ฐ/๋๋ ์์ฐ ์ฌ์ ์ปดํ์ผ์ ์ํ ๋ด์ฉ ๋๋ ์ ์ฐจ์ ๋ํ ๋ช ํํ ์ ์์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ํ๊ฒฝ๊ณผ ๋ณต์ ๋ณธ์ ๋ํด ์ ๋์ ์ผ๋ก ์์ธก ๊ฐ๋ฅํ ๋์๊ณผ ๋์ผํ ํ์ผ ์ธํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
Yii ํ๋ ์์ํฌ์ ํน์ ์๋ก ๋์๊ฐ์ ๊ทธ ๊ตฌ์กฐ๋ฅผ ์์ธํ ๋ค๋ฃจ์ง ์๋๋ค๋ฉด(์ด ๊ธ์ ๋ชฉ์ ์ ์๋๋๋ค) ๋ ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ ๊ทผ ๋ฐฉ์์ ์ง์ ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
- ์์ธก ๊ฐ๋ฅํ ์์น์ ์์ฐ์ ๋ฐฐ์นํ๋๋ก ์ด๋ฏธ์ง ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์์ ์ ์/๊ตฌํ๋ฉ๋๋ค.
yii2-์ ์ ์์ฐ . - ์๋ฅผ ๋ค์ด ์ค๋ช
๋ ๋๋ก ์์ฐ ๋๋ ํฐ๋ฆฌ์ ๋ํ ํน์ ํด์๋ฅผ ์ ์ํฉ๋๋ค.
์ด ํ๋ ์ ํ ์ด์ (์ฌ๋ผ์ด๋ 35๋ฒ๋ถํฐ ์์) ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋ณด๊ณ ์ ์์ฑ์๋ ๊ถ๊ทน์ ์ผ๋ก (๊ทธ๋ฆฌ๊ณ ์ด์ ์์ด๋ ์๋๋๋ค!) ๋น๋ ์๋ฒ์์ ์์ฐ์ ์กฐ๋ฆฝํ ํ ์ค์ ์คํ ๋ฆฌ์ง(์: S3)์ ์ ๋ก๋ํ๊ณ ๊ทธ ์์ CDN์ ๋ฐฐ์นํ๋ผ๊ณ ์กฐ์ธํฉ๋๋ค.
๋ค์ด๋ก๋
์ ํ๋ฆฌ์ผ์ด์ ์ Kubernetes ํด๋ฌ์คํฐ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ํ์คํ ์ค์ํ ๋ ๋ค๋ฅธ ์ฌ๋ก๋ ์ฌ์ฉ์ ํ์ผ์ ํ์ผ ์์คํ ์ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ก๋ ์์์ ํตํด ํ์ผ์ ๋ฐ์๋ค์ด๊ณ , ์์ ์ค์ ํด๋น ํ์ผ๋ก ์์ ์ ์ํํ๊ณ , ๋ค์ ๋ณด๋ด๋ PHP ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ต๋๋ค.
Kubernetes์์ ์ด๋ฌํ ํ์ผ์ ๋ฐฐ์นํด์ผ ํ๋ ์์น๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋ณต์ ๋ณธ์ ๊ณตํต๋์ด์ผ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ๊ณผ ์ด๋ฌํ ํ์ผ์ ์ง์์ฑ์ ๊ตฌ์ฑํด์ผ ํ๋ ํ์์ฑ์ ๋ฐ๋ผ ์์์ ์ธ๊ธํ ๊ณต์ ์ฅ์น ์ต์ ์ด ๊ทธ๋ฌํ ์์น์ผ ์ ์์ง๋ง, ๋ณด์๋ค์ํผ ๋จ์ ์ด ์์ต๋๋ค.
์ถ์ฒ
ํ ๊ฐ์ง ํด๊ฒฐ์ฑ
์ S3 ํธํ ์คํ ๋ฆฌ์ง ์ฌ์ฉ (minio์ ๊ฐ์ ์ผ์ข
์ ์์ฒด ํธ์คํ
์นดํ
๊ณ ๋ฆฌ์ธ ๊ฒฝ์ฐ์๋) S3๋ก ์ ํํ๋ ค๋ฉด ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค. ์ฝ๋ ์์ค์์, ํ๋ฐํธ์๋์์ ์ฝํ
์ธ ๊ฐ ์ด๋ป๊ฒ ์ ๋ฌ๋ ์ง์ ๋ํด ์ด๋ฏธ ์๊ณ ์์ต๋๋ค.
์ฌ์ฉ์ ์ธ์
์ด์ ๋ณ๋๋ก ์ฌ์ฉ์ ์ธ์ ์ ์ฅ ๊ตฌ์ฑ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ ์ข ์ข ๋์คํฌ์ ์๋ ํ์ผ์ด๊ธฐ๋ ํ๋ฉฐ, Kubernetes์ ๋งฅ๋ฝ์์ ์ฌ์ฉ์์ ์์ฒญ์ด ๋ค๋ฅธ ์ปจํ ์ด๋์์ ๋๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์ง์์ ์ธ ์น์ธ ์์ฒญ์ผ๋ก ์ด์ด์ง๋๋ค.
์ ์์ ์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค. stickySessions
์ง์
์ (์ด ๊ธฐ๋ฅ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ ์์ ์ปจํธ๋กค๋ฌ์์ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
rules:
- host: stickyingress.example.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ๋ฐ๋ณต ๋ฐฐํฌ๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ์ง๋ ์์ต๋๋ค.
์ถ์ฒ
๋ ์ ํํ ๋ฐฉ๋ฒ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค์์ผ๋ก ์ ์กํ๋ ๊ฒ์ ๋๋ค. memcached, Redis ๋ฐ ์ ์ฌํ ์๋ฃจ์ ์ ์ธ์ ์ ์ฅ - ์ผ๋ฐ์ ์ผ๋ก ํ์ผ ์ต์ ์ ์์ ํ ํฌ๊ธฐํฉ๋๋ค.
๊ฒฐ๋ก
๋ณธ๋ฌธ์์ ๋ ผ์๋ ์ธํ๋ผ ์๋ฃจ์ ์ ์์ "๋ชฉ๋ฐ" ํ์์ผ๋ก๋ง ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค(ํด๊ฒฐ์ฑ ์ผ๋ก ์์ด๋ก ํ๋ฉด ๋ ์๋ฆ๋ต๊ฒ ๋ค๋ฆผ). ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Kubernetes๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ๊ด๋ จ์ด ์์ ์ ์์ง๋ง ๋ฟ๋ฆฌ๋ฅผ ๋ด๋ฆฌ๋ฉด ์ ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋๋ ๊ฒฝ๋ก๋ ์ด๋ฏธ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ ์๋ ค์ง ๋ด์ฉ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํคํ
์ฒ ์์ ์ ์ํด ์ด๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์
๋๋ค.
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
nginx๋ฅผ ์ฌ์ฉํ์ฌ AWS S3์์ ํ์ผ ํ๋ก์ "; - ยซ
Google์ด ์ ์ํ๋ ์ปจํ ์ด๋ ์ฌ์ฉ์ ๋ํ 7๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก "; - ยซ
์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๋ฅผ ์ํ 7๊ฐ์ง ์์น ยป (๋ ๋ํ์์); - ยซ
7 Factor ์ฑ์์ ๋๋ฝ๋ 12๊ฐ์ง ์์ ".
์ถ์ฒ : habr.com