JHipster
JHipster 설치 준비
-
Node.js 설치: JHipster는 Node.js 기반으로 동작합니다. 따라서, Node.js가 시스템에 설치되어 있지 않다면 먼저 설치해야 합니다.
-
JHipster CLI 설치: JHipster를 사용하기 위해서는 JHipster CLI(Command Line Interface)를 설치해야 합니다. 이는 npm을 통해 설치할 수 있습니다.
npm install -g generator-jhipster
JHipster 프로젝트 생성
-
프로젝트 폴더 생성 및 이동: 새로운 JHipster 프로젝트를 위한 디렉토리를 만들고, 해당 디렉토리로 이동합니다.
mkdir myProject cd myProject
-
JHipster 프로젝트 생성: 프로젝트 디렉토리에서 다음 CLI 명령어를 실행하여 JHipster 프로젝트를 생성합니다.
jhipster
JHipster 설정
-
프로젝트 유형 선택: 애플리케이션 유형(모노리틱 애플리케이션, 마이크로서비스 애플리케이션 등)을 선택합니다.
-
기술 스택 선택: 사용할 기술 스택(데이터베이스 유형, 캐시, 인증 메커니즘 등)에 대한 선택을 합니다.
-
기타 옵션 설정: 여러 추가 옵션들(테스트 프레임워크, 다국어 지원 등)에 대한 설정을 진행합니다.
사용 통계 보고
May JHipster anonymously report usage statistics to improve the tool over time?
이 단계에서는 JHipster 개발팀이 도구를 시간이 지남에 따라 개선할 수 있도록 익명으로 사용 통계를 보고할 수 있는지 묻습니다. 여기서 “Yes”를 선택하면 사용 통계가 익명으로 전송되며, 이는 JHipster를 개선하는 데 도움이 됩니다. “No”를 선택하면 어떠한 데이터도 전송되지 않습니다. 이는 완전히 자발적인 선택이며, JHipster 사용에 필수적인 요소는 아닙니다.
Application유형
Which *type* of application would you like to create?
JHipster에서는 주로 세 가지 유형의 애플리케이션을 생성할 수 있습니다: Monolithic application, Gateway application, 그리고 Microservice application. 각각의 설정에 대해 설명드리겠습니다.
-
Monolithic Application (단일 애플리케이션, 간단한 프로젝트에 권장)
- 단일 애플리케이션은 클라이언트 사이드 UI, 서버 사이드 애플리케이션, 그리고 데이터베이스가 모두 하나의 애플리케이션으로 패키징되는 구조입니다.
- 모든 기능이 하나의 애플리케이션 내에서 구현되므로, 관리 및 배포가 간단하며, 작거나 간단한 프로젝트에 적합합니다.
- 개발, 테스트, 배포가 비교적 간단하므로 속도와 효율성 측면에서 이점이 있습니다.
-
Gateway Application (게이트웨이 애플리케이션) : v
- 게이트웨이 애플리케이션은 마이크로서비스 아키텍처에서 클라이언트 요청을 처리하고 내부 마이크로서비스로 라우팅하는 역할을 합니다.
- 사용자 인증, 로드 밸런싱, 캐싱, SSL 종료 등의 기능을 수행할 수 있습니다.
- 마이크로서비스 기반의 복잡한 애플리케이션 구조에서 클라이언트 사이드 UI와 백엔드 마이크로서비스 사이의 중간 계층으로 동작합니다.
-
Microservice Application (마이크로서비스 애플리케이션)
- 마이크로서비스 애플리케이션은 애플리케이션의 기능을 작은 서비스로 나누어 개발하는 접근 방식입니다.
- 각 마이크로서비스는 독립적으로 배포할 수 있고, 서로 다른 프로그래밍 언어로 작성될 수 있으며, 각각의 데이터베이스를 가질 수 있습니다.
- 복잡한 애플리케이션을 개발하고, 유지보수하며, 확장성을 높이는데 유리합니다. 다만, 마이크로서비스 간의 통신, 데이터 일관성 유지, 서비스 디스커버리 등의 추가적인 관리가 필요합니다.
각 애플리케이션 유형의 선택은 프로젝트의 요구사항, 복잡성, 팀의 경험 및 인프라 구성 등을 고려하여 결정해야 합니다.
프론트엔드 프레임워크 선택
Angular, React, Vue 중 선택.
app names
Comma separated microfrontend app names.
쉼표로 구분된 마이크로프론트엔드 애플리케이션 이름을 의미합니다. 이 설정은 JHipster에서 마이크로서비스 아키텍처를 사용할 때 마이크로프론트엔드 애플리케이션을 관리하는 데 사용됩니다.
마이크로서비스 아키텍처에서는 백엔드 시스템을 여러 개의 독립된 서비스로 나누어 관리합니다. 마찬가지로, 마이크로프론트엔드 아키텍처는 프론트엔드를 여러 개의 독립적인 애플리케이션으로 나누어 관리하는 접근 방식입니다. 각 마이크로프론트엔드 애플리케이션은 특정 기능이나 비즈니스 영역을 담당하며, 독립적으로 개발하고 배포할 수 있습니다.
이 설정을 통해 JHipster 사용자는 프로젝트에 포함될 여러 마이크로프론트엔드 애플리케이션을 지정할 수 있으며, 이러한 애플리케이션들은 쉼표로 구분하여 나열합니다. 예를 들어, 사용자 관리, 주문 처리, 제품 카탈로그 등 서로 다른 기능을 갖는 프론트엔드 애플리케이션을 개별적으로 개발하고 관리할 수 있습니다.
JHipster는 이러한 마이크로프론트엔드 아키텍처를 지원하여 대규모 애플리케이션의 개발과 유지보수를 용이하게 합니다. 각 마이크로프론트엔드 애플리케이션은 독립적으로 업데이트하고 확장할 수 있으며, 전체 시스템의 유연성을 증가시킵니다.
frontend 테스팅 프레임워크
Besides Jest/Vitest, which testing frameworks would you like to use? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to
proceed)
추가로 사용하고 싶은 테스트 프레임워크를 선택하도록 요청하는 것입니다. Jest나 Vitest 외에 다른 테스트 프레임워크를 함께 사용할지 결정하는 단계입니다. 여기에서 제시된 옵션 중 하나가 Cypress입니다.
- Cypress란?
Cypress는 웹 애플리케이션을 위한 앞선 엔드-투-엔드(end-to-end) 테스팅 프레임워크입니다. 사용자의 입장에서 실제 브라우저에서 애플리케이션이 어떻게 동작하는지 테스트할 수 있게 해줍니다. 이는 개발자나 QA(Quality Assurance) 엔지니어가 애플리케이션의 사용자 인터페이스(UI)가 예상대로 작동하는지 검증할 수 있도록 도와줍니다.
-
선택 방법
- ( ) Cypress: 이 옵션을 선택하려면, 키보드에서
키를 누릅니다. 이는 Cypress를 프로젝트의 테스트 스택에 포함시키겠다는 의미입니다. 선택이 완료되면, Cypress를 사용하여 애플리케이션의 UI 테스트를 진행할 수 있습니다.
- ( ) Cypress: 이 옵션을 선택하려면, 키보드에서
-
추가 선택 옵션
- <a> to toggle all: 모든 옵션을 한 번에 선택하거나 선택 해제합니다.
- <i> to invert selection: 현재 선택된 옵션과 선택되지 않은 옵션을 반전시킵니다.
- <enter> to proceed: 선택을 완료하고 다음 단계로 넘어갑니다.
Cypress는 테스트의 작성, 실행 및 디버깅을 용이하게 하는 다양한 기능을 제공합니다. 예를 들어, 실시간으로 테스트를 실행하면서 테스트 실행 과정을 브라우저에서 직접 볼 수 있습니다. 또한, 테스트 실패 시 실패한 원인을 쉽게 파악할 수 있는 상세한 오류 보고 기능을 제공합니다. 이러한 특성 때문에 Cypress는 프론트엔드 개발자들 사이에서 인기 있는 테스트 도구 중 하나입니다.
backend 테스팅 프레임워크
Besides Junit, which testing frameworks would you like to use?
JHipster 프로젝트 설정 중 테스팅 프레임워크 선택 단계에서는 JUnit 외에도 사용할 수 있는 테스팅 프레임워크를 선택할 수 있습니다. 여기서 언급된 두 가지 옵션, Gatling과 Cucumber에 대해 간단히 설명드리겠습니다.
-
Gatling: Gatling은 고성능 부하 테스팅을 위한 오픈소스 툴입니다. 이는 웹 애플리케이션의 스트레스 테스팅과 성능 측정에 사용됩니다. Gatling을 사용하면 실제 사용자가 시스템을 사용하는 것과 유사한 방식으로 시스템에 부하(load)를 생성하고, 그 결과를 분석하여 시스템의 성능을 평가할 수 있습니다. Gatling은 Scala로 작성되었지만, 복잡한 성능 테스트 시나리오를 쉽게 구성할 수 있는 DSL(Domain Specific Language)을 제공합니다.
-
Cucumber: Cucumber는 행동 주도 개발(Behavior Driven Development, BDD)에 사용되는 오픈소스 툴입니다. Cucumber를 사용하면 비기술적인 이해관계자(예: 비즈니스 분석가, 제품 매니저)도 이해할 수 있는 언어(Gherkin)로 테스트 사례를 작성할 수 있습니다. 이러한 테스트 사례는 그대로 자동화된 테스트로 사용될 수 있으며, 개발 과정에서 요구사항이 정확히 충족되었는지 확인하는 데 도움을 줍니다.
설정 단계에서 여러분의 프로젝트 요구사항과 팀의 선호도에 따라 적절한 테스팅 프레임워크를 선택할 수 있습니다. 부하 테스트가 중요한 경우 Gatling을, BDD 접근 방식을 선호하거나 비기술적 이해관계자와의 소통이 중요한 경우 Cucumber를 선택할 수 있습니다.
서비스 검색
Which service discovery server do you want to use?
JHipster에서 마이크로서비스 아키텍처를 구축할 때 서비스 검색(Service Discovery)은 중요한 역할을 합니다. 서비스 검색 서버를 사용하면 마이크로서비스 간에 서로를 자동으로 찾을 수 있으며, 이는 마이크로서비스가 동적으로 확장되거나 축소될 때 유용합니다. JHipster는 여러 서비스 검색 옵션을 제공합니다:
-
Consul (권장): Consul은 HashiCorp에서 개발한 멀티 데이터센터 지원을 포함한 서비스 메쉬 솔루션입니다. 서비스 검색, 헬스 체크, 키/값 저장, 멀티 데이터센터 지원 등의 기능을 제공합니다. JHipster에서 Consul을 권장하는 이유는 그 안정성과 확장성 때문입니다. Consul은 마이크로서비스 아키텍처를 위한 강력하고 유연한 솔루션을 제공합니다.
-
JHipster Registry (레거시, Eureka 사용, Spring Cloud Config 지원 제공): JHipster Registry는 Netflix의 Eureka를 기반으로 하며, 서비스 검색과 함께 Spring Cloud Config를 통한 중앙 집중식 설정 관리 기능을 제공합니다. 이는 JHipster 생태계에서 오랜 시간 동안 사용되어 온 레거시 옵션이며, 여전히 유용한 기능을 많이 제공하지만, 새 프로젝트에서는 Consul이 권장됩니다.
-
No service discovery (서비스 검색 없음): 서비스 검색 없이 마이크로서비스 아키텍처를 설정할 수도 있습니다. 이 옵션은 마이크로서비스 간의 의존성이 매우 제한적이거나, 또는 다른 방식으로 서비스 간의 통신을 관리할 계획이 있는 경우에 선택할 수 있습니다. 하지만, 서비스 검색을 사용하지 않는 경우 마이크로서비스 간의 통신과 관리가 복잡해질 수 있으므로 신중하게 고려해야 합니다.
각 옵션은 서로 다른 요구 사항과 선호도를 가진 프로젝트에 적합할 수 있으므로, 프로젝트의 요구 사항과 팀의 선호도를 고려하여 최적의 옵션을 선택해야 합니다.
인증방식
Which *type* of authentication would you like to use?
JHipster에서 마이크로서비스 또는 모노리스 애플리케이션을 구성할 때, 인증 방식을 선택하는 것은 중요한 결정 중 하나입니다. JHipster는 주로 두 가지 인증 방식을 제공합니다:
-
JWT 인증 (상태 비저장, 토큰 사용): JSON Web Token(JWT)을 사용하는 인증 방식은 상태를 서버 측에 저장하지 않고 클라이언트 측에서 토큰을 관리합니다. 이 토큰 안에 사용자의 인증 정보와 권한이 포함되며, API 요청마다 해당 토큰을 서버에 전송해 사용자가 인증되었는지 확인합니다. JWT 인증은 확장성이 뛰어나고 애플리케이션의 성능에 부담을 주지 않으며, 특히 분산 시스템이나 마이크로서비스 아키텍처에 적합합니다.
-
OAuth 2.0 / OIDC 인증 (상태 저장, Keycloak 및 Okta와 함께 작동): OAuth 2.0은 외부 서비스(예: Keycloak, Okta)를 통해 인증을 처리하는 방식입니다. OpenID Connect(OIDC)는 OAuth 2.0을 기반으로 한 인증 레이어로, 사용자 인증을 위한 추가 기능을 제공합니다. 이 방식은 인증 정보를 서버 측에서 관리하며, 보다 강력한 보안과 유연성을 제공하지만, 구성과 관리가 복잡할 수 있습니다. 대규모 시스템이나 기업 환경에서 선호되는 방식입니다.
각 인증 방식은 그 특성과 장단점이 있으므로, 프로젝트의 요구 사항과 개발 및 운영 환경을 고려하여 적절한 방식을 선택해야 합니다. 예를 들어, 간단하게 시작하려는 경우나 마이크로서비스 아키텍처를 구축하려는 경우 JWT 인증을 고려할 수 있습니다. 반면, 기업 환경에서 복잡한 보안 요구 사항을 충족시켜야 하는 경우 OAuth 2.0/OIDC 인증을 고려할 수 있습니다.
캐싱
JHipster는 애플리케이션의 성능과 확장성을 개선하기 위해 다양한 캐싱 옵션을 제공합니다. 여기서 선택할 수 있는 옵션들은 다음과 같습니다:
-
No cache: 이 옵션을 선택하면, SQL 데이터베이스를 사용할 때 Hibernate 2차 레벨 캐시가 비활성화됩니다. 캐싱이 없을 경우 데이터베이스와의 각 요청은 직접 처리되어야 하므로, 성능이 저하될 수 있습니다. 특히 읽기 작업이 많은 애플리케이션에서 성능 저하가 눈에 띄게 될 수 있습니다.
-
Ehcache: Ehcache는 로컬 캐시로, 단일 노드 환경에서 사용됩니다. 메모리 내 캐싱을 통해 데이터 액세스 속도를 빠르게 하여 성능을 향상시킬 수 있습니다. 단일 애플리케이션 인스턴스에서 운영될 때 적합한 옵션입니다.
-
Caffeine: Caffeine 역시 로컬 캐시로, 빠른 성능을 자랑합니다. Ehcache와 유사하게 단일 노드 환경에서 사용되며, 고성능 메모리 내 캐싱 라이브러리입니다. 최신 알고리즘을 사용하여 높은 처리량과 낮은 지연 시간을 제공합니다.
-
Hazelcast: Hazelcast는 분산 캐시로, 여러 노드에서 운영될 수 있습니다. 이는 클러스터 환경에서 데이터를 공유하고, 게이트웨이 애플리케이션에 대한 속도 제한 지원 같은 추가 기능을 제공합니다. 확장성이 요구되는 대규모 분산 시스템에 적합합니다.
-
Infinispan: Infinispan은 하이브리드 캐시로, 분산 캐시 기능과 함께 로컬 캐싱 옵션도 제공합니다. 여러 노드에서 운영되며, 데이터 그리드 기능을 통해 높은 확장성과 성능을 제공합니다. 대규모, 복잡한 환경에서의 사용에 적합합니다.
각 캐싱 옵션은 애플리케이션의 요구사항, 환경, 그리고 운영 규모에 따라 선택될 수 있습니다. 단일 인스턴스 애플리케이션의 경우 Ehcache나 Caffeine이 적합할 수 있으며, 분산 환경이나 높은 확장성이 요구되는 경우 Hazelcast나 Infinispan이 더 나은 선택일 수 있습니다.
추가 기술
Which other technologies would you like to use? (Press <space> to select, <a>
to toggle all, <i> to invert selection, and <enter> to proceed)
>( ) Elasticsearch as search engine
( ) Apache Kafka as asynchronous messages broker
( ) Apache Pulsar as asynchronous messages broker
( ) API first development using OpenAPI-generator
추가로 사용하고자 하는 기술을 선택하는 단계입니다. 여기서 제공하는 옵션들은 JHipster 프로젝트에 다양한 기술을 통합하여 더 풍부한 기능을 구현할 수 있도록 돕습니다. 각 옵션에 대해 간략히 설명하겠습니다:
-
Elasticsearch as search engine: Elasticsearch는 고성능, 분산형 검색 및 분석 엔진으로, 대량의 데이터를 실시간으로 처리하고, 텍스트 기반 검색, 구조화된 검색, 분석 및 복잡한 쿼리를 지원합니다. 이 옵션을 선택하면 JHipster 프로젝트에 Elasticsearch를 검색 엔진으로 통합하여 데이터 검색 기능을 강화할 수 있습니다.
-
Apache Kafka as asynchronous messages broker: Apache Kafka는 높은 처리량, 내구성, 확장성을 가진 분산 메시징 시스템입니다. 대규모 데이터 스트림을 처리하고 저장할 수 있으며, 실시간 데이터 파이프라인과 스트리밍 애플리케이션을 구축하는 데 사용됩니다. 이 옵션을 선택하면 Kafka를 이용하여 비동기 메시지 전송 및 처리 기능을 프로젝트에 추가할 수 있습니다.
-
Apache Pulsar as asynchronous messages broker: Apache Pulsar 또한 분산형 메시징 및 스트리밍 플랫폼으로, 높은 처리량과 낮은 지연 시간을 제공합니다. Kafka와 유사하지만 다양한 서브스크립션 모델을 지원하고 별도의 서버리스 함수 기능을 제공하는 등 차별화된 특징을 가집니다. Pulsar를 선택하면 Kafka와 유사한 비동기 메시지 처리 기능을 다른 방식으로 구현할 수 있습니다.
-
API first development using OpenAPI-generator: API 우선 개발(First development)은 API 명세를 먼저 작성하고 이를 기반으로 애플리케이션의 백엔드 및 프론트엔드를 개발하는 접근 방식입니다. OpenAPI-generator를 사용하면 OpenAPI(Swagger) 명세를 기반으로 서버, 클라이언트 및 API 문서를 자동 생성할 수 있습니다. 이 옵션을 선택하면 API 중심의 개발 프로세스를 보다 효율적으로 진행할 수 있습니다.
다국어
Would you like to enable internationalization support?
애플리케이션에 다국어 지원을 추가할지 여부를 결정하는 단계입니다. 국제화(또는 i18n) 지원을 활성화하면 애플리케이션을 다양한 언어와 지역 설정에 맞게 쉽게 적용할 수 있게 됩니다. 이는 전 세계 사용자들에게 서비스를 제공하려는 경우 매우 유용합니다.
국제화 지원을 활성화하면, 다음과 같은 기능들이 포함됩니다:
-
언어 선택: 사용자가 UI에서 선호하는 언어를 선택할 수 있는 기능이 추가됩니다. JHipster는 기본적으로 여러 언어를 지원하며, 필요한 경우 추가 언어를 쉽게 추가할 수 있습니다.
-
지역화된 콘텐츠: 애플리케이션의 텍스트 요소들(예: 버튼, 메뉴, 메시지 등)이 사용자의 언어 선택에 따라 해당 언어로 표시됩니다. 이를 위해 리소스 번들이나 JSON 파일 등에 텍스트를 다양한 언어로 저장하고, 사용자의 언어 설정에 따라 적절한 번역을 제공합니다.
-
날짜 및 시간 형식: 다양한 지역에서 사용되는 날짜 및 시간 형식을 지원합니다. 예를 들어, 미국에서는 ‘월/일/년’ 형식을 사용하는 반면, 많은 유럽 국가에서는 ‘일/월/년’ 형식을 선호합니다.
-
통화 및 숫자 형식: 다른 지역에서 사용되는 통화와 숫자 형식을 지원합니다. 이는 금액 표시나 숫자 입력 시 매우 중요합니다.
국제화 지원을 활성화하려면 이 옵션을 선택하면 됩니다. JHipster는 선택한 언어 및 지역 설정에 맞게 애플리케이션을 구성하는 데 필요한 모든 설정과 파일을 자동으로 생성합니다. 이 기능은 애플리케이션의 접근성을 향상시키고, 다양한 문화와 언어를 사용하는 사용자들에게 매력적인 사용자 경험을 제공하는 데 도움이 됩니다.
JHipster 프로젝트 구성 완료
모든 설정이 완료되면 JHipster는 설정에 따라 애플리케이션을 생성합니다. 이제 개발을 시작할 수 있습니다. 생성된 프로젝트는 JHipster가 제공하는 많은 기능을 활용하여 개발을 더욱 빠르고 효율적으로 진행할 수 있도록 돕습니다.
댓글남기기