Study/Java

[TIL] ๋ฐฐํฌ ์ž๋™ํ™”

hong- 2022. 8. 8. 16:51

๐Ÿ™Œ๐Ÿป ๋ฐฐํฌ ์ž๋™ํ™” : Automated Deployment

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

 ๐Ÿ’ก ๋ฐฐํฌ ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  ?

   - ์ˆ˜๋™์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋จ

   - ํœด๋จผ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ (ํœด๋จผ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ)

     * ํœด๋จผ ์—๋Ÿฌ : Human Error

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

      - ๊ทธ ์ „์˜ ๋ฐฐํฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ณผ์ •์„ ์ƒ๋žตํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ


๐Ÿ“ ํŒŒ์ดํ”„ ๋ผ์ธ : Pipeline


๐Ÿ“ AWS ๊ฐœ๋ฐœ์ž ๋„๊ตฌ

  * AWS์—๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์„ธ์…˜์ด ์กด์žฌ → ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๊ฐ€๋Šฅ

  โ‘  CodeCommit

   - Source ๋‹จ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ CodeCommit ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•จ

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

   - Github๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ CodeCommit์€ ๋ณด์•ˆ์—์„œ์˜ ๊ฐ•์ ์„ ๊ฐ€์ง

      ( but ๊ณผ๊ธˆ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ )

  โ‘ก CodeBuild

   - Build ๋‹จ๊ณ„์—์„œ๋Š” CodeBuild์„œ๋น„์Šค ์ด์šฉ

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

  โ‘ข CodeDeploy

   - Deploy ๋‹จ๊ณ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ

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

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

  โ‘ฃ CodePipeline

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


๐Ÿ“ AWS Pipeline์„ ํ†ตํ•œ ๋ฐฐํฌ ์ž๋™ํ™”

 ๐Ÿ”ธ EC2 ์ธ์Šคํ„ด์Šค์— ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ 

  : ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๋‹จ๊ณ„์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž˜ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด

[์ž‘์—…] - [์ธ์Šคํ„ด์Šค ์„ค์ •] - [ํƒœ๊ทธ๊ด€๋ฆฌ] - [ํƒœ๊ทธ์ถ”๊ฐ€] - ํƒœ๊ทธ์ด๋ฆ„ ์ž์œ ๋กญ๊ฒŒ ์„ค์ • - [์ €์žฅ]

๐Ÿ”ธ EC2 ์ธ์Šคํ„ด์Šค์— ์—ญํ•  ๋ถ€์—ฌ (IAM ์„œ๋น„์Šค์ด์šฉ)

 : IAM ์—ญํ• ์€ AWS์˜ ๊ฐœ์ฒด๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

    → EC2 ์ธ์Šคํ„ด์Šค์— ์—ญํ• ์„ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ๋‹ค๋ฅธ AWS ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง

  * ์—ญํ•  ์ƒ์„ฑ *

์ธ์Šคํ„ด์Šค ์„ ํƒ - [์ž‘์—…] - [๋ณด์•ˆ] - [IAM ์—ญํ•  ์ˆ˜์ •] - [์ƒˆ IAM ์—ญํ•  ์ƒ์„ฑ] - [์—ญํ• ๋งŒ๋“ค๊ธฐ] - [AWS์„œ๋น„์Šค] - [EC2] - [๋‹ค์Œ: ๊ถŒํ•œ]
  - [ S3๊ฒ€์ƒ‰ - AmazonS3FullAccess ์„ ํƒ ] 
  - [ EC2Role ๊ฒ€์ƒ‰ - AmazonEC2RoleforAWSCodeDeploy ์„ ํƒ ]
  - [ CodeDeploy ๊ฒ€์ƒ‰ - AWSCodeDeployRole ์„ ํƒ ]
  - [ SSM ๊ฒ€์ƒ‰ - AmazonSSMFullAccess ์„ ํƒ ] 
  - [๋‹ค์Œ: ํƒœ๊ทธ] - ํ‚ค์— Name์„, ๊ฐ’์— EC2forCodeDeploy๋ฅผ ์ž…๋ ฅ - [๋‹ค์Œ: ๊ฒ€ํ† ] - ์—ญํ•  ์ด๋ฆ„ ์ž…๋ ฅ ํ›„ - [์—ญํ•  ๋งŒ๋“ค๊ธฐ]

  * ์—ญํ•  ๋ถ€์—ฌ *

์ƒ์„ฑํ•œ ์—ญํ•  ํด๋ฆญ - [์‹ ๋ขฐ๊ด€๊ณ„] - [์‹ ๋ขฐ๊ด€๊ณ„ ํŽธ์ง‘] 
- Service ๊ฐ’์— ์‹ ๋ขฐ ์‚ฌ์ดํŠธ ๋“ฑ์„ ๋Œ€๊ด„ํ˜ธ๋กœ ์ถ”๊ฐ€ํ•ด์คŒ - [์‹ ๋ขฐ ์ •์ฑ… ์—…๋ฐ์ดํŠธ]
 - [์ž‘์—…] - [๋ณด์•ˆ] - [IAM ์—ญํ•  ์ˆ˜์ •] - IAM ์—ญํ•  ์„ ํƒ - [์ €์žฅ]
 
๐Ÿ’ก ์‹ ๋ขฐ๊ด€๊ณ„
 : ํ•ด๋‹น ์—ญํ• ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋‚˜ ์‚ฌ์šฉ์ž๋ฅผ ๋ช…์‹œํ•˜๋Š” ๋ถ€๋ถ„

 

๐Ÿ‘‰๐Ÿป  EC2๋Š” S3, CodeDeploy์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ


  * ๋ณด์•ˆ ๊ทธ๋ฃน ํ™•์ธ *

 EC2 ๋Œ€์‹œ๋ณด๋“œ - [๋ณด์•ˆ ๊ทธ๋ฃน] - [๋ณด์•ˆ ํƒญ] - [๋ณด์•ˆ ๊ทธ๋ฃน] 
  - ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— 8080๊ณผ 443 ํฌํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ - [์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘]
  - TCP : 8080 : ์–ด๋””์„œ๋‚˜ / HTTPS : 443 : ์–ด๋””์„œ๋‚˜ - [๊ทœ์น™ ์ €์žฅ]



 ๐Ÿ’ก 8080 ํฌํŠธ
  : ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ํ•„์š”

 ๐Ÿ’ก 443 ํฌํŠธ
  : CodeDeploy-Agent์˜ ์ •์ƒ์ ์ธ ์ž‘๋™์„ ์œ„ํ•ด ํ•„์š”

๐Ÿ”น ํŒŒ์ดํ”„ ๋ผ์ธ ๊ตฌ์ถ•

 - ๋ถ€์—ฌ๋ฐ›์€ IAM User ๊ถŒํ•œ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„ ๋ผ์ธ ๊ตฌ์ถ•

  * EC2 ์ธ์Šคํ„ด์Šค ์—ญํ•  (IAM Role) ํ™•์ธ *

  - ์ธ์Šคํ„ด์Šค ์ด๋ฆ„ : be-pair-63 (ํƒœ๊ทธ์˜ ๊ฐ’๊ณผ ๋™์ผํ•จ)

  - ํƒœ๊ทธ ๊ฐ’ : {"Name" : "be-pair-63"}

  - IAM ์—ญํ•  : BE_EC2RoleForSSM 

     → EC2 ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” IAM ์—ญํ• 

  - ๋ฐœ๊ธ‰๋ฐ›์€ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ณด์•ˆ ๊ทธ๋ฃน ํด๋ฆญ

  ๐Ÿ”ธ ๋กœ์ปฌ ํ™˜๊ฒฝ ํŒŒ์ผ ์„ค์ •

  * appspec.yml ํŒŒ์ผ ์ž‘์„ฑ *

  - ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๋„์™€์ฃผ๋Š” CodeDeploy-Agent๊ฐ€ ์ธ์‹ํ•˜๋Š” ํŒŒ์ผ

  * buildspec.yml ํŒŒ์ผ ์ž‘์„ฑ *

  - ๋ฐฐํฌ ์ž๋™ํ™”์—์„œ ๋นŒ๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” CodeBuild-Agent๊ฐ€ ์ธ์‹ํ•˜๋Š” ํŒŒ์ผ

  * script ๋””๋ ‰ํ† ๋ฆฌ ์ž‘์„ฑ *

  โ‘  initialize.sh โ‘ก server_clear.sh โ‘ข server_start.sh โ‘ฃ server_stop.sh

  - ๊ฐ ํŒŒ์ผ์€ appspec.yml ํŒŒ์ผ์ด ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐํฌ ์ˆ˜๋ช… ์ฃผ๊ธฐ์— ๋”ฐ๋ผ์„œ ์‹คํ–‰๋  ์˜ˆ์ •

  ๐Ÿ”ธ CodeDeploy ์„ธํŒ…

  * ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ *

AWS CodeDeploy ๋Œ€์‹œ๋ณด๋“œ๋กœ ์ด๋™ - [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜] - [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ]
 - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„ ์ž…๋ ฅ - ์ปดํ“จํŒ… ํ”Œ๋žซํผ : EC2/์˜จํ”„๋ ˆ๋ฏธ์Šค ์„ ํƒ - [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ]

  * ๋ฐฐํฌ ๊ทธ๋ฃน ์ƒ์„ฑ *

[๊ฐœ๋ฐœ์ž๋„๊ตฌ] - [CodeDeploy] - [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜] - [๋ฐฐํฌ๊ทธ๋ฃน] - [๋ฐฐํฌ๊ทธ๋ฃน ์ƒ์„ฑ]
 - ๋ฐฐํฌ ๊ทธ๋ฃน ์ž…๋ ฅ - ์„œ๋น„์Šค ์—ญํ•  : EC2 ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์—ญํ•  ์„ ํƒ

  * ํ™˜๊ฒฝ ๊ตฌ์„ฑ *

[ํ™˜๊ฒฝ ๊ตฌ์„ฑ] - Amazon EC2 ์ธ์Šคํ„ด์Šค ์„ ํƒ
[ํƒœ๊ทธ] - Nameํƒœ๊ทธ ํ‚ค์™€ ๊ฐ’ ์„ ํƒ
 - ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ™œ์„ฑํ™” ์ฒดํฌ ํ•ด์ œ - [๋ฐฐํฌ๊ทธ๋ฃน ์ƒ์„ฑ]

  ๐Ÿ”ธ AWS Code Pipeline์œผ๋กœ ์„œ๋ฒ„ ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ด ๊ตฌ์ถ•

  * ์†Œ์Šค ์Šคํ…Œ์ด์ง€ *

[๊ฐœ๋ฐœ์ž๋„๊ตฌ] - [CodePipeline] - [ํŒŒ์ดํ”„๋ผ์ธ] - [ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ]
 - ์ด๋ฆ„ ์„ค์ • - ์†Œ์Šค ์Šคํ…Œ์ด์ง€ : Github2 - Github ์—ฐ๊ฒฐ - ์ƒˆ ์•ฑ ์„ค์น˜ - ์ž์‹ ์˜ github ๊ณ„์ • ํด๋ฆญ
 - Only select repositories ์„ ํƒ ํ›„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ ํƒ - [Save] - [์—ฐ๊ฒฐ]
 
 
๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์„ ์ • - ๋ธŒ๋žœ์น˜ ์„ ์ • - CodePipeline ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

  * ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€ *

๋นŒ๋“œ ๊ณต๊ธ‰์ž : AWS CodeBuild 
 - ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ - ์ด๋ฆ„ ์ž…๋ ฅ
 - OS : Amazon Linux 2 
 - Runtime : Standard
 - image : aws/codebuild/amazonlinux2-x86_64-standard:3.0
 - Buildspec : DeployServer/buildspec.yml

  * ๋ฐฐํฌ ์Šคํ…Œ์ด์ง€ *

๋ฐฐํฌ ๊ณต๊ธ‰์ž : AWS CodeDeploy
 - region : ์„œ์šธ
 - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„ ์ž…๋ ฅ
 - ๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ„ ์ž…๋ ฅ