[Quarkus] ์†Œ๊ฐœ

Quarkus๋Š” ์ตœ๊ทผ์— ๋‚˜์˜จ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ๋ ˆ๋“œํ–‡์—์„œ ๋งŒ๋“ค์—ˆ๊ณ , ์™„์ „ํ•œ ์˜คํ”ˆ์†Œ์Šค๋‹ค.
2019๋…„์— ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ์•„ํŒŒ์น˜ ๋ผ์ด์„ผ์Šค๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

๋ฌด๊ฒ๊ณ  ๋А๋ฆฐ Java Spring ๋Œ€์‹ , ์ปจํ…Œ์ด๋„ˆ์— ์„œ๋ฒ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋„์šฐ๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์—์„œ ๋‚˜์™”๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
๋น ๋ฅธ ๋กœ๋”ฉ์„ ์œ„ํ•ด graalvm ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํŒŒ์ผ๋œ๋‹ค.



vs Spring

์†”์งํžˆ ๋งํ•ด์„œ Spring์ด ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ Quarkus๊ฐ€ ๋” ์ž˜ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†๋‹ค.
์ด๊ฑด ์ทจํ–ฅ์˜ ๋ฌธ์ œ๋„ ์žˆ๊ณ , ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์ข€ ํฌ๋‹ค.

Quarkus์˜ ์žฅ์ ์œผ๋กœ ๊ผฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€, ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ ์€ ์ฝ”๋“œ๋กœ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฌธ์„œํ™” ์ˆ˜์ค€์ด ๋†’์œผ๋ฉฐ, ๋ฆด๋ฆฌ์ฆˆ๋„ ์ œ๋ฒ• ํ™œ๋ฐœํ•˜๊ฒŒ ์ด๋ค„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ GraalVM๊ณผ์˜ ํ†ตํ•ฉ์ด ์ž˜ ๋˜์–ด์žˆ๊ณ , ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•œ ์ฃผ๋ณ€ ๋„๊ตฌ๋“ค์ด ์ œ๋ฒ• ์ž˜ ๊ฐ–์ถฐ์ ธ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ƒํƒœ๊ณ„์˜ ํฌ๊ธฐ๋Š” ํ˜„๊ฒฉํ•œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. Spring์˜ ๋ชจ๋“ˆ๋“ค์ด ๋ฐ˜๋“œ์‹œ ๋›ฐ์–ด๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ.




์„ค์น˜

๋จผ์ € ์ „์šฉ CLI๋ถ€ํ„ฐ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์œ ๋‹‰์Šค ๊ณ„์—ด์ด๋ฉด curl ๋ช…๋ น์„ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

curl -Ls https://sh.jbang.dev | bash -s - trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/
curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio

์„ค์น˜ํ•˜๊ณ  ๋‚˜๋ฉด quarkus๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์ ธ์•ผ ํ•œ๋‹ค.




Hello World ์‹œ์ž‘ํ•ด๋ณด๊ธฐ

๋ฐฉ๊ธˆ ์„ค์น˜ํ•œ quarkus CLI๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘ํ•ด๋ณด๊ฒ ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ๋ช…๊ณผ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…์„ ์ง€์ •ํ•ด์„œ create app ๋ช…๋ น์„ ๋‚ ๋ฆฌ๋ฉด ๋œ๋‹ค.

๋ณดํ†ต ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์€ ํ”„๋กœ์ ํŠธ๋ช… ์ง€์ •ํ•˜๋ฉด ๊ทธ๊ฑฐ๋ž‘ ๋™์ผํ•˜๊ฒŒ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…๋„ ์ƒ์„ฑํ•ด์ฃผ๋Š”๋ฐ, ์ด๊ฑด ์•„๋‹ˆ๋”๋ผ.
์ž๋ฐ” ์•„๋‹ˆ๋ž„๊นŒ๋ด UX๊ฐ€ ์€๊ทผํžˆ ์ข€ ๋ฉ์ฒญํ•˜๊ณ  ๊ตฌ๋ฆฌ๋‹ค.

quarkus create app --name quarkus_start -o quarkus_start

์•„๋ฌดํŠผ ๋งŒ๋“ค๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ maven์ด๋‹ค.
์ฝ”๋“œ ํ˜•ํƒœ๋Š” ๋Œ€๋žต ์Šคํ”„๋ง๊ณผ ๋น„์Šค๋ฌด๋ฆฌํ•˜๊ธด ํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋ฉด CLI์˜ dev ๋ช…๋ น์„ ํ†ตํ•ด ์ฆ‰์‹œ dev ์„œ๋ฒ„๋ฅผ ๋นŒ๋“œํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ญ ์ž”๋œฉ ๋‹ค์šด๋ฐ›๊ณ  ์‹คํ–‰์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ์ž”๋œฉ ๋ฐ›์•„์„œ ์ตœ์ดˆ ๋ถ€ํŒ…์€ ์ข€ ๋А๋ฆฌ๋‹ค.

์•„๋ฌดํŠผ ์‹คํ–‰์ด ๋œ๋‹ค๋ฉด 8080 ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ •์˜๋œ API๋ฅผ ์ฆ‰์‹œ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  dev ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์ง„์ž…์‹œ์— dev UI๊ฐ€ ๋œฌ๋‹ค.

๋ณ„๋กœ ๋Œ€๋‹จํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์–ด๋–ค API๊ฐ€ ์žˆ๊ณ  ์–ด๋–ค ๊ฒƒ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹œ๋ณด๋“œ๋‹ค.


๋””ํŽœ๋˜์‹œ ๊ทธ๋ž˜ํ”„๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ๊ตณ์ด ์™œ ๋„ฃ์€๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์“ฐ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‚˜?




์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ

์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊นŒ๋ณด๋ฉด dockerfile๋“ค์ด ๋ช‡๊ฐœ ์žˆ๋‹ค. ์ด๊ฑฐ ๊ทธ๋Œ€๋กœ ๋ง์•„์„œ ์“ฐ๋ฉด ๋œ๋‹ค.

# JVM ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰
./mvnw package -DskipTests
docker build -f src/main/docker/Dockerfile.jvm -t quarkus-jvm:latest .
docker run --name quarkus-jvm -p 8080:8080 --rm quarkus-jvm:latest

# GraalVM ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰
./mvnw package -Dnative
docker build -f src/main/docker/Dockerfile.native -t quarkus-graal:latest .
docker run --name quarkus-graal -p 8081:8080 --rm quarkus-graal:latest

# GraalVM ๊ฒฝ๋Ÿ‰ ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰
./mvnw package -Dnative
docker build -f src/main/docker/Dockerfile.native-micro -t quarkus-micro:latest .
docker run --name quarkus-micro -p 8082:8080 --rm quarkus-micro:latest

๊ทผ๋ฐ ๋˜ ๊ท€์ฐฎ๊ฒŒ, docker build๋งŒ์œผ๋กœ ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‚ฌ์ „์— ๋ช…๋ น ํ•˜๋‚˜ ์จ์„œ target์— ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‘ฌ์•ผ ํ•œ๋‹ค. ๋ฒˆ์žก์Šค๋Ÿฝ๋‹ค.

์•„๋ฌดํŠผ ์ ๋‹นํžˆ ๋นŒ๋“œํ•˜๋ฉด, ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‹คํ–‰ํ•ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๊ฐ ๋ฒ„์ „๋ณ„๋กœ ๋ฆฌ์†Œ์Šค ์ฐจ์ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚ ๊นŒ?

docker image์˜ ๊ฒฝ์šฐ์—๋Š” ํฌ๊ธฐ ์ฐจ์ด๊ฐ€ ์ œ๋ฒ• ๋‚œ๋‹ค.
๋”ฑ ๊ธฐ๋ณธ์ ์ธ hello world ์ฝ”๋“œ๋งŒ ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ๋„ JVM ๋ฒ„์ „์€ 400MB๊ฐ€ ๋„˜๊ณ , graal ๋ฒ„์ „์€ 150MB ์ •๋„๋‹ค. graal ๋ฒ„์ „์ด ์ตœ์†Œ 2.5๋ฐฐ ์ •๋„๋Š” ๊ฐ€๋ฒผ์šด ๊ฒƒ์ด๋‹ค.


๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์—๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
JVM ๋ฒ„์ „์€ 200MB ๊ฐ€๊นŒ์ด ๋จน์ง€๋งŒ, graal ๋ฒ„์ „๋“ค์€ 10MB๋„ ๋จน์ง€ ์•Š๋Š”๋‹ค. ํ™•์‹คํžˆ ๊ฐ€๋ณ๊ธด ๊ฐ€๋ณ๋‹ค.


๋” ์ž์„ธํ•œ ๋‚ด์šฉ๋“ค์€ ์ „์šฉ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
https://quarkus.io/guides/#



์ฐธ์กฐ
https://quarkus.io/get-started/