Quarkus(์ฟผ์ปค์Šค) ์†Œ๊ฐœ: ๋‚˜๋Š” ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์œ„ํ•ด ํƒœ์–ด๋‚ฌ๋‹ค

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ์™€ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)๊ฐ€ ์ฃผ๋ฅ˜๊ฐ€ ๋œ ์ง€๊ธˆ, ์ž๋ฐ”๋Š” ์—ฌ์ „ํžˆ ‘๋ฌด๊ฒ๊ณ  ๋А๋ฆฌ๋‹ค’๋Š” ํŽธ๊ฒฌ์ด ์žˆ๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด๋‹ค. Quarkus๋Š” ์ด๋Ÿฌํ•œ ํŽธ๊ฒฌ์„ ์ •๋ฉด์œผ๋กœ ๋ŒํŒŒํ•˜๋ฉฐ “Supersonic Subatomic Java“๋ผ๋Š” ์Šฌ๋กœ๊ฑด๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ–ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Quarkus๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค.

Quarkus๊ฐ€ ๋ญ์—์š”?

Quarkus๋Š” Red Hat์—์„œ ์ฃผ๋„ํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ž๋ฐ” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ˜น์€ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ์Šคํƒ์„ ์ง€ํ–ฅํ•œ๋‹ค.
Spring Boot์™€ ๊ฐ™์€ ์ „ํ†ต์ ์ธ ์ž๋ฐ” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•˜๊ณ  ๋นˆ(Bean)์„ ์ƒ์„ฑํ•˜๋ฉฐ ์„ค์ •์„ ์ ์šฉํ•œ๋‹ค. ์ด ๊ณผ์ •์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ณ  ๋ถ€ํŒ… ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ์›์ธ์ด ๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•œ REST ์„œ๋ฒ„๋ฅผ ๊ธฐ๋™ํ•  ๋•Œ๋„ ์ตœ์†Œ ๋ช‡์ดˆ์˜ ๊ธฐ๋™ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ฒƒ์€ ์ดˆ๊ธฐ ๋Ÿฐํƒ€์ž„์— ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Quarkus๋Š” ์ด ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์™„์ „ํžˆ ๋ฐ”๊ฟง๋‹ค. “Build-time First” ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ํ•˜๋˜ ์ž‘์—…์˜ 80%์ด์ƒ์„ ๋นŒ๋“œ ์‹œ์ ์— ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์šฐ๋ฆฌ๋Š” ์ž๋ฐ”๋กœ๋„ Go ์–ธ์–ด๋‚˜ Node.js์— ๋ฒ„๊ธˆ๊ฐ€๋Š” ๊ฐ€๋ฒผ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

quarkus ๋นŒ๋“œ ํƒ€์ž„
์ถœ์ฒ˜: https://quarkus.io/performance/

๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด Quarkus์˜ ๊ธฐ๋ณธ ์ปจ์…‰์€ ‘๋นŒ๋“œ ํƒ€์ž„์— ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฏธ๋ฆฌ ๋‹ค ํ•ด๋ฒ„๋ฆฌ์ž’๋‹ค. ๋Ÿฐํƒ€์ž„์— ์ˆ˜ํ–‰ ํ•˜๋Š” ๊ฒƒ๋“ค์„ ๋นŒ๋“œ ํƒ€์ž„์— ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•ด ๋†“์Œ์œผ๋กœ์จ ๋Ÿฐํƒ€์ž„ ์ดˆ๊ธฐ์— ๋ฐœ์ƒํ•˜๋Š” ์†Œ๋ชจ ์‹œ๊ฐ„์„ ๋Œ€ํญ ์ค„์ด๋„๋ก ํ•œ ๊ฒƒ์ด๋‹ค.

JAX-RS: Quarkus์˜ ํ•ต์‹ฌ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋„๊ตฌ

Quarkus์—์„œ RESTful API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ JAX-RS(Jakarta RESTful Web Service) ์ธ๋ฐ Spring์˜ @RestController์— ์ต์ˆ™ํ•˜๊ฒ ์ง€๋งŒ, Quarkus๋Š” ์ž๋ฐ” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ธ JAX-RS๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
JAX-RS์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ์€ https://jakarta.ee/specifications/ ์—์„œ ํ™•์ธํ•˜๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
JAX-RS ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฐด๋”์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์˜ค๋žœ ์‹œ๊ฐ„ ๊ฒ€์ฆ๋œ ์•ˆ์ •์ ์ธ API ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๋Š”๋ฐ ์žฅ์ ์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด REST API๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๊ฒฝ๋กœ ๋ฐ ๋ฉ”์„œ๋“œ ์ •์˜
    • @Path: ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
      • ํด๋ž˜์Šค ์ƒ๋‹จ์— @Path(“/items”)๋ผ๊ณ  ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” /items ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„๋‹ค.
        Spring์˜ ํด๋ž˜์Šค์— @RequestMapping(“/items”)๋ฅผ ์ง€์ •ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.
    • @GET, @POST, @PUT, @DELETE, @PATCH: HTTP ๋ฉ”์„œ๋“œ๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ์˜๋„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”์ง€ (์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ)๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ง€์ •
    • @Produces: ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์˜ํ•œ๋‹ค.
      • @Produces(MediaType.APPLICATION_JSON)๊ณผ ๊ฐ™์ด application/json ์‘๋‹ต ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • @Consumes: ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์˜ํ•œ๋‹ค.
      • @Consumes(MediaType.APPLICATION_JSON)๊ณผ ๊ฐ™์ด ์š”์ฒญ payload๋ฅผ application/json์œผ๋กœ ๋ฐ›๊ฒ ๋‹ค๋Š” ํ˜•์‹์„ ์ง€์ •ํ•œ๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ ํ•ธ๋“ค๋ง (Data Injection)
    • @PathParam: URL ๊ฒฝ๋กœ์— ํฌํ•จ๋œ ๋ณ€์ˆ˜๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค. Spring์˜ @PathVariable๊ณผ ๋™์ผ
      • ๊ฒฝ๋กœ: /users/{id} -> ๋ฉ”์„œ๋“œ: public User get(@PathParam(“id”) Long id)
    • @QueryParam: URL๋’ค์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๊ฐ€์ ธ์˜จ๋‹ค.
      • ๊ฒฝ๋กœ: /search?name=kim -> ๋ฉ”์„œ๋“œ public List<User> search(@QueryParam(“name”) String name)
    • @HeaderParam: HTTP ์š”์ฒญ ํ—ค๋”์— ๋‹ด๊ธด ํŠน์ • ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
    • @Context: HTTP ์š”์ฒญ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด(UriInfo, HttpHeaders๋“ฑ)๋ฅผ ์ฃผ์ž…๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Quarkus Dev Mode

์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ฐ€์žฅ ํฐ ๊ณ ์ถฉ ์ค‘ ํ•˜๋‚˜๋Š” ‘์ˆ˜์ • ํ›„ ์žฌ์‹œ์ž‘ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ‘๋‹ค. ์ฝ”๋“œ ํ•œ ์ค„ ๊ณ ์น˜๊ณ  10~20์ดˆ์”ฉ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ์ง€๋ฃจํ•œ ์ผ์ด ์•„๋‹ ์ˆ˜ ์—†๋‹ค. Quarkus์˜ Dev Mode๋Š” ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•œ๋‹ค. (๋ฌผ๋ก  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.)

Dev Mode๋ž€?

./mvnw quarkus:dev
Plaintext

๋ช…๋ น์–ด๋กœ ์‹คํ–‰๋˜๋Š” ์ด ๋ชจ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์—†์ด ์ฆ‰์‹œ ๋ฐ˜์˜๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ž‘๋™ ์›๋ฆฌ

๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ์ˆ˜์ค€์ด ์•„๋‹Œ Quarkus Dev Mode์˜ ๋‚ด๋ถ€ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋”ฐ๋ฅธ๋‹ค.

  1. ์š”์ฒญ ๊ฐ€๋กœ์ฑ„ํ‚ค (Request Interception)
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ‘์ƒˆ๋กœ๊ณ ์นจ’์„ ๋ˆ„๋ฅด๋ฉด Quarkus๋Š” ์š”์ฒญ์„ ์ž ์‹œ ๋ฉˆ์ถ˜๋‹ค. (Pause)
  2. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์Šค์บ”
    • ๋งˆ์ง€๋ง‰ ์š”์ฒญ ์ดํ›„ ์†Œ์Šค ํŒŒ์ผ (.java, .properties ๋“ฑ)์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  3. ์ฆ๋ถ„ ์ปดํŒŒ์ผ: ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ๊ณจ๋ผ๋‚ด์„œ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ๊ฒฉ๋ฆฌ๋œ ํด๋ž˜์Šค๋กœ๋” ์žฌ์‹œ์ž‘
    • Quarkus๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”์–ด๋ฅผ ๋ถ„๋ฆฌํ•ด ๋‘์—ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•œ ์‚ฌ์šฉ์ž ์˜์—ญ์˜ ํด๋ž˜์Šค๋กœ๋”๋งŒ ์ˆœ์‹๊ฐ„์— ์žฌ์‹œ์ž‘ํ•œ๋‹ค.
  5. ์š”์ฒญ ์žฌ๊ฐœ
    • ๋ชจ๋“  ์ค€๋น„๊ฐ€ ๋๋‚˜๋ฉด ๋ฉˆ์ท„๋˜ HTTP ์š”์ฒญ์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค.

Dev Mode๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •๋œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ ์ด ์žˆ๋‹ค.

Quarkus์˜ ์ฐจ๋ณ„์ 

  1. Static Analysis vs Dynamic Reflection
    • ์ „ํ†ต์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์‹คํ–‰ ์‹œ์ ์— ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ๋ถ„์„ํ•œ๋‹ค. ์ด๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ Quarkus๋Š” ๋นŒ๋“œ ์‹œ์ ์— ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ถ„์„ํ•˜๊ณ  ํ•„์š”ํ•œ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋‘”๋‹ค. ๋•๋ถ„์— ๋Ÿฐํƒ€์ž„์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ถ€ํ•˜ ์—†์ด ๋ฐ”๋กœ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. Native Image (GraalVM)
    • Quarkus๋Š” GraalVM๊ณผ ์™„๋ฒฝํžˆ ํ˜ธํ™˜๋œ๋‹ค. ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ JVM์œ„์—์„œ ๋Œ์•„๊ฐ€๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ OS์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์‹คํ–‰ ํŒŒ์ผ(Binary)๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Quarkus Extension

Spring Boot์—๋Š” ๋ชจ๋“ˆ๋ณ„ ๋””ํŽœ๋˜์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” starter๊ฐ€ ์ œ๊ณต๋˜๋Š”๋ฐ Quarkus๋„ Extension์„ ํ†ตํ•ด์„œ ์ด์™€๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
Quarkus์˜ Extension์€ Spring Boot Starter์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„ค์ •์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด๋†“์€ ๋‹จ์œ„๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ๋””ํŽœ๋˜์‹œ์˜ ๋ฌถ์Œ์„ ๋„˜์–ด์„œ์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Spring Boot Starter vs Quarkus Extension

Sring Boot StarterQuarkus Extension
๋ช…์นญStarterExtension
์ฃผ์š” ์—ญํ• ์˜์กด์„ฑ ๊ด€๋ฆฌ + ์ž๋™ ์„ค์ • (Auto Config)์˜์กด์„ฑ ๊ด€๋ฆฌ + ๋นŒ๋“œ ํƒ€์ž„ ์ตœ์ ํ™”
์‹คํ–‰ ์‹œ์ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์‹œ ์Šค์บ”์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ์‹œ ๋ถ„์„
์„ค์ • ๋ฐฉ์‹application.properties / ymlapplication.properties / yml

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์–ธ์ œ ์ผ์„ ํ•˜๋Š”๊ฐ€ ์ด๋‹ค. Spring Boot Starter๋Š” ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์„ค์ •์„ ์ฝ๊ณ  ๋นˆ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ, Quarkus Extesion์€ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์‹œ์ ์— ์ด๋ฏธ ์„ค์ •์„ ๋‹ค ์ฝ์–ด์„œ ์ตœ์ ํ™”๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Extension ๋งคํ•‘ (Spring vs Quarkus)

Spring Boot์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ starter์™€ ๋งคํ•‘๋˜๋Š” Quarkus Extension์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

Spring Boot StarterQuarkus Extension
REST APIspring-boot-starter-webquarkus-reateasy-jackson
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (JPA)spring-boot-starter-data-jpaquarkus-hibernate-orm-panache
๋ณด์•ˆ (security)spring-boot-starter-securityquarkus-security / quarkus-oidc
์œ ํšจ์„ฑ ๊ฒ€์ฆspring-boot-starter-validationquarkus-hibernate-validator
๋ฉ”์‹œ์ง• (kafka)spring-cloud-starter-stream-kafkaquarkus-messaging-kafka
๋ชจ๋‹ˆํ„ฐ๋งspring-boot-starter-actuatorquarkus-smallrye-health / metrics

Extension์„ ์ฐพ๊ณ  ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

Quarkus๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ Extension์„ ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ์›น UI ํ™œ์šฉ
    • Spring์˜ start.spring.io์™€ ๊ฐ™์ด code.quarkus.io๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์ฒดํฌ๋งŒ ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ํ•„์š”ํ•œ Extension์ด ํฌํ•จ๋œ ์••์ถ• ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค€๋‹ค.
quarkus ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ™”๋ฉด
code.quarkus.io ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ™”๋ฉด
  • CLI ๋ช…๋ น ํ™œ์šฉ
    • Quarkus์˜ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ธ quarkus CLI๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๋„์ค‘์— ๋ฐ”๋กœ Extension์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
$> quarkus extension add hibernate-orm-panache jdbc-postgresql
Bash

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด pom.xml ์ด๋‚˜ build.gradle์— ์ž๋™์œผ๋กœ ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋œ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋ฒ„์ „์„ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค.
quarkus CLI๋Š” SKDMAN์„ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
SDKMAN ๊ด€๋ จ ๋‚ด์šฉ์€ SDKMAN์œผ๋กœ ๊ฐœ๋ฐœ๋„๊ตฌ ๋ฒ„์ „ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜์ž ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

# ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์„ ํ™•์ธ
$> sdk list quarkus

# quarkus 3.30.4 ์„ค์น˜
$> sdk install quarkus 3.30.4
Downloading: quarkus 3.30.4

In progress...

#################################################################################################################################### 100.0%

Installing: quarkus 3.30.4
Done installing!


Setting quarkus 3.30.4 as default.
Bash
  • Maven/Gradle ๋ช…๋ น ํ™œ์šฉ
    • CLI๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๋”๋ผ๋„ Maven ๋ช…๋ น์–ด๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
$> ./mvnw quarkus:list-extensions
Bash
$> ./gradlew listExtensions
Bash

๋ชฉ๋ก ๋ฆฌ์ŠคํŠธ์— ๋ณด๋ฉด ๋ณ„ํ‘œ(*)๊ฐ€ ์žˆ๋Š” ๊ฒƒ๊ณผ ์—†๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐ ๋ณ„ํ‘œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ Quarkus ์ปค๋ฎค๋‹ˆํ‹ฐ๋‚˜ Red Hat์—์„œ ๊ณต์‹์ ์œผ๋กœ ๊ถŒ์žฅํ•˜๊ฑฐ๋‚˜ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” Extension์ด๋‹ค. ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋ฉฐ ๋ฌธ์„œํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๊ณ  Quarkus์˜ ์ตœ์‹  ๋ฒ„์ „๊ณผ๋„ ํ˜ธํ™˜์„ฑ์ด ๋†’๋‹ค. ๋ณ„ํ‘œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋น„๊ต์  ์ตœ์‹ ์ด๊ฑฐ๋‚˜ ์‹คํ—˜์ ์ธ ๋‹จ๊ณ„ ๋˜๋Š” ์„œ๋“œํŒŒํ‹ฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ผ ์ˆ˜ ์žˆ๋‹ค.

Quarkus Extension ๊ณต์‹ ๋ฌธ์„œ๋Š” ์–ด๋””์— ์žˆ๋‚˜?

Quarkus์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” Spring๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์„œํ™”๊ฐ€ ๋งค์šฐ ์ž˜ ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ™•์žฅ์ด ์›Œ๋‚™ ๋งŽ๋‹ค ๋ณด๋‹ˆ “๋‚ด๊ฐ€ ์ง€๊ธˆ ์„ค์น˜ํ•œ ์ด ํ™•์žฅ์˜ ์‚ฌ์šฉ๋ฒ•์€ ์–ด๋””์— ์žˆ์ง€” ๋ผ๊ณ  ํ—ค๋งฌ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์„œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์ž.

  • ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•: code.quarkus.io
    • ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” code.quarkus.io์—์„œ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฒ€์ƒ‰ ์ฐฝ์— ์›ํ•˜๋Š” extension์„ ๊ฒ€์ƒ‰ ํ›„ ์šฐ์ธก์˜ ์•„๋ž˜ ํ™”์‚ดํ‘œ ๋ชจ์–‘์„ ํด๋ฆญํ•˜๋ฉด ‘See the extension guide’๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
code.quarkus.io ์—์„œ quarkus extension guide ๋ฌธ์„œ ์ฐพ๊ธฐ
code.quarkus.io์—์„œ Extension ๋ฌธ์„œ ์ฐพ๊ธฐ
  • Quarkus ๊ณต์‹ ๊ฐ€์ด๋“œ ํŽ˜์ด์ง€
    • https://quarkus.io/guides/ ์—์„œ ์›ํ•˜๋Š” extension ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐœ๋ฐœ ์ค‘์— ํ™•์ธ (Dev UI)
    • Dev Mode๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ™•์žฅ์˜ ๋ฌธ์„œ ๋งํฌ๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
      • http://localhost:8080/q/dev/ ์ ‘์† (ํฌํŠธ๋Š” ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌํŠธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค)
Dev Mode์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ค‘์ธ Extension ํ™•์ธ ๋ฐ ๊ฐ€์ด๋“œ ๋ฌธ์„œ ์ฐพ๊ธฐ
Dev UI์—์„œ ์‚ฌ์šฉ์ค‘์ธ Extension ํ™•์ธ


Quarkus Extension์€ ๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค. ๊ฐ Extension์—๋Š” Deployment ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ๋ฆฌํ”Œ๋ ‰์…˜ ์ œ๊ฑฐ: ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ์ฐพ๋Š” ๋Œ€์‹  ๋นŒ๋“œ ์‹œ์ ์— ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐ์„ ๋๋‚ธ๋‹ค.
  • ํ”„๋ก์‹œ ์ƒ์„ฑ: ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋‚˜ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ๋นŒ๋“œ ์‹œ์ ์— ๋ฏธ๋ฆฌ ๊ตฌ์›Œ๋‚ธ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ œ๊ฑฐ: ์„ค์ •์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋œ ๊ธฐ๋Šฅ์€ ์ตœ์ข… ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ œ์™ธํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค.

Quarkus๋„ ์ž๋™ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜๋‚˜?

Spring Boot์˜ ๊ฐ€์žฅ ํฐ ๋งค๋ ฅ์€ spring boot starter ์˜์กด์„ฑ ์ถ”๊ฐ€๋กœ ๊ด€๋ จ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋นˆ ์ƒ์„ฑ์ด๋‚˜ properties๋ฅผ ํ†ตํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌ์„ฑ๋“ค์„ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” Auto Configuration ์ œ๊ณต์— ์žˆ๋‹ค. Quarkus ์—ญ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ ๋ณต์žกํ•œ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ํ™•์žฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ž๋™ ๊ตฌ์„ฑ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์€ Spring Boot์™€๋Š” ๋‹ค๋ฅธ ์ ์„ ๋ณด์ด๋Š”๋ฐ ๊ทธ ์ฐจ์ด๋ฅผ ์งš์–ด๋ณด์ž.

Spring Boot vs Quarkus Auto Configuration

Spring Boot์™€ Quarkus์˜ ์ž๋™ ๊ตฌ์„ฑ ๋™์ž‘ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด์ž.

Spring Boot: ๋Ÿฐํƒ€์ž„ ์ž๋™ ์„ค์ •

Spring Boot๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. ํด๋ž˜์ŠคํŒจ์Šค ์Šค์บ”: ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. ์กฐ๊ฑด๋ถ€ ํ‰๊ฐ€(@Conditional): ํด๋ž˜์ŠคํŒจ์Šค์— MySQL ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๋‚˜? DataSource ๋นˆ์ด ์•„์ง ๋“ฑ๋ก ์•ˆ๋๋‚˜? ๋“ฑ์„ ์ฒดํฌํ•œ๋‹ค.
  3. ๋นˆ(Bean) ๋“ฑ๋ก: ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ๊ทธ์ œ์•ผ ๊ด€๋ จ๋œ ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค.

์ด ๋ชจ๋“  ๊ณผ์ •์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ๋™๋˜๋Š” ์‹œ์ ์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ถ€ํŒ…๋˜๋Š” ์†๋„๊ฐ€ ๋А๋ ค์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚œ๋‹ค.

Quarkus: ๋นŒ๋“œ ํƒ€์ž„ ํ™•์žฅ

Quarkus๋Š” Spring์˜ @EnableAutoConfiguration ๊ฐ™์€ ๊ฐœ๋…์ด ๋Ÿฐํƒ€์ž„์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  Augmentation(์ฆ๊ฐ•) ์ด๋ผ๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ๋ชจ๋“  ์ž๋™ ์„ค์ •์ด ๋๋‚œ๋‹ค.

  1. ๋นŒ๋“œ ์‹œ์  ๋ถ„์„: ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ(Maven/Gradle)ํ•  ๋•Œ Quarkus Extension์€ ์ด๋ฏธ ์–ด๋–ค ์„ค์ •์ด ํ•„์š”ํ•œ์ง€ ๋ถ„์„์„ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ๋ฐฐํฌ ๊ธฐ๋ก: ๋Ÿฐํƒ€์ž„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์„ค์ • ๋กœ์ง(์˜ˆ: DB ์ปค๋„ฅ์…˜ ํ’€ ์ƒ์„ฑ ์ฝ”๋“œ)์„ ๋ถ„์„ํ•˜์—ฌ ์ด๋ฅผ ์ตœ์ ํ™”๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ๋‹ค.
  3. ๋ฐ๋“œ ์ฝ”๋“œ ์ œ๊ฑฐ: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์„ค์ •์ด๋‚˜ ๊ฒฝ๋กœ๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์•„์˜ˆ ์‚ญ์ œํ•˜์—ฌ ์ตœ์ข… ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋™ ๋  ๋•Œ “์–ด๋–ค ์„ค์ •์„ ํ•ด์•ผ ํ•˜์ง€?”๋ผ๊ณ  ๋ฌผ์–ด๋ณด์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฏธ ๋นŒ๋“œ ๋•Œ ์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ•ด๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. “์ตœ์ ํ™”๋œ ์‹คํ–‰ ๊ณ„ํš”์„ ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํŒ…์ด ์ˆœ์‹๊ฐ„์— ๋๋‚œ๋‹ค.

์„ค์ •์˜ ์ด์›ํ™”: Build-time vs Runtime properties

๋™์ž‘ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค ๋ณด๋‹ˆ ์„ค์ • ํŒŒ์ผ(application.properties (yml))์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์—๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. Quarkus๋Š” ์„ค์ •์„ ๋‘ ๊ฐ€์ง€๋กœ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  1. ๋นŒ๋“œ ํƒ€์ž„ ๊ณ ์ • ์„ค์ • (Build-time fixed properties)
    • ๋นŒ๋“œ ํ•  ๋•Œ๋งŒ ์œ ํšจํ•˜๋ฉฐ, ํ•œ ๋ฒˆ ๋นŒ๋“œ๋˜๋ฉด ๋Ÿฐํƒ€์ž„์— ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
    • ์˜ˆ์‹œ: ์‚ฌ์šฉํ•  DB ์ข…๋ฅ˜, ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ตœ์ ํ™” ์˜ต์…˜ ๋“ฑ
  2. ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„๋ผ์ด๋“œ ์„ค์ • (Runtime Override properties)
    • ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋‚˜ ์ปค๋งจ๋“œ ๋ผ์ธ ์ธ์ž๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ์‹œ: DB ์ ‘์† ์ฃผ์†Œ (JDBC URL), ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋กœ๊ทธ๋ ˆ๋ฒจ ๋“ฑ

Spring Boot๋Š” ๋ชจ๋“  ์„ค์ •์„ ์‹คํ–‰ ์‹œ์ ์— ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, Quarkus๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ผ๋ถ€ ์„ค์ •์„ ๋นŒ๋“œ ์‹œ์ ์— ๊ณ ์ •ํ•œ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

Spring BootQuarkus
ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ฆฌํ”Œ๋ ‰์…˜๊ณผ ์กฐ๊ฑด๋ถ€ ์–ด๋…ธํ…Œ์ด์…˜ ์Šค์บ”๋นŒ๋“œ ํƒ€์ž„ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ
์‹คํ–‰ ์‹œ์ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ์‹œ
์œ ์—ฐ์„ฑ๋งค์šฐ ๋†’์Œ (์‹คํ–‰ ์ค‘ ๋ชจ๋“  ์„ค์ • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)๋†’์Œ(๋‹จ, ๋นŒ๋“œ์‹œ ๊ณ ์ •๋˜๋Š” ์„ค์ • ์กด์žฌ)
์„ฑ๋Šฅ ์˜ํ–ฅstarter๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ถ€ํŒ… ์ง€์—ฐextension์ด ๋งŽ์•„๋„ ๋ถ€ํŒ… ์†๋„์— ์˜ํ–ฅ ๋ฏธ๋ฏธ

Spring Boot๋‚˜ Quarkus์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ ์„ค์ •์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•จ์„ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋น„์Šทํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์šด์˜ ํ™˜๊ฒฝ์—์„œ์˜ ์ฐจ์ด๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค. ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ, ํŠนํžˆ ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งŒ ์„œ๋ฒ„๋ฅผ ๋„์šฐ๋Š” ์„œ๋ฒ„๋ฆฌ์Šค(Serverless) ํ™˜๊ฒฝ์—์„œ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ–๋Š” Code Start ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ Quarkus์˜ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ์••๋„์ ์ธ ์šฐ์œ„๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.


์ตœ๊ทผ์— Quarkus์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๊ฐ–๊ฒŒ ๋˜๋ฉด์„œ MSA ํ™˜๊ฒฝ์ด๋‚˜ AWS ๋žŒ๋‹ค์™€ ๊ฐ™์€ Serverless ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ Quarkus์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ์™€ ํ•จ๊ป˜ ๋ช‡๊ฐ€์ง€ ํŠน์ง•๋“ค์„ ์‚ดํŽด๋ดค๋Š”๋ฐ ์•ž์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•™์Šตํ•œ ๋‚ด์šฉ๋“ค์„ ํ† ๋Œ€๋กœ ํฌ์ŠคํŒ…์„ ์ด์–ด๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋‹ค.

Quarkus ๋ง›๋ณด๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

https://quarkus.io/get-started
https://quarkus.io/guides/cli-tooling

์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๋งํฌ

https://quarkus.io/guides/
https://code.quarkus.io/