๐ŸŒˆ [Section4] 12. [Cloud] ๋ฐฐํฌ ์ž๋™ํ™”

ํ˜„์ฃผยท2022๋…„ 12์›” 7์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
66/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ๋ฐฐํฌ ์ž๋™ํ™”
  • AWS Pipeline์„ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”
  • Github Actions๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

โœ๏ธ ๋ฐฐํฌ ์ž๋™ํ™”

  • ํ•œ๋ฒˆ์˜ ํด๋ฆญ or ๋ช…๋ น์–ด ์ž…๋ ฅ์„ ํ†ตํ•ด ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ

  • ์‹œ๊ฐ„ ์ ˆ์•ฝ

  • ํœด๋จผ ์—๋Ÿฌ(Human Error) ๋ฐฉ์ง€

    โœ”๏ธ ํœด๋จผ ์—๋Ÿฌ (Human Error)

    • ์‚ฌ๋žŒ์ด ์ˆ˜๋™์ ์œผ๋กœ ๋ฐฐํฌ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋Š” ์ค‘์— ์ƒ๊ธฐ๋Š” ์‹ค์ˆ˜๋“ค

โœ” ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ

โœ”๏ธ ํŒŒ์ดํ”„๋ผ์ธ (Pipeline)

  • ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ด€๋ฆฌ๋ถ€ํ„ฐ ์‹ค์ œ ์„œ๋น„์Šค๋กœ์˜ ๋ฐฐํฌ ๊ณผ์ •์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์กฐ
  • ๊ฐ ๋ฐฐํฌ ๋‹จ๊ณ„๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋จ

1. Source ๋‹จ๊ณ„

  • ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ,
    ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰

2. Build ๋‹จ๊ณ„

  • Source ๋‹จ๊ณ„์—์„œ ์ „๋‹ฌ๋ฐ›์€ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธํ•˜์—ฌ ๊ฐ€๊ณต

  • Build ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰

3. Deploy ๋‹จ๊ณ„

  • Build ๋‹จ๊ณ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹ค์ œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰

โ— ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹จ๊ณ„๋Š” ์ƒํ™ฉ๊ณผ ํ•„์š”์— ๋”ฐ๋ผ ๋” ์„ธ๋ถ„ํ™”๋˜๊ฑฐ๋‚˜ ๊ฐ„์†Œํ™”๋  ์ˆ˜ ์žˆ์Œ !!
( ์œ„์˜ ๋‹จ๊ณ„๊ฐ€ ๋ฌด์กฐ๊ฑด์ ์ธ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹˜ )


โœ๏ธ AWS์˜ ๋ฐฐํฌ ์ž๋™ํ™” ๊ด€๋ จ ์„œ๋น„์Šค

โžœ AWS์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์„น์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๊ฐ€๋Šฅ

โœ”๏ธ CodeCommit

  • Source ๋‹จ๊ณ„ ๊ตฌ์„ฑํ•  ๋•Œ ์ด์šฉ

  • GitHub๊ณผ ์œ ์‚ฌํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ

    ๐Ÿ’ก CodeCommit vs GitHub
    ( ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ์šฐ์›”ํ•˜๋‹ค๊ธฐ๋ณด๋‹ค, ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ์žฅ๋‹จ์ ์ด ๋‹ค๋ฆ„ )
    โ €
    โœ… CodeCommit ์„œ๋น„์Šค

    • ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์— ๊ฐ•์ 
      โžœ ์†Œ์Šค ์ฝ”๋“œ์˜ ์œ ์ถœ์ด ํฌ๊ฒŒ ์ž‘์šฉํ•˜๋Š” ๊ธฐ์—…์—์„œ๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์š”์†Œ
      โ €
    • But, ์‚ฌ์šฉ ์‹œ ๊ณผ๊ธˆ ๊ฐ€๋Šฅ์„ฑ ๊ณ ๋ คํ•ด์•ผํ•จ
      ( ํ”„๋ฆฌํ‹ฐ์–ด ํ•œ๊ณ„ ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉํ•  ์‹œ ์‚ฌ์šฉ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋ ์ˆ˜๋„ ์žˆ์Œ )

    โœ… GitHubโ €

    • CodeCommit ์„œ๋น„์Šค์˜ ๊ณผ๊ธˆ ๊ฐ€๋Šฅ์„ฑ์˜ ์ด์œ ๋กœ,
      ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋‚˜ ๊ฐ€๋ณ๊ฒŒ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” GitHub์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ 

โœ”๏ธ CodeBuild

  • ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์ž‘์—…๋“ค์„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅ
    Ex. ์œ ๋‹› ํ…Œ์ŠคํŠธ, ์ปดํŒŒ์ผ, ๋นŒ๋“œ ๋“ฑ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ buildspec.yml ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์ž‘์—… ์ˆ˜ํ–‰
    ( ํ•œ ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ์— ํ•˜๋‚˜์˜ buildspec๋งŒ ์ง€์ • ๊ฐ€๋Šฅ )
    CodeBuild ๋นŒ๋“œ ์‚ฌ์–‘ ์ฐธ์กฐ

๐Ÿ’ก CodeBuild Phase ( buildspec.yml )
1. install
โžœ ๋Ÿฐํƒ€์ž„ ์„ค์น˜
Ex. Java, node.js ๋“ฑ
โ €
2. pre_build
โžœ ์ข…์†์„ฑ ์„ค์น˜ / ํ…Œ์ŠคํŠธ ์ง„ํ–‰
( ์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ์ƒ๋žตํ•จ )
โ €
3. build
โžœ ์‹ค์งˆ์ ์ธ ๋นŒ๋“œ ์ง„ํ–‰
Ex. ./gradlew build
โ €
4. post_build
โžœ ๋นŒ๋“œ ํ›„, ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ง„ํ–‰

โœ”๏ธ CodeDeploy

  • Deploy ๋‹จ๊ณ„ ๊ตฌ์„ฑํ•  ๋•Œ ์ด์šฉ

  • ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „๋‹ฌ ๊ฐ€๋Šฅ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ appspec.yml ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰
    CodeDeploy AppSpec ํŒŒ์ผ ์ฐธ์กฐ

  • S3 ์„œ๋น„์Šค์˜ S3 ๋ฒ„ํ‚ท์„ ํ†ตํ•ด ์—…๋กœ๋“œ๋œ ์ •์  ์›น ์‚ฌ์ดํŠธ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „๋‹ฌ / ๋ฐ˜์˜ ๊ฐ€๋Šฅ

๐Ÿ’ก CodeDeploy Phase ( appspec.yml )
( ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์šฉ X )
โ €
1. Application Stop
โžœ (๊ธฐ์กด์— ์‹คํ–‰์ค‘์ธ) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ
โ €
2. Download Bundle
โžœ ์ƒˆ ๋ฒ„์ „์„ ์ธ์Šคํ„ด์Šค๋กœ ๊ฐ€์ ธ์˜ด
โ €
3. Before Install
โžœ ๊ธฐ์กด์˜ ๋นŒ๋“œ ๋‚ด์—ญ ์‚ญ์ œ
โ €
4. Install
โžœ ์ƒˆ ๋ฒ„์ „ ์••์ถ• ํ•ด์ œ ํ›„, ํŒŒ์ผ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋ณต์‚ฌ
โ €
5. After Install
โžœ ์‹คํ–‰์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ์„ค์น˜ ( ์šฐ๋ฆฌ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ )
Ex. npm / pm2 ๋“ฑ
โ €
6. Application Start
โžœ nohup์œผ๋กœ ๋นŒ๋“œํŒŒ์ผ ์‹คํ–‰
โ €
7. Validate Service
โžœ ๋ฐฐํฌ๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ • ( ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ X )

โœ”๏ธ nohup

  • ๋ฆฌ๋ˆ…์Šค, ์œ ๋‹‰์Šค์—์„œ ์…ธ ์Šคํฌ๋ฆฝํŠธํŒŒ์ผ (*.sh)์„ ๋ฐ๋ชฌ ํ˜•ํƒœ๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ
  • ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์ด ๋Š๊ฒจ๋„ ์‹คํ–‰์„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋™์ž‘ํ•˜๋„๋ก ํ•จ

โœ”๏ธ CodePipeline

  • ๊ฐ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์ด์šฉ

    โš ๏ธ AWS ํ”„๋ฆฌํ‹ฐ์–ด ๊ณ„์ • ์‚ฌ์šฉ ์‹œ, ํ•œ ๊ณ„์ •์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•˜๋ฉด ์ถ”๊ฐ€ ์š”๊ธˆ์ด ๋ถ€์—ฌ๋  ์ˆ˜ ์žˆ์Œ !!


โœ๏ธ AWS Pipeline์„ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

( AWS์— ๋ชจ๋“  ๊ฒƒ์„ ๋งก๊น€ )

  1. CodePipeline์„ ์ด์šฉํ•ด์„œ ๊ฐ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

  2. Source ๋‹จ๊ณ„
    โžœ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—ฐ๊ฒฐ
    ( ์ฝ”๋“œ๋ฅผ ์ˆ˜์ • ํ›„ pushํ•˜๋ฉด 3๋ฒˆ build ์ž๋™ ์‹คํ–‰ )

  3. Build ๋‹จ๊ณ„
    โžœ CodeBuild ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋นŒ๋“œ ํ›„, EC2 ์ธ์Šคํ„ด์Šค๋กœ ๋นŒ๋“œ๋œ ํŒŒ์ผ ์ „๋‹ฌ
    ( ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€์ธ S3 ๋ฒ„ํ‚ท์— ์ €์žฅ๋จ )

  4. Deploy ๋‹จ๊ณ„
    โžœ CodeDeploy ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ EC2 ์ธ์Šคํ„ด์Šค์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜
    ( ๊ฐ์ž์—๊ฒŒ ๋ฐฐ์ •๋œ AWS IAM ๊ณ„์ •์„ key๋กœ ์‚ฌ์šฉ )

โญ ์ž๋™ํ™” ๋ฐฉ์‹ ์ˆœ์„œ

  • ๋‚ด ๋ ˆํฌ์— push โžœ AWS ๋ณ€๊ฒฝ ๊ฐ์ง€ โžœ pull โžœ build โžœ ec2 delivery โžœ sh๋กœ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ โžœ ec2์—์„œ ์„œ๋ฒ„ ์‹คํ–‰

๐Ÿ’ก ์˜ฌ๋ผ๊ฐ€๋ฉด ์•ˆ๋˜๋Š” ์ •๋ณด๋“ค์€ ํŒŒ๋ผ๋ฏธํ„ฐ ์Šคํ† ์–ด์—์„œ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๊ณ ,
์ฝ”๋“œ ๋‚ด์˜ bootstrap.yml ํŒŒ์ผ์— ์–ด๋– ํ•œ ์ด๋ฆ„ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฝ์–ด์˜ฌ์ง€ ์„ค์ •


๐Ÿ’ก build.gradle ํŒŒ์ผ๋„ ์˜์กด์„ฑ ์„ค์น˜ํ•˜๊ณ  ํด๋ผ์šฐ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์ˆ˜์ •


๐Ÿ’ก be-sprint-deployment/DeployServer ๊ฒฝ๋กœ์— ์ถ”๊ฐ€๋œ ํŒŒ์ผ๋“ค

  • buildspec.yml
    โžœ CodeBuilder๊ฐ€ ์ฝ๋Š” ํŒŒ์ผ ( be-sprint-deployment/DeployServer ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )
    โžœ CodeBuild๊ฐ€ ์ง€์ •ํ•œ ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ค ๋™์ž‘์„ ํ• ์ง€ ๋ช…๋ น
    ( appspec.yml ํŒŒ์ผ์„ ์ฝ๊ฒŒ๋” ๋˜์–ด์žˆ๊ณ , ๊ฐ ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ์œ„์น˜๋„ ์•Œ๋ ค์คŒ )
    โ €โ €
  • appspec.yml
    โžœ CodeDeploy๊ฐ€ ์ฝ๋Š” ํŒŒ์ผ ( be-sprint-deployment/DeployServer/ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )
    โžœ CodeDeploy์—์„œ ์ง€์ •ํ•œ ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ค ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์ง€์ •
    โ €โ €
  • scripts/server_clear.sh
    โžœ ์ด์ „์— ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” build ๋””๋ ‰ํ† ๋ฆฌ ์ œ๊ฑฐํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ( be-sprint-deployment/DeployServer/scripts/ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )
    โ €โ €
  • scripts/server_stop.sh
    โžœ ์ด์ „์— ์‹คํ–‰์ค‘์ด๋˜ Spring Boot ํ”„๋กœ์ ํŠธ ์ข…๋ฃŒํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ( be-sprint-deployment/DeployServer/scripts/ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )
    โ €โ €
  • scripts/initialize.sh
    โžœ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํ–‰ ๊ถŒํ•œ ์ถ”๊ฐ€ํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ( be-sprint-deployment/DeployServer/scripts/ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )
    โ €โ €
  • scripts/server_start.sh
    โžœ DeployServer-0.0.1-SNAPSHOT.jar๋ผ๋Š” ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹คํ–‰ํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ( be-sprint-deployment/DeployServer/scripts/ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ )

โœ๏ธ Github Actions

  • Github์ด ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ

    โœ”๏ธ CI/CD (Continuous Integration / Continous Deployment)
    ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๊ณ„ํš๋ถ€ํ„ฐ ์‹คํ–‰๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ

  • ํŠน์ • ํŒŒ์ผ(.yml)์— ๋”ฐ๋ผ Github Repository์— ํŠน์ • ๋ณ€๋™์‚ฌํ•ญ์„ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์ž‘๋™

  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ Pull Request ๋‚˜ push ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ GitHub ์ž‘์—… ์›Œํฌํ”Œ๋กœ(Workflow) ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

    โœ”๏ธ ์›Œํฌํ”Œ๋กœ (Workflow)

    • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค
    • ๊ฐ ์ž‘์—…์€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰
    • .yml or .yaml ํŒŒ์ผ์— ์˜ํ•ด ๊ตฌ์„ฑ
    • ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
      Ex. ํ…Œ์ŠคํŠธ / ๋ฐฐํฌ ..
      ( ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ๋Š” .github/workflows ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์— ์œ„์น˜ )
  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๊ณต๊ฐœ / ๋น„๊ณต๊ฐœ์— ๋”ฐ๋ผ ์š”๊ธˆ ์ œํ•œ์ด ๋‹ค๋ฆ„

    • ๋น„๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ
      โžœ Github Actions๊ฐ€ ์ž‘๋™ํ•  ๋•Œ์˜ ์šฉ๋Ÿ‰๊ณผ ์‹œ๊ฐ„์ด ์ œํ•œ๋จ

    • ๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ
      โžœ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๊ณต์‹ ๋ฌธ์„œ ์ฐธ๊ณ 
์‚ฌ์šฉ๋ฒ• ์ฐธ๊ณ 

โœ” Github Actions๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ Flow

  1. ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์— ์ฝ”๋“œ ์ˆ˜์ • ํ›„ push

  2. ํ•ด๋‹น ๋ ˆํฌ์˜ Actions ๋ฉ”๋‰ด์—์„œ workflow ์ƒ์„ฑ

  3. Settings - Secrets - Actions ๊ฒฝ๋กœ์— Access Key/Secret Access Key ์ถ”๊ฐ€

    ๐Ÿ’ก Github Actions๊ฐ€ AWS์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ Access Key/Secret Access Key๊ฐ€ ํ•„์š” !!
    ์ด ํ‚ค๋“ค์€ ์ฝ”๋“œ์— ์ง์ ‘ ์ž‘์„ฑ XXX
    ์œˆ๋„์šฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •๊ณผ ๊ฐ™์ด Setting์— ์„ค์ •ํ•ด์ฃผ๊ณ ,
    .yml ์ฝ”๋“œ ๋‚ด์˜ ${{์„ค์ •ํ•ด์ค€ ์ด๋ฆ„}}} ๋ถ€๋ถ„์—์„œ Setting์œผ๋กœ ์„ค์ •ํ•œ ๊ฐ’์„ ์ฝ์–ด์˜ด

  4. Github Actions๊ฐ€ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ์ฝ์„ .yml ํŒŒ์ผ ์ˆ˜์ •

    ๐Ÿ’ก .github/.workflow/ ํ•˜์œ„์— ์žˆ๋Š” yml์ด๋ฉด ๋˜๊ณ , ์ด๋ฆ„์€ ์ƒ๊ด€ X
    [์ฐธ๊ณ ] https://github.com/gradle/gradle-build-action

  5. ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด Github Actions ์ž‘๋™ํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ .yml ํŒŒ์ผ ์ฝ์Œ

  6. .yml ํŒŒ์ผ์— ์žˆ๋Š” ๋™์ž‘๋Œ€๋กœ,
    ํ”„๋กœ์ œํŠธ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ(.jar)์„ S3๋กœ ์ „์†ก / ์ €์žฅ

    ๐Ÿ’ก S3

    • ์ •์  ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋๋˜ ์ €๋ฒˆ ์‹ค์Šต๊ณผ ๋‹ค๋ฅด๊ฒŒ,
      ์••์ถ•๋œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ €์žฅํ•  ์ €์žฅ์†Œ(๋ฒ„ํ‚ท)๋กœ์จ ์‚ฌ์šฉ
  7. .yml ํŒŒ์ผ์— ์žˆ๋Š” ๋™์ž‘๋Œ€๋กœ,
    Github Actions๊ฐ€ AWS์˜ CodeDeploy๋กœ ๋ฐฐํฌ ๋ช…๋ น

  8. CodeDeploy๊ฐ€ S3 ๋ฒ„ํ‚ท์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ(.jar) ๊ฐ€์ ธ์˜ด

    ๐Ÿ’ก CodeDeploy

    • ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•œ appepec.yml ์„ค์ • ํŒŒ์ผ์— ์˜ํ•ด ๋‹จ๊ณ„์— ๋”ฐ๋ผ ํŠน์ • ๋™์ž‘์„ ํ•จ
      โ €
    • Code Deploy๊ฐ€ S3 ๋ฒ„ํ‚ท์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก
      EC2 ์ธ์Šคํ„ด์Šค์— Code Deploy Agent ์„ค์น˜ ํ•„์š”
      ( โ— ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ๋‹ค ๋‹ฌ๋ผ์„œ ๊ณต์‹ ๋ฌธ์„œ ์ฐธ๊ณ  )
  9. AWS CodeDeploy๊ฐ€ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๋ฌผ์„ EC2์— ๋ฐฐํฌ / ์‹คํ–‰

    ๐Ÿ’ก EC2

    • .yml(์„ค์ • ํŒŒ์ผ)๊ณผ .sh(์‰˜ ์Šคํฌ๋ฆฝํŠธ)์— ์˜ํ•ด ๊ฐ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊ทธ๋กœ ์ €์žฅํ•˜๊ณ ,
      CodeDeploy๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€ ๋นŒ๋“œ ํŒŒ์ผ(.jar) ์‹คํ–‰
      โ €โ €
    • ์›ํ™œํ•œ ์ง„ํ–‰์„ ์œ„ํ•ด ์•Œ๋งž์€ Code Deploy Agent์˜ ์„ค์น˜์™€ JDK 11 ๋ฒ„์ „ ์„ค์น˜๊ฐ€ ํ•„์š”

๐Ÿ˜œ ์‹ค์Šต

  • git - be-sprint-deployment

=============================================================

โ˜ƒ๏ธ AWS Pipeline์„ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™” ์‹ค์Šต

์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ํ™˜๊ฒฝ ์„ค์ •์„ ํ•œ ํ›„์— forkํ•œ ๋‚ด ๋ ˆํฌ์— push๋ฅผ ํ•˜๋‹ˆ

์ƒ์„ฑํ•œ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋นŒ๋“œ ๊ณผ์ •์ด ์ž๋™์œผ๋กœ ์ง„ํ–‰๋˜๋ฉด์„œ ๋ฐฐํฌ ํ›„ ์‹คํ–‰๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋˜์–ด์„œ

S3 ์—”๋“œํฌ์ธํŠธ ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด ๋ฐฐํฌ ์ž๋™ํ™” ์‹ค์Šต ์™„๋ฃŒ..!!

( ์‹ค์Šต ๊ณผ์ •์€ ๋‚˜์ค‘์— ์ž‘์„ฑํ•  ์˜ˆ์ • ! )

=============================================================

โ˜ƒ๏ธ Github Actions๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™” ์‹ค์Šต

์œ„์— ์ ์–ด๋†“์€ ์ˆœ์„œ๋Œ€๋กœ ์‹ค์Šต์„ ํ•˜๊ณ  ๋‚ด EC2 ํผ๋ธ”๋ฆญ DNS๋กœ ๋“ค์–ด๊ฐ€๋ดค๋”๋‹ˆ ํŽ˜์ด์ง€ ๋กœ๋“œ ์„ฑ๊ณต !!

( ์•„๋ž˜ ํŽ˜์ด์ง€๊ฐ€ ์˜ค๋ฅ˜๊ฐ™์ด ์ƒ๊ฒผ์ง€๋งŒ ๋‚ด๊ฐ€ ์•„์ง ๋ญ˜ ์•ˆ์ ์–ด์ค˜์„œ ์ €๋ ‡๊ฒŒ ๋œจ๋Š” ๊ฒƒ์ด๋‹ค ใ…Žใ…Ž )

๊ทธ๋ž˜์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์•„๋ž˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ 

๋‹ค์‹œ ๋‚ด ๋ ˆํฌ๋กœ pushํ•œ ํ›„์— ์ž๋™๋ฐฐํฌ ๊ณผ์ •์ด ์ง„ํ–‰๋˜๊ณ  ๋‹ค์‹œ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ

์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜ ๋œฌ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค ใ…Žใ…Žใ…Žใ…Ž

โ— ์ฐธ๊ณ ๋กœ ๋‘˜ ๋‹ค ํผ๋ธ”๋ฆญ DNS ๋’ค์— :8080 ์ ์–ด์ค˜์•ผํ•จ !


๐ŸŒˆ ๋Š๋‚€์ 

์–ด์ œ๋Š” ๊ทธ๋ž˜๋„ ๋ฌด๋‚œ๋ฌด๋‚œ ํ–ˆ๋Š”๋ฐ ๋งˆ์ง€๋ง‰์— ๋กœ๊ทธ์ธ์ด ์•ˆ๋ผ์„œ ์ด ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์Ÿ์•˜๋‹ค.
์›์ธ์€ ๋‚ด๊ฐ€ intellij์—์„œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ž˜๋ชป ์“ด ๊ฒƒ๋„ ์žˆ์—ˆ๊ณ ,
ํŒŒ๋ผ๋ฏธํ„ฐ ์Šคํ† ์–ด์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ password ๊ฐ’์„ ์ž˜๋ชป ์ง€์ •ํ•ด์ฃผ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ๋„ ์žˆ์—ˆ๋‹ค !
๊ฒฐ๊ตญ์€ ํ•ด๊ฒฐํ•ด์„œ ๋‹คํ–‰ ~
๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜์€ ์–ด์ œ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ +๋กœ ์•Œ๊ฒŒ๋˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋‹ค๋ณด๋‹ˆ
์˜ค๋Š˜์€ ๋” ์‰ฌ์› ๊ณ  ์—๋Ÿฌ๋„ ๋” ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค !!

์š”์ฆ˜ ๋Š๋ผ๋Š” ๊ฒŒ
์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๋„ ํ•œ๋ฒˆ์— ์„ฑ๊ณตํ•  ๋•Œ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ๋ญ”๊ฐ€ ๋‚˜์˜์ง„ ์•Š๋‹ค!
๋ฌผ๋ก  ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ๊ฒฐ๊ตญ ๊ณ ์ƒํ•ด์„œ ์ฐพ์•˜๋Š”๋ฐ ์ •๋ง ์ž‘์€ ์‹ค์ˆ˜์ด๋ฉด ํ—ˆ๋ฌดํ•˜์ง€๋งŒ
๊ทธ๋ž˜๋„ ๋ฐ”๋กœ ์„ฑ๊ณตํ•œ ์‚ฌ๋žŒ๋“ค๋ณด๋‹ค๋Š” ๋‹ค์Œ์— ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์„ ๋•Œ ๋” ์ž˜ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„ํ…Œ๋‹ˆ๊นŒ !
!

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