ํ๋ฒ์ ํด๋ฆญ or ๋ช ๋ น์ด ์ ๋ ฅ์ ํตํด ์ ์ฒด ๋ฐฐํฌ ๊ณผ์ ์ ์๋์ผ๋ก ์งํํ๋ ๊ฒ
์๊ฐ ์ ์ฝ
ํด๋จผ ์๋ฌ(Human Error) ๋ฐฉ์ง
โ๏ธ ํด๋จผ ์๋ฌ (Human Error)
- ์ฌ๋์ด ์๋์ ์ผ๋ก ๋ฐฐํฌ ๊ณผ์ ์ ์งํํ๋ ์ค์ ์๊ธฐ๋ ์ค์๋ค
โ๏ธ ํ์ดํ๋ผ์ธ (Pipeline)
- ์์ค ์ฝ๋์ ๊ด๋ฆฌ๋ถํฐ ์ค์ ์๋น์ค๋ก์ ๋ฐฐํฌ ๊ณผ์ ์ ์ฐ๊ฒฐํ๋ ๊ตฌ์กฐ
- ๊ฐ ๋ฐฐํฌ ๋จ๊ณ๋ ํ์ดํ๋ผ์ธ ์์์ ์์ฐจ์ ์ผ๋ก ์คํ๋จ
1. Source ๋จ๊ณ
2. Build ๋จ๊ณ
Source ๋จ๊ณ์์ ์ ๋ฌ๋ฐ์ ์ฝ๋๋ฅผ ์ปดํ์ผ, ๋น๋, ํ ์คํธํ์ฌ ๊ฐ๊ณต
Build ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ค์ ๋จ๊ณ๋ก ์ ๋ฌํ๋ ์์ ์ํ
3. Deploy ๋จ๊ณ
โ ํ์ดํ๋ผ์ธ์ ๋จ๊ณ๋ ์ํฉ๊ณผ ํ์์ ๋ฐ๋ผ ๋ ์ธ๋ถํ๋๊ฑฐ๋ ๊ฐ์ํ๋ ์ ์์ !!
( ์์ ๋จ๊ณ๊ฐ ๋ฌด์กฐ๊ฑด์ ์ธ ๋จ๊ณ๊ฐ ์๋ )
โ AWS์ ๊ฐ๋ฐ์ ๋๊ตฌ ์น์ ์์ ์ ๊ณตํ๋ ์๋น์ค๋ค์ ํ์ฉํ์ฌ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๊ฐ๋ฅ
Source ๋จ๊ณ ๊ตฌ์ฑํ ๋ ์ด์ฉ
GitHub๊ณผ ์ ์ฌํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ
๐ก CodeCommit vs GitHub
( ์ด๋ค ์๋น์ค๊ฐ ์ฐ์ํ๋ค๊ธฐ๋ณด๋ค, ๊ฐ ์๋น์ค๊ฐ ๊ฐ์ง๋ ์ฅ๋จ์ ์ด ๋ค๋ฆ )
โ
โ CodeCommit ์๋น์ค
- ๋ณด์๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๊ฐ์
โ ์์ค ์ฝ๋์ ์ ์ถ์ด ํฌ๊ฒ ์์ฉํ๋ ๊ธฐ์ ์์๋ ๋งค์ฐ ์ค์ํ ์์
โ - But, ์ฌ์ฉ ์ ๊ณผ๊ธ ๊ฐ๋ฅ์ฑ ๊ณ ๋ คํด์ผํจ
( ํ๋ฆฌํฐ์ด ํ๊ณ ์ด์์ผ๋ก ์ฌ์ฉํ ์ ์ฌ์ฉ ์๊ธ์ด ๋ถ๊ณผ๋ ์๋ ์์ )
โ GitHubโ
- CodeCommit ์๋น์ค์ ๊ณผ๊ธ ๊ฐ๋ฅ์ฑ์ ์ด์ ๋ก,
์ฌ์ด๋ ํ๋ก์ ํธ๋ ๊ฐ๋ณ๊ฒ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ์ ์ฅํด์ผ ํ ๊ฒฝ์ฐ์๋ GitHub์ ์ด์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์
๋น๋ ๋จ๊ณ์์ ํ์์ ์ผ๋ก ์คํ๋์ด์ผ ํ ์์
๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด ์คํ ๊ฐ๋ฅ
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
โ ๋น๋ ํ, ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์งํ
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)์ ๋ฐ๋ชฌ ํํ๋ก ์คํ์ํค๋ ํ๋ก๊ทธ๋จ
- ํฐ๋ฏธ๋ ์ธ์ ์ด ๋๊ฒจ๋ ์คํ์ ๋ฉ์ถ์ง ์๊ณ ๋์ํ๋๋ก ํจ
โ ๏ธ AWS ํ๋ฆฌํฐ์ด ๊ณ์ ์ฌ์ฉ ์, ํ ๊ณ์ ์ ๋ ๊ฐ ์ด์์ ํ์ดํ๋ผ์ธ์ ์์ฑํ๋ฉด ์ถ๊ฐ ์๊ธ์ด ๋ถ์ฌ๋ ์ ์์ !!
( AWS์ ๋ชจ๋ ๊ฒ์ ๋งก๊น )
CodePipeline์ ์ด์ฉํด์ ๊ฐ ๋จ๊ณ๋ฅผ ์ฐ๊ฒฐํ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
Source ๋จ๊ณ
โ ์์ค ์ฝ๋๊ฐ ์ ์ฅ๋ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ ์ฐ๊ฒฐ
( ์ฝ๋๋ฅผ ์์ ํ pushํ๋ฉด 3๋ฒ build ์๋ ์คํ )
Build ๋จ๊ณ
โ CodeBuild ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ๋น๋ ํ, EC2 ์ธ์คํด์ค๋ก ๋น๋๋ ํ์ผ ์ ๋ฌ
( ๋น๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง์ธ S3 ๋ฒํท์ ์ ์ฅ๋จ )
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์ด ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ 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๊ฐ ์๋ํ ๋์ ์ฉ๋๊ณผ ์๊ฐ์ด ์ ํ๋จ
๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ
โ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๊ณต์ ๋ฌธ์ ์ฐธ๊ณ
์ฌ์ฉ๋ฒ ์ฐธ๊ณ
ํ๋ก์ ํธ ๋ ํฌ์ ์ฝ๋ ์์ ํ push
ํด๋น ๋ ํฌ์ Actions ๋ฉ๋ด์์ workflow ์์ฑ
Settings - Secrets - Actions ๊ฒฝ๋ก์ Access Key
/Secret Access Key
์ถ๊ฐ
๐ก Github Actions๊ฐ AWS์ ์ ๊ทผํ๊ธฐ ์ํด์
Access Key
/Secret Access Key
๊ฐ ํ์ !!
์ด ํค๋ค์ ์ฝ๋์ ์ง์ ์์ฑ XXX
์๋์ฐ ํ๊ฒฝ๋ณ์ ์ค์ ๊ณผ ๊ฐ์ด Setting์ ์ค์ ํด์ฃผ๊ณ ,
.yml
์ฝ๋ ๋ด์${{์ค์ ํด์ค ์ด๋ฆ}}}
๋ถ๋ถ์์ Setting์ผ๋ก ์ค์ ํ ๊ฐ์ ์ฝ์ด์ด
Github Actions๊ฐ ๋น๋๋ฅผ ์ํด ์ฝ์ .yml
ํ์ผ ์์
๐ก
.github/.workflow/
ํ์์ ์๋ yml์ด๋ฉด ๋๊ณ , ์ด๋ฆ์ ์๊ด X
[์ฐธ๊ณ ] https://github.com/gradle/gradle-build-action
๋ ํฌ์งํ ๋ฆฌ์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด Github Actions ์๋ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์์ฑํ .yml
ํ์ผ ์ฝ์
.yml
ํ์ผ์ ์๋ ๋์๋๋ก,
ํ๋ก์ ํธ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(.jar
)์ S3๋ก ์ ์ก / ์ ์ฅ
๐ก S3
- ์ ์ ์น ํ์ด์ง๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ ๋ฒ ์ค์ต๊ณผ ๋ค๋ฅด๊ฒ,
์์ถ๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅํ ์ ์ฅ์(๋ฒํท)๋ก์จ ์ฌ์ฉ
.yml
ํ์ผ์ ์๋ ๋์๋๋ก,
Github Actions๊ฐ AWS์ CodeDeploy๋ก ๋ฐฐํฌ ๋ช
๋ น
CodeDeploy๊ฐ S3 ๋ฒํท์ ์ ์ฅ๋์ด ์๋ ํ๋ก์ ํธ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(.jar
) ๊ฐ์ ธ์ด
๐ก CodeDeploy
- ํ๋ก์ ํธ ์ต์๋จ์ ์์นํ
appepec.yml
์ค์ ํ์ผ์ ์ํด ๋จ๊ณ์ ๋ฐ๋ผ ํน์ ๋์์ ํจ
โ - Code Deploy๊ฐ S3 ๋ฒํท์์ EC2 ์ธ์คํด์ค๋ก ํ๋ก์ ํธ๋ฅผ ์ด๋ํ ์ ์๋๋ก
EC2 ์ธ์คํด์ค์ Code Deploy Agent ์ค์น ํ์
( โ ์ค์น ๋ฐฉ๋ฒ์ด ๋ค ๋ฌ๋ผ์ ๊ณต์ ๋ฌธ์ ์ฐธ๊ณ )
AWS CodeDeploy๊ฐ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฌผ์ EC2์ ๋ฐฐํฌ / ์คํ
๐ก EC2
.yml
(์ค์ ํ์ผ)๊ณผ.sh
(์ ์คํฌ๋ฆฝํธ)์ ์ํด ๊ฐ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ๋ก ์ ์ฅํ๊ณ ,
CodeDeploy๋ก ๋ถํฐ ๋ฐ์ ๋น๋ ํ์ผ(.jar
) ์คํ
โ โ - ์ํํ ์งํ์ ์ํด ์๋ง์ Code Deploy Agent์ ์ค์น์ JDK 11 ๋ฒ์ ์ค์น๊ฐ ํ์
=============================================================
์ฌ๋ฌ๊ฐ์ง ํ์ผ ์์ฑ ํ ํ๊ฒฝ ์ค์ ์ ํ ํ์ forkํ ๋ด ๋ ํฌ์ push๋ฅผ ํ๋
์์ฑํ ํ์ดํ๋ผ์ธ์ ๋น๋ ๊ณผ์ ์ด ์๋์ผ๋ก ์งํ๋๋ฉด์ ๋ฐฐํฌ ํ ์คํ๊น์ง ์๋์ผ๋ก ๋์ด์
S3 ์๋ํฌ์ธํธ ์ฃผ์๋ก ๋ค์ด๊ฐ๋ณด๋ฉด ๋ฐฐํฌ ์๋ํ ์ค์ต ์๋ฃ..!!
( ์ค์ต ๊ณผ์ ์ ๋์ค์ ์์ฑํ ์์ ! )
=============================================================
์์ ์ ์ด๋์ ์์๋๋ก ์ค์ต์ ํ๊ณ ๋ด EC2 ํผ๋ธ๋ฆญ DNS๋ก ๋ค์ด๊ฐ๋ดค๋๋ ํ์ด์ง ๋ก๋ ์ฑ๊ณต !!
( ์๋ ํ์ด์ง๊ฐ ์ค๋ฅ๊ฐ์ด ์๊ฒผ์ง๋ง ๋ด๊ฐ ์์ง ๋ญ ์์ ์ด์ค์ ์ ๋ ๊ฒ ๋จ๋ ๊ฒ์ด๋ค ใ
ใ
)
๊ทธ๋์ ํด๋น ํ๋ก์ ํธ์ ๋ฐ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ ์๋ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ๊ณ
๋ค์ ๋ด ๋ ํฌ๋ก pushํ ํ์ ์๋๋ฐฐํฌ ๊ณผ์ ์ด ์งํ๋๊ณ ๋ค์ ํด๋น ์ฃผ์๋ก ๋ค์ด๊ฐ๋ณด๋
์๋์ ๊ฐ์ด ์ ๋ฌ ๊ฒ์ ๋ณผ ์ ์๋ค ใ ใ ใ ใ
โ ์ฐธ๊ณ ๋ก ๋ ๋ค ํผ๋ธ๋ฆญ DNS ๋ค์ :8080 ์ ์ด์ค์ผํจ !
์ด์ ๋ ๊ทธ๋๋ ๋ฌด๋๋ฌด๋ ํ๋๋ฐ ๋ง์ง๋ง์ ๋ก๊ทธ์ธ์ด ์๋ผ์ ์ด ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ ๋ง์ ์๊ฐ์ ์์๋ค.
์์ธ์ ๋ด๊ฐ intellij์์ ํ์ผ์ ์์ ํ์ ๋ ํฌํธ๋ฒํธ๋ฅผ ์๋ชป ์ด ๊ฒ๋ ์์๊ณ ,
ํ๋ผ๋ฏธํฐ ์คํ ์ด์์ ํ๋ผ๋ฏธํฐ์ password ๊ฐ์ ์๋ชป ์ง์ ํด์ฃผ์ด์ ๊ทธ๋ฐ ๊ฒ๋ ์์๋ค !
๊ฒฐ๊ตญ์ ํด๊ฒฐํด์ ๋คํ ~
๊ทธ๋ฆฌ๊ณ ์ค๋์ ์ด์ ์๋ฌ๋ฅผ ๋ง๋์ ์ฌ๋ฌ๊ฐ์ง +๋ก ์๊ฒ๋๋ ๊ฒ๋ค์ด ์์๋ค๋ณด๋
์ค๋์ ๋ ์ฌ์ ๊ณ ์๋ฌ๋ ๋ ๋นจ๋ฆฌ ํด๊ฒฐํ ์ ์์๋ค !!
์์ฆ ๋๋ผ๋ ๊ฒ
์๋ฌ๋ฅผ ๋ง๋๋ ํ๋ฒ์ ์ฑ๊ณตํ ๋๋ณด๋ค ๋ ๋ง์ ๊ฑธ ์ ์ ์์ด์ ๋ญ๊ฐ ๋์์ง ์๋ค!
๋ฌผ๋ก ์์ฒญ ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋ ๊ฒฐ๊ตญ ๊ณ ์ํด์ ์ฐพ์๋๋ฐ ์ ๋ง ์์ ์ค์์ด๋ฉด ํ๋ฌดํ์ง๋ง
๊ทธ๋๋ ๋ฐ๋ก ์ฑ๊ณตํ ์ฌ๋๋ค๋ณด๋ค๋ ๋ค์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฌ์ ๋ ๋ ์ ํด๋ผ ์ ์์ํ
๋๊น !!