๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/DevOps

Docker์™€ Nginx๋ฅผ ํ™œ์šฉํ•ด react ํ”„๋กœ์ ํŠธ ec2์— ๋ฐฐํฌ ๋ฐ jenkins๋ฅผ ํ™œ์šฉํ•œ CI/CD ๊ตฌ์ถ• + docker compose ํ™œ์šฉ - 1(๋ฐฐํฌ ํ๋ฆ„ ์š”์•ฝ ๋ฐ q&a)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 3. 16.

๋ฐฐํฌ ํ๋ฆ„ ์š”์•ฝ ๋ฐ q&a

docker, docker-compose, nginx, jenkins, react, ec2 ๋ฐฐํฌ

1. ๋ฐฐํฌ ํ๋ฆ„ ์š”์•ฝ ๋ฐ q&a
2. ๋ฐฐํฌ ํ”„๋กœ์ ํŠธ docker ๋ฐ nginx ํŒŒ์ผ ์„ค์ •
3. ์  ํ‚จ์Šค์™€ ๊นƒ๋žฉ ์—ฐ๊ฒฐ ๋ฐ ci/cd ์„ค์ •

react๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•ด๋ณด์ž.

๋ฐฐํฌ ํ๋ฆ„ ์š”์•ฝ

๋ฐฐํฌ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ๋ณธ ๊ธ€์—์„œ ์†Œ๊ฐœํ•  ๋ฐฐํฌ ๋ฐฉ์‹์˜ ํ๋ฆ„์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ec2 ์„œ๋ฒ„์— docker in docker๋ฅผ ์ ์šฉํ•œ jenkins ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šด๋‹ค.
  2. jenkins๋ฅผ ๋ฐฐํฌํ•  ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ(์˜ ๋ธŒ๋žœ์น˜)์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
  3. ํ•ด๋‹น ๋ธŒ๋žœ์น˜์— ํŠน์ • ์ด๋ฒคํŠธ(ํ‘ธ์‰ฌ, ๋จธ์ง€ ๋“ฑ)์ด ๋ฐœ์ƒํ•˜๋ฉด jenkins๋Š” ์„ค์ •ํ•œ shell script๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  4. shell script๋ฅผ ํ†ตํ•ด docker-compose๋ฅผ ํ™œ์šฉํ•ด Dockerfile์„ ์ž‘๋™ ์‹œ์ผœ react ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋ฏธ์ง€ํ™” ๋ฐ ์ปจํ…Œ์ด๋„ˆํ™”ํ•ด์„œ ec2 ์„œ๋ฒ„์— ๋ฐฐํฌํ•œ๋‹ค.
  5. react๋Š” nginx๋ฅผ ์›น์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐํฌํ•œ๋‹ค.(๋ณธ ๊ธ€์—์„œ ํฌํŠธํฌ์›Œ๋”ฉ ๋ฐ ssl ์ธ์ฆ์„œ ์ ์šฉ์€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค)

๋ฐฐํฌ ๊ณผ์ • ๊ด€๋ จ q&a

์œ„ ๊ณผ์ •์„ ์ฝ์œผ๋ฉด์„œ '์™œ ์ €๋ ‡๊ฒŒ ํ•˜์ง€'๋ผ๊ณ  ๊ถ๊ธˆํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ๋“ค์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค

Q: ๊ทธ๋ƒฅ ๋ฐ”๋กœ ec2 ์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๋ฉด ๋˜์ง€ ์™œ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?
A: ์„œ๋ฒ„์— react๋ฟ๋งŒ ์•„๋‹ˆ๋ผ db, backend server ๋“ฑ๋„ ์˜ฌ๋ฆฌ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์„ ์ด๋ฏธ์ง€ํ™”ํ•ด์„œ ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์šด์˜ํ•˜๋Š” ๊ฒŒ ๊ด€๋ฆฌ์— ํŽธํ•ฉ๋‹ˆ๋‹ค.

Q: ์™œ jenkins๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?
A: jenkins๋Š” ci/cd (์ง€์† ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ) ํˆด์ธ๋ฐ ๊นƒ๋žฉ์ด๋‚˜ ๊นƒํ—ˆ๋ธŒ ๊ฐ™์€ ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด ํŠน์ • ์ด๋ฒคํŠธ(ํ‘ธ์‰ฌ, ๋จธ์ง€ ๋“ฑ) ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ ํŠน์ • ๋ช…๋ น(์ฃผ๋กœ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ)๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ณผ์ • ์ค‘์— ์ˆ˜์‹œ๋กœ ๋ณ€๋™์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋Š”๋ฐ ๋งค๋ฒˆ ์ˆ˜๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ๋ณด๋‹ค ์  ํ‚จ์Šค ๊ฐ™์€ ci/cdํˆด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: docker-compose๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋‚˜์š”?
A: docker-compose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์„ ๋•Œ ํ•ด๋‹น ๋„์ปค๋“ค์˜ ์„ค์ • ์ •๋ณด ๋ฐ ์‹คํ–‰์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํˆด์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ํ•œ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์ผ ๊ฒฝ์šฐ์—๋„ ์ ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ docker-compse๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„์ปคํŒŒ์ผ์˜ ์‹คํ–‰ ๊ณผ์ •์„ ์•„์ฃผ ์กฐ๊ธˆ ๊ฐ„ํŽธํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์‚ฌ์‹ค ํ•œ ๊ฐœ์˜ ๊ฒฝ์šฐ ๋ณ„ ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ docker-compose๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ํ”„๋กœ์ ํŠธ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•  ์ผ์ด ์žˆ์–ด ์–ด์ฐจํ”ผ docker-compose๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Q: Nginx๋Š” ์™œ ์‚ฌ์šฉํ•˜๋‚˜์š”
A: react ๋ฐฐํฌ์˜ ์›น์„œ๋ฒ„๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. nginx๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๊ฒฝ๋Ÿ‰ ์›น์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.(๋‹ค๋ฅธ ์œ ๋ช…ํ•œ ์›น์„œ๋ฒ„์ธ Apache๋Š” ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜์œผ๋กœ nginx์— ๋น„ํ•ด ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค) spring ์„œ๋ฒ„๋ฅผ ํ†ฐ์บฃ(ํ†ฐ์บฃ์€ ์•„ํŒŒ์น˜์ž…๋‹ˆ๋‹ค)๋กœ ๋ฐฐํฌํ•˜๋“ฏ์ด react๋ฅผ nginx๋กœ ๋ฐฐํฌํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ Nginx๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ณธ ๊ธ€์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Q: ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ์™œ ์•ˆ ํ•˜๋‚˜์š”?
A: ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋Š” ๋”ฐ๋กœ ec2 server์˜ nginx ์„ค์ •์„ ์ ์šฉํ•ด์ค˜์•ผ ๋ผ์„œ ๋‹ค์Œ ๊ธ€์—์„œ ssl ์ธ์ฆ์„œ์™€ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (๊ฐ™์ด ํ• ๋ ค๋ฉด ํ•  ์ˆ˜๋Š” ์žˆ์Œ)

์ฐธ๊ณ ๋กœ ๋ณธ ๊ธ€์€ ์ง„ํ–‰์ค‘์ด๋˜ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ ๊ณผ์ •์„ ์ •๋ฆฌํ•œ ๊ฑฐ๋ผ ๋˜‘๊ฐ™์ด ์ ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‚˜๋Š” Devops ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๊ณ  ํ•ด๋‹น ๊ธ€์˜ ๋‚ด์šฉ๋„ ๊ณต์‹๋ฌธ์„œ์™€ ๊ตฌ๊ธ€, chat gpt ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋ณ€ ์ง€์ธ ์ฐธ๊ณ ํ•ด์„œ ์ ์šฉํ•œ ๊ธ€์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ docker ๋ฐ nginx ํŒŒ์ผ๋“ค์„ ์ž‘์„ฑํ•˜๊ฒ ๋‹ค.

๋Œ“๊ธ€