ํ ํ๋ก์ ํธ์์ SpringBoot, Docker, AWS EC2๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ณ ์ ํ์๋ค. ๋ก์ปฌ๊ณผ ๊ฐ๋ฐ ์๋ฒ๋ก ๋ถ๋ฆฌํ์ฌ ์ด์ํ ๊ณํ์ด๋ฉฐ, ๋๋ฉ์ธ ์ ์ฉ๊ณผ CI/CD, Swagger๋ ์ถํ ๋์
์์ ์ด๋ค. (ํ๋ก์ ํธ๊ฐ ๋๋ ๋ค์์์ผ ํฌ์คํ
ํ ์ง๋..)
0. ์์คํ ํ๋ฆ๋
์์คํ ํ๋ฆ์ ์์ ์ด๋ฏธ์ง์ ๊ฐ์๋ฐ, Local์์ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ Docker Image๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์๋ฒ์ ๋ฐฐํฌํ ๊ฒ์ด๋ค.
1. Docker ์ค์น & Docker Hub ๊ฐ์
๊ฐ์ OS์ ๋ง๋ ๋์ปค ์ค์น๋ฒ์ ๊ฒ์ํ์ฌ ๋ก์ปฌ์ ์ค์นํ๋ค. Window 10 Education์ ์ด์ฉ ์ค์ด๋ฏ๋ก WSL2๋ฅผ ํ์ฉํ์ฌ ๋ก์ปฌ์ ๋์ปค๋ฅผ ์ค์นํ๋ค. (Docker Desktop ๋์ intellij ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด๋ ๋ฌด๊ดํ๋ค.)
WSL2 ์ค์น๋ ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
https://www.lainyzine.com/ko/article/how-to-install-wsl2-and-use-linux-on-windows-10/
ํ์๋ WSL ๋ฒ์ ์ด 1์ด์์ด์ ๋ฒ์ ์ ๋ฐ์ดํธ๋ง ์งํํ์๋ค.
WSL2 ์ค์น๊ฐ ๋๋ฌ์ผ๋ฉด ์๋์ ๊ณต์ ํํ์ด์ง์์ Window OS ์ ์ฉ ๋์ปค๋ฅผ ๋ค์ด๋ฐ๋๋ค.
https://www.docker.com/products/docker-desktop/
๋์ปค๊ฐ ์ ์ค์น๋์ด์๋์ง ํ์ธ์ cmd์ฐฝ์์ 'wsl -l -v'์ผ๋ก ํ์ธํด๋ณผ ์ ์๋ค.
๋์ปค ํ๋ธ ๊ฐ์ ์ ๊ฐ๋จํ๋ ๋งํฌ๋ง ์ฒจ๋ถํ๊ฒ ๋ค. :) https://hub.docker.com/
์ฐธ๊ณ ๋ก ๋์ปค ํ๋ธ ๊ณ์ ๋ช ์ ๊ธฐ์ตํ๊ณ ์์ด์ผ ํ๋ค. Docker Image ๋ง๋ค ๋ ์ฐ์ด๊ธฐ ๋๋ฌธ!
2. Spring-Boot ํ๋ก์ ํธ ๊ตฌ์ถ ๋ฐ ๋์ปค ์ค์
๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ํด๋น ํ๋ก์ ํธ ๋ฃจํธ์ Dockerfile ํ์ผ์ ์์ฑํ๋ค.
SpringBoot 2.4.2
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํด๋น ํ๋ก์ ํธ์ .jar ํ์ผ์ ๋ง๋ ๋ค.
์ด์ ํด๋น .jar ๊ฒฝ๋ก์ Dockerfile์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
FROM openjdk:8
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
FROM : ๊ธฐ๋ฐ์ด ๋๋ ์ด๋ฏธ์ง๋ฅผ ์๋ฏธํ๊ณ , jdk ๋ฒ์ ์ ๋ช ์ํด์ฃผ๋ฉด ๋๋ค.
ARG : ์ปจํ ์ด๋ ๋ด์์ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ ์ง์ ํ ์ ์๋ค.
COPY : ARG์ JAR_FILE ๋ณ์๋ฅผ ์ปจํ ์ด๋์ app.jar์ ๋ณต์ฌํ๋ค๋ ๋ป์ด๋ค.
ENTRYPOINT : ์ปจํ ์ด๋๊ฐ ์์๋์ ๋ ์คํํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ช ์ํ๋ค.
3. Docker Image ๋ง๋ค๊ธฐ
SpringBoot ํ๋ก์ ํธ ๋ฃจํธ ๊ฒฝ๋ก๋ก ๊ฐ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค. ๋์ปค ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด Dockerfile์์ ์ค์ ํ ๋ด์ฉ๋ค์ด ์คํ๋๋ค.
docker build -t ๋์ปคํ๋ธID/๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ .
* ๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ์ ์๋ฌธ์๋ง ๊ฐ๋ฅํ๊ณ , ๋๋ฌธ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฑ์ ๊ฒ์ด๋ค.
์ด์ push๋ฅผ ํด๋ณด์~
docker login
# userID์ password ์
๋ ฅ
# Login Succeeded
docker push ๋์ปคํ๋ธID/๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ
๋์ปค ํ๋ธ ํํ์ด์ง์์ push ๋ด์ญ์ ํ์ธํ ์ ์๋ค.
4. Container ์คํ
์์ฑ๋ ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์คํํด๋ณด์.
docker run -d -p 8080:8080 ๋์ปคํ๋ธID/๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ
docker ps ๋ช ๋ น์ด๋ก ์คํ ์ค์ธ ์ปจํ ์ด๋๋ฅผ ํ์ธํ ์ ์๋ค.
5. EC2์ ๋ฐฐํฌํ๊ธฐ
AWS EC2 ์ธ์คํด์ค Amazon Linux 2 AMI
.pem ํค ํ์ด ๊ฒฝ๋ก๋ก ์ด๋ํ ํ ssh ์ฐ๊ฒฐ์ ํ์ํ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
(๋ช ๋ น์ด ํ์ธ์ EC2 > ์ธ์คํด์ค > ์ฌ์ฉ ์ค์ธ ์ธ์คํด์ค ํด๋ฆญ > ์ธ์คํด์ค์ ์ฐ๊ฒฐ > SSH ํด๋ผ์ด์ธํธ
> ๋ช ๋ น์ด ๋ณต์ฌ)
๋์ปค๋ฅผ ์ค์นํ๊ณ ํ๋ก๊ทธ๋จ์ ์คํํ ํ, ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง๋ฅผ pullํ๋ค.
sudo yum install docker
sudo systemctl start docker
sudo docker pull ๋์ปคํ๋ธID/๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ
## ์ด๋ฏธ์ง ์คํ
sudo docker run -d -p 8080:8080 ๋์ปคํ๋ธID/๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ
์ฐธ๊ณ ์ฌ์ดํธ :
https://devfoxstar.github.io/java/springboot-docker-ec2-deploy/
[์๋์ฐ์ ๋์ปค ์ค์น]
[EC2์ ๋์ปค ๋ฐฐํฌ]
https://jinjinyang.tistory.com/46
[Spring-Boot ํ๋ก์ ํธ ๊ตฌ์ถ ๋ฐ ๋์ปค ์ค์ ]
https://aodtns.tistory.com/115