๋ฉ‹์‚ฌ Backend Plus 37์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 12์›” 25์ผ

์˜ค๋Š˜์€ AWS EC2์˜ ์šฐ๋ถ„ํˆฌ ์„œ๋ฒ„ + ์  ํ‚จ์Šค (Jenkins)๋ฅผ ํ†ตํ•œ ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ๋งก์•„์„œ ํ•˜์˜€๊ณ , ๊ณผ์ •๋“ค์„ ์ •๋ฆฌํ•ด์„œ ๋‚จ๊ฒจ ๋ณผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ์—๋Š” CI / CD ๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ  ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ณธ๋ก 

๋ฐฐํฌ๋ฅผ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์ˆ˜๋งŽ์€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์กด์žฌํ•˜๊ณ , ๊ทธ๋Ÿฌํ•œ ๋ฐฉ๋ฒ•๋“ค์€ ๋‹ค๋ฃฌ ๋ธ”๋กœ๊ทธ๋“ค์ด ์ฆ๋น„ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ์— ์ œ๊ฐ€ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ˆ˜๋งŽ์€ ๋ฐฉ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜ ์ผ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

1. AWS EC2 ์ƒ์„ฑ

AWS ๋กœ๊ทธ์ธ ํ›„ ์ž์‹ ์˜ ๊ณ„์ • ์™ผํŽธ์— ์›ํ•˜๋Š” ์ง€์—ญ์„ ์„ค์ •ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

EC2๋ž€ ๊ฐ„๋‹จํžˆ ๋งํ•˜์—ฌ AWS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” (๋ˆ์€ ์ง€๋ถˆํ•ด์•ผํ•จ) ์•„๋ฌด๊ฒƒ๋„ ๊น”๋ ค ์žˆ์ง€ ์•Š์€ ์ปดํ“จํ„ฐ ํ•œ๋Œ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ec2๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ec2๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด ์ธ์Šคํ„ด์Šค ์‹œ์ž‘ ๋ฒ„ํŠผ์ด ์žˆ์œผ๋ฉฐ, ์ธ์Šคํ„ด์Šค ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ค๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์„ ์ง€์–ด์งˆ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณธ์ธ์ด ์›ํ•˜๋Š” ์ด๋ฆ„์„ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๊ทธํ›„ ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•  OS๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” Ubuntu๋ฅผ ์‚ฌ์šฉ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์„ ํƒํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, nano > micro > small > ๋“ฑ๋“ฑ ์ˆœ์œผ๋กœ RAM ์˜ ์šฉ๋Ÿ‰์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉฐ, RAM ์šฉ๋Ÿ‰์ด ํด์ˆ˜๋ก ๋น„์šฉ์ด ๋น„์‹ธ ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

EC2๋ฅผ ์ƒ์„ฑํ• ๋•Œ ํ‚คํŽ˜์–ด๋Š” ์ค‘์š”ํ•˜๋ฉฐ, EC2๋ฅผ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์—ด์‡ ๋ผ๊ณ  ์ƒ๊ฐ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ ํ‚คํŽ˜์–ด๊ฐ€ ์—†๋‹ค๋ฉด, ์ƒˆ ํ‚ค ํŽ˜์–ด ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ‚คํŽ˜์–ด๋ฅผ ์ƒ์„ฑ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.pem ํ˜•์‹์œผ๋กœ ํ‚ค ํŽ˜์–ด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์œผ๋ฉฐ, ์ƒ์„ฑ๋œ ํ‚คํŽ˜์–ด๋Š” ์ž˜ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ๊ทธ๋ฃน์„ ์„ค์ •ํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด์— ๋งŒ๋“ค์–ด ๋†“์€ ๋ณด์•ˆ ๊ทธ๋ฃน์ด ์—†๋‹ค๋ฉด, ๋ณด์•ˆ ๊ทธ๋ฃน ์ƒ์„ฑ์„ ์ฒดํฌ ํ›„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ๊ทธ๋ฃน์ด๋ž€ ์–ด๋А PORT ๋ฒˆํ˜ธ๋ฅผ ์ ‘์†์„ ํ—ˆ๋ฝ ํ•  ๊ฒƒ ์ธ์ง€ ์ง€์ •ํ•˜๋Š” ๊ทธ๋ฃน ์ž…๋‹ˆ๋‹ค.

2. ํƒ„๋ ฅ์  IP ์„ค์ •, ๊ฐœ๋…

ํƒ„๋ ฅ์  IP ๋ž€ ?

EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ๋ถ€ํŒ…์‹œ, ํผ๋ธ”๋ฆญ IP๊ฐ€ ๊ณ„์† ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ์„ ํƒ„๋ ฅ์  IP๋ฅผ ํ†ตํ•ด ๊ณ ์ •์ ์ธ IP์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ ๋ฉ”๋‰ด๋ฐ”์˜ ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณด์•ˆ -> ํƒ„๋ ฅ์  IP๋ฅผ ํด๋ฆญ ํ•ฉ๋‹ˆ๋‹ค.

ํƒ„๋ ฅ์  IP ์ฃผ์†Œ ํ• ๋‹น ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ค๋‹ˆ๋‹ค.

๋งŒ๋“ค์—ˆ๋˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์—ฐ๊ฒฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ๊ฒŒ ๋˜๋ฉด ๋งŒ๋“ค์—ˆ๋˜ EC2 ์ธ์Šคํ„ด์Šค์— ํƒ„๋ ฅ์  IP๊ฐ€ ๋ถ€์—ฌ ๋œ ๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. I AM ์„ค์ •, ๊ฐœ๋…

I AM ์ด๋ž€ ?

ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜, ์„œ๋น„์Šค์—๋งŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์—ฌ ์ ‘๊ทผ์„ ์ œ์–ด ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(Spring Security ์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋А๋‚Œ)

I AM์„ ํด๋ฆญํ•˜์—ฌ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

์—ญํ•  ํƒญ์„ ํด๋ฆญํ•˜์—ฌ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

์—ญํ•  ์ƒ์„ฑ ํƒญ์„ ํด๋ฆญํ•˜์—ฌ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

์‚ฌ์ง„๊ณผ ๊ฐ™์ด AWS ์„œ๋น„์Šค์™€ EC2 ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•˜์—ฌ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด ๊ฐ‘๋‹ˆ๋‹ค.

S3 ๋ฒ„ํ‚ท์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

ํŽธํ•œ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๊ณ  I AM ์„ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค EC2์— I AM์„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๋งŒ๋“ค์—ˆ๋˜ I AM ์—ญํ• ์„ ์„ค์ •ํ•œ ๋’ค I AM ์—ญํ•  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ˆŒ๋Ÿฌ ๋ถ€์—ฌ ํ•ฉ๋‹ˆ๋‹ค.

4. SSH ์„œ๋ฒ„ ์ ‘์†

ssh ๋ž€ ?

์‚ฌ์šฉ์ž (์šฐ๋ฆฌ)๊ฐ€ ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ์ž…๋‹ˆ๋‹ค.
(๋‹ค์–‘ํ•œ Tool๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, Git Bash ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘์†ํ•  ์˜ˆ์ •)

๋ฐฉ๊ธˆ ๋งŒ๋“ค์—ˆ๋˜ Ec2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•˜์—ฌ ์—ฐ๊ฒฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์ด๋™ ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„ค์น˜๋œ Git Bash ๋ฅผ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค. (Git Bash ์„ค์น˜๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์„ ์˜ˆ์ •)

๊ทธํ›„
์˜ˆ : ssh ~ ์˜ ํ”„๋กœํ† ์ฝœ์„ ๋ณต์‚ฌํ•˜์—ฌ Git Bash์— ๋ถ™์—ฌ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Ubuntu ์„œ๋ฒ„์— ์ ‘์† ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Ec2 ์ธ์Šคํ„ด์Šค์— Jenkins ์„ค์น˜ ํ•˜๊ธฐ

์กฐ๊ธˆ ์ „์— ssh ํ”„๋กœํ† ์ฝœ๋กœ ์ ‘์†ํ•œ Ubuntu ์„œ๋ฒ„์— ์ ‘์† ํ›„

sudo apt-get update
sudo apt-get upgrade -y

๋‘๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ update ํ•ด์ค๋‹ˆ๋‹ค.

์šฐ๋ถ„ํˆฌ์— ๋„์ปค ์„ค์น˜

์šฐ๋ถ„ํˆฌ์— Docker ๋ฅผ ์„ค์น˜ํ•˜๋Š” ์ด์œ  ?

๋ฐฐํฌ์˜ ์šฉ์ด์„ฑ๊ณผ, ํ™˜๊ฒฝ ์„ค์ •์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ ํ• ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ๋‘๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker ๋ฅผ ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo apt-get update
sudo apt-get install docker.io

์„ค์น˜๊ฐ€ ๋๋‚œ ํ›„ docker --version ์„ ํ†ตํ•ด ์„ค์น˜๋œ ๋„์ปค์˜ ๋ฒ„์ „์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ช…๋ น์–ด ์•ž์— sudo๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„ ๋ช…๋ น์–ด๋ฅผ ์ธ์‹์„ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo usermod -aG docker ubuntu ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ
Docker ์„œ๋ฒ„์—์„œ sudo ๊ถŒํ•œ์„ ์ƒ๋žตํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ›„ Ubuntu ์„œ๋ฒ„๋ฅผ ํ•œ๋ฒˆ exit ํ•˜๊ณ  ๋‹ค์‹œ ๋“ค์–ด์™€์•ผ ๋จ)

์šฐ๋ถ„ํˆฌ ์„œ๋ฒ„์˜ ๋„์ปค์— Jenkins ์„ค์น˜ ํ•˜๊ธฐ

์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Jenkins ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
docker pull jenkins/jenkins:lts

์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ํ›„ Jenkins๋ฅผ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค.
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

์ด๋•Œ EC2 ์ธ์Šคํ„ด์Šค์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ 8080 ํฌํŠธ๋ฅผ ์—ด์–ด ๋†”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ๋“ค์—ˆ๋˜ ์ธ์Šคํ„ด์Šค์˜ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ -> ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ„

๋งจ ์•„๋ž˜์˜ ๊ทœ์น™ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ๊ทœ์น™์„ ํŽธ์ง‘ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๊ณ  ์ €์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

AWS EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ํƒ„๋ ฅ์  IP ์„ค์ •, I AM ์„ค์ •, Ubuntu ์„œ๋ฒ„์˜ ๋„์ปค์— Jenkins ์„ค์น˜๋ฅผ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ๋ธ”๋กœ๊ทธ์—์„œ๋Š” Jenkins์— ์ ‘์†ํ•˜์—ฌ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์„ ๋‹ค๋ฃฐ ์˜ˆ์ • ์ž…๋‹ˆ๋‹ค.

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