์ด์ ๊ธ์์ ์ด์ด์ง๋๋ค.
๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ๊ตฌํํ๊ธฐ
์ ํฌ๋ ์ค๋๋ ๋ฒ์ (์ดํ ๋ธ๋ฃจ)๊ณผ ์๋ก์ด ๋ฒ์ (์ดํ ๊ทธ๋ฆฐ)์ ๊ตฌ๋ถ์ ์ธ์คํด์ค๊ฐ ์๋ ํฌํธ๋ฅผ ํตํด ํด๊ฒฐํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ์๊ณ ์ฒซ ์ค์ ์ผ๋ก ๋ธ๋ฃจ๋ 8080ํฌํธ, ๊ทธ๋ฆฐ์ 8081 ํฌํธ๋ฅผ ํตํด ํธ๋ํฝ์ ๋ณด๋ด๊ธฐ๋ก ํ์ต๋๋ค.
ํ์ฌ ์ฌ์ฉ์ค์ธ ์ดํ๋ฆฌ์ผ์ด์ ํฌํธํ์ธ
- ํ์ฌ ์ฌ์ฉ์ค์ธ ํฌํธ๋ฅผ PID๋ฅผ ํตํด ํ์ธํด์ค๋๋ค.
- ํ์ฌ ์ฌ์ฉ์ค์ธ ํฌํธ๊ฐ PORT_A์ธ ๊ฒฝ์ฐ BLUE_PORT๋ฅผ PORT_A๋ก ์ง์ ํด์ฃผ๊ณ GREEN_PORT๋ฅผ PORT_B๋ก ์ง์ ํด์ค๋๋ค.
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ฐ๋๋ก ์ง์ ํด์ค๋๋ค.
๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์คํ
๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ๋์ ํ๊ธฐ ์ ๊ณผ ๋์ผํ ๊ณผ์ ์ ๊ฑฐ์ณ ์คํํ๊ณ ํฌํธ๋ง GREEN_PORT๋ก ์ค์ ํ์ฌ์ค๋๋ค.
๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ๋ณ๊ฒฝ
- name: ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ ๋ณ๊ฒฝ
shell: bash {0}
run: |
echo "proxy_pass http://localhost:$GREEN_PORT;" | sudo tee /etc/nginx/conf.d/snackgame-port.inc;
sudo nginx -s reload;proxy_pass๋ฅผ ๊ธฐ์กด ๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ณ๊ฒฝํด์ค๋๋ค.
๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ
- name: ๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์
์ข
๋ฃ
shell: bash {0}
run: |
PROCESS_ID="$(lsof -i:$BLUE_PORT -t)"
if [ -n "$PROCESS_ID" ]; then
sudo kill -9 $PROCESS_ID
echo "๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃํ์ต๋๋ค. (pid : $PROCESS_ID)\n"
fi๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์ ํฌํธ๋ฅผ ์ด์ฉํ์ฌ listenํ๊ณ ์๋ PID๋ฅผ ์ฐพ์ ์ข ๋ฃํด์ค๋๋ค.
์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
์์์ ๊ตฌํํ ๋ก์ง์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๊ณ ๋ฐฐํฌ๋ฅผ ์งํํ๋ฉฐ Jmeter๋ฅผ ์ฌ์ฉํด ๋ถํํ ์คํธ๋ฅผ ํด๋ณด์์ต๋๋ค.
ํ์ง๋ง ๋ฐฐํฌ ๋์ค ์๋ฒ๊ฐ ์๋ต์ ๋ชปํ์ฌ ์๋ฌ๊ฐ ๋ฐ์ํ์๊ณ ์๋ ์๋ํ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ์์ฑํ์ง ๋ชปํ์์ต๋๋ค.
ย ๐จย ย ๋ก์ง ์์ฒด๋ ๋ฌธ์ ๊ฐ ์๋๊ฒ ๊ฐ์๋ฐ ์์งโฆ?
์์ธ
์๊ฐ์ ํด๋ณด๋ ์คํ๋ง ์๋ฒ๋ฅผ ๋ถํ ํ๋๋ฐ์๋ ์๊ฐ์ด ํ์ํ๋ ๊ทธ ์๊ฐ์ ๊ณ ๋ คํ์ง ์๊ณ ์์ง ์คํ๋์ง ์์ ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํธ๋ํฝ์ ๋ฐ๊พธ๋ ๋น์ฐํ๊ฒ๋ ์๋ฒ๊ฐ ์๋ตํ์ง ๋ชปํ๊ฒ์ด์์ต๋๋ค.
ํด๊ฒฐ
๊ทธ๋์ ์ ํฌ๋ ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์
์ http์์ฒญ์ ๋ณด๋ด HttpStatus.OK๋ฅผ ์๋ตํ ๋ ๊น์ง ๋๊ธฐํ๋๋ก ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.
๊ฒฐ๊ณผ
๋๋์ด ์์ฑ!!
๋ฐฐํฌ ์์๋ถํฐ ๋๊น์ง ์ค๋จ ์์ด ์๋น์ค๊ฐ ์ ๋๊ณ ์๋ ๋ชจ์ต์ ๋๋ค.
์ถ๊ฐ(2023.01.12)
๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ๊ฒ์ฆ
์ด์ ์๋ ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ๊ฐ ์คํจํ์์๋์ ํ์ ์กฐ์น๊ฐ ๋ฐ๋ก ์์์ต๋๋ค.
๊ทธ๋์ ๋ง์ฝ ์คํจํ๋ฉด ์ด ๋ถ๋ถ์์ ๋ฌดํ์ ๋๊ธฐ๋ฅผ ํ์๋๋ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒ์ฆ์ ์ถ๊ฐํ์์ต๋๋ค.
- name: ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์
์คํ ๊ฒ์ฆ
shell: bash {0}
run: |
PROCESS_ID="$(lsof -i:$GREEN_PORT -t)"
if [ -n "$PROCESS_ID" ]; then
echo "::error title=๋ฐฐํฌ ์คํจ::๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋กค๋ฐฑํฉ๋๋ค.";
exit 1;
fiํฌํธ๋ฅผ ํ์ธํ์ฌ ๋ฐฐํฌ๊ฐ ์คํจํ ์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์งํ๋ ๋ฐฉ์์ ๋๋ค.
์ถ๊ฐ(2023.01.18)
๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ๊ฒ์ฆ ์์
์ค์ ๋ก ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ ํ ์คํ๋๊ธฐ ์ ์ ๊ฒ์ฆ์ ๋ง์น๊ณ ์ ์์ ๋๊ธฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
์์ ๋ก์ง์ ํฌํธ๋ฅผ ํ์ธํ์ฌ PID๋ฅผ ๊ฒ์ฌํ๊ธฐ์ ์ด๋ ค์๋ ํฌํธ๋ง ์ฐพ์ผ๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ฐ
๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ์คํ๋์ง ์์๋ ํฌํธ๊ฐ ๋จผ์ ์ด๋ฆฌ๋๋ฐ ๊ทธ ์์ ์ ํ์ธ์ ํ์ฌ ์ ๋๋ก๋ ๊ฒ์ฆ์ ๋ชปํ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋์ ๊ฒ์ฆ ๋ก์ง์ โ๊ทธ๋ฆฐ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๊ฐ๋ฅํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋คโ ๋จ๊ณ์์ผ๋ก ์ด๋์์ผ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ ํ ์คํ๋ ๋๊น์ง ์ง์์ ์ผ๋ก ๊ฒ์ฆํ๋๋ก ์์ ํ์์ต๋๋ค.
ํ๊ณ
Keep-alive
HTTP/1.0+ ๋ถํฐ ์ถ๊ฐ๋ Connection: keep-alive๋ ์์ฒญ์ด ์ฒ๋ฆฌ๋ ํ์๋ connection์ ์ ์งํ๊ฒ ํด์ฃผ๋๋ฐ ์ด ๋ถ๋ถ์ด ์ ํฌ์๊ฒ ๋ฌธ์ ๊ฐ ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐฐํฌ์์ ๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ connection์ด close ๋์ง ์์ ์ํ์์ ๋ธ๋ฃจ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํด๋ฒ๋ฆฌ๋ฉด TCP ์ฐ๊ฒฐ์ด ๋์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฒ์์๋ ์์ฃผ์งง์ ์๊ฐ(3s์ ๋)๋์ ๋ง์ฝ ํด๋ผ์ด์ธํธ์ request๊ฐ ์ฒ๋ฆฌ๊ฐ ์ง์ฐ๋์ด ์๋ฒ๊ฐ ์ข ๋ฃ๋๋ฉด keep-alive์ต์ ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ์๊ฐํ์์ต๋๋ค. ํ์ง๋ง ๋ค์ ํ๋ฒ ์๊ฐ์ ํด๋ณด๋ ์ ์ด์ ์ด๋ฐ ์ํฉ์ด ๋ง๋ค์ด์ง๋ ๊ฒ์ API ์์ฒด์ ๋ฌธ์ ์์ ๊นจ๋ฌ์์ต๋๋ค.
๋ค์ ๋์์์ ๊ทธ๋ผ keep-alive๋ก ์๊ธฐ๋ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ ์์๊น์ ๋ํด ๊ณ ๋ฏผํด๋ดค์๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค.
Keep-alive๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ๊ฐ์ ํ๋ค
๊ทผ๋ณธ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด keep-alive๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ฉด ํด๊ฒฐ๋์ง ์์๊น๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ์์ฒญ์ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ(ex ํ์ผ์ ๋ก๋)๋ keep-alive์ ์ ๋ฌด์ ๊ด๊ณ์์ด ๊ฒฐ๊ตญ ์ฐ๊ฒฐ์ด ๋๊ธฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ keep-alive ์์ฒด์ ๋ํ ์กฐ์น๋ ์ ํฉํ์ง ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
Graceful shutdown ์ ์ฉ
๊ทธ๋์ Spring Boot์ ์๋ Graceful shutdown๊ธฐ๋ฅ์ ํ์ฉํ๊ธฐ๋ก ํ์์ต๋๋ค. Graceful shutdown์ ๋ํด์๋ ์ถํ์ ์ ์ฉ ํ ๋ ์์ธํ๊ฒ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.