๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

jHipster: Modern Java Development์˜ ์„ ๋‘์ฃผ์ž

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 10.
728x90

1. ๋ฐฐ๊ฒฝ๊ณผ ์†Œ๊ฐœ

1.1. ๋ฐฐ๊ฒฝ

jHipster๋Š” Java ๊ฐœ๋ฐœ์„ ํ˜„๋Œ€์ ์ด๊ณ  ์ƒ์‚ฐ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Spring Boot์™€ Angular/React/Vue.js ๋“ฑ์˜ ๊ธฐ์ˆ  ์Šคํƒ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋น ๋ฅด๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

1.2. ์†Œ๊ฐœ

  • ๊ธฐ์ˆ  ์Šคํƒ ์œตํ•ฉ: Spring Boot๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ Angular/React/Vue.js ๋“ฑ์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ๊ณผ์˜ ํ†ตํ•ฉ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ํ…œํ”Œ๋ฆฟ: CRUD ์ž‘์—… ๋ฐ ๋ณด์•ˆ ์„ค์ • ๋“ฑ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์ง€์›: jHipster๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ๋…๋ฆฝ๋œ ์„œ๋น„์Šค ๊ฐ„์—๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. ๊ธฐ๋Šฅ ๋ฐ ์ง€์›

2.1. ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ

  • ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ: CRUD, ๋ณด์•ˆ, ๊ถŒํ•œ ๊ด€๋ฆฌ ๋“ฑ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜์—ฌ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์ƒ์„ฑ: ๊ฐœ๋ฐœ์ž๋Š” ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜: ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

2.2. ์žฅ/๋‹จ์ 

2.2.1. ์žฅ์ 

  • ๋น ๋ฅธ ๊ฐœ๋ฐœ: ํ’๋ถ€ํ•œ ํ…œํ”Œ๋ฆฟ๊ณผ ์ฝ”๋“œ ์ƒ์„ฑ์œผ๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ ์ง€์›: Spring Boot์™€ ๋‹ค์–‘ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์„ ์œตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.2.2. ๋‹จ์ 

  • ๋Ÿฌ๋‹ ์ปค๋ธŒ: ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์„ค์ •์œผ๋กœ ์ธํ•ด ์ดˆ๊ธฐ ํ•™์Šต์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ์ •๋œ ๊ตฌ์กฐ: ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ชจ๋“ˆ ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ 

3.1. ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹

  • HTTP ํ†ต์‹ : RESTful API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ : ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์— HTTP RESTful API๋ฅผ ํ†ตํ•ด ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ: Apache Kafka ๋“ฑ์˜ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์ธ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›น์†Œ์ผ“ (WebSocket): Spring WebSocket ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • RSocket: Reactive Streams๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ํ†ต์‹ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

4. DB ์ง€์›

4.1. ์ง€์›ํ•˜๋Š” DB

  • RDBMS: MySQL, PostgreSQL, Oracle, MSSQL ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • NoSQL: MongoDB ๋“ฑ์„ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4.2. ๊ฐ•๋ ฅํ•œ DB ์ง€์› ๊ธฐ๋Šฅ

4.2.1. JPA (Java Persistence API)

  • ์„ค๋ช…: jHipster์—์„œ๋Š” JPA๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Entity ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์ :
    • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์ด ์šฉ์ดํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ ์—†์ด ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4.2.2. Spring Data JPA

  • ์„ค๋ช…: Spring Data JPA๋Š” JPA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. jHipster์—์„œ๋Š” Spring Data JPA๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์ :
    • ๋ฐ˜๋ณต์ ์ด๊ณ  ์ง€๋ฃจํ•œ CRUD ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ปค์Šคํ…€ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์กฐํšŒ๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2.3. Liquibase

  • ์„ค๋ช…: jHipster์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Liquibase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ์—”ํ„ฐํ‹ฐ๋‚˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์žฅ์ :
    • ๋ณ€๊ฒฝ๋œ ์Šคํ‚ค๋งˆ๋ฅผ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
    • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.2.4. ์บ์‹ฑ ์ง€์›

  • ์„ค๋ช…: jHipster์—์„œ๋Š” Ehcache ๋“ฑ์˜ ์บ์‹ฑ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ์บ์‹ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์ :
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ์–ด์˜ค๋Š” ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ์บ์‹œ ์ „๋žต์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๊ฒฐ๋ก 

jHipster๋Š” ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ์„ ์ง€ํ–ฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋งŽ์€ ํŽธ์˜์™€ ์ƒ์‚ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์ง€์›๋˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ•๋ ฅํ•œ DB ์ง€์›์œผ๋กœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ดˆ๊ธฐ ํ•™์Šต์ด ํ•„์š”ํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์˜ ์ œํ•œ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์žฌ์ ์†Œ์— jHipster๋ฅผ ์ ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€