JHipster 시리즈 6화 - JHipster 프로젝트 구조와 코드 흐름 분석하기
JHipster로 생성된 Spring Boot + React 기반 프로젝트의 전체 디렉토리 구조, 주요 모듈, 코드 흐름을 실무 수준에서 상세하게 해부합니다. 실전 개발 시 반드시 알아야 할 핵심 구조 가이드.
왜 프로젝트 구조를 이해해야 하는가?
JHipster는 단순 템플릿이 아닙니다.
자동으로 구성되는 백엔드 + 프론트엔드 + DevOps + 보안을 포함하는 완성형 프로젝트입니다.
하지만 규모가 커지고 팀이 늘어나면 구조를 이해하고, 커스터마이징할 수 있는 역량이 핵심 경쟁력이 됩니다.
이번 글에서는 실무 관점에서 JHipster 프로젝트의 전체 구조와 코드 흐름을 상세하게 분석합니다.
JHipster 전체 구조 (Monolith 기준)
├── src/
│ ├── main/
│ │ ├── java/ → Spring Boot 백엔드
│ │ ├── resources/ → 설정파일, 메시지, SQL
│ │ └── webapp/ → React 프론트엔드
│ └── test/ → 테스트 코드
├── build.gradle or pom.xml → 빌드 도구
├── package.json → 프론트 의존성
├── .yo-rc.json → JHipster 설정 파일
├── Dockerfile, docker-compose/ → 컨테이너 설정
└── README.md
백엔드(Spring Boot) 구조
1. 엔트리 포인트
src/main/java/com/example/demo/DemoApp.java
- Spring Boot Application 시작 지점
- @SpringBootApplication으로 모든 설정 포함
2. 핵심 패키지
패키지설명
| config | Spring Security, Database, Cache 설정 |
| domain | Entity 클래스 (JPA) |
| repository | JPA Repository (데이터 접근) |
| service | Business Logic |
| web.rest | REST Controller |
| security | JWT, OAuth2 보안 설정 |
JHipster 표준 코드 흐름
Request → REST Controller → Service → Repository → DB
예시:
@RestController
@RequestMapping("/api/books")
public class BookResource {
private final BookService bookService;
@GetMapping
public List<Book> getAllBooks() {
return bookService.findAll();
}
}
3. Entity 생성 예시
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue
private Long id;
@NotNull
private String title;
private String author;
}
JDL → Entity → Repository + REST + Front 자동 생성 구조입니다.
프론트엔드(React) 구조
src/main/webapp/app/
├── account/ → 로그인, 회원가입
├── admin/ → 관리 기능
├── entities/ → CRUD Entity 화면
├── shared/ → 공통 컴포넌트
├── modules/ → 커스터마이징 페이지 권장 위치
├── app.tsx → 전체 Router 설정
├── config/ → API URL, i18n 등 설정
라우팅 구조
<Route path="/entity/book" element={<Book />} />
<Route path="/account/login" element={<Login />} />
- react-router-dom 기반의 SPA 라우팅
- Redux Toolkit + Axios로 API 호출
DevOps 및 기타 설정 파일
파일명용도
| .yo-rc.json | JHipster 생성 옵션 저장 |
| Dockerfile | Application Docker 이미지 빌드 |
| docker-compose/ | DB, Keycloak, Elastic 등 연동 설정 |
| application-dev.yml | 개발 환경별 Spring Boot 설정 |
| application-prod.yml | 운영 환경 설정 |
| package.json | 프론트 의존성 관리 |
| build.gradle/pom.xml | 백엔드 의존성 관리 |
전체 코드 흐름 요약
사용자 → React 페이지 → Redux Dispatch → Axios → REST API (Spring Controller) → Service → Repository → DB
프론트와 백엔드는 완전히 분리되지만,
JHipster에서는 도메인 모델과 API 스펙이 양쪽에서 동기화되어 있어 빠른 개발이 가능합니다.
실전 팁: 실무에서 반드시 알아야 할 포인트
항목설명
| Entity 확장 | JDL → Entity 추가 → 코드 자동 생성 |
| Security 설정 | SecurityConfiguration.java 참고 |
| Custom Module | app/modules 폴더 생성 후 페이지 추가 |
| Dev 환경 분리 | application-dev.yml 활용 |
| API 연동 수정 | axios.ts 및 Redux Slice 구조 참고 |
대형 프로젝트 사례
한 SaaS 팀에서는 JHipster의 기본 구조를 유지한 채,
다음과 같이 분리 전략을 사용했습니다:
- 백엔드 → 별도 Git 저장소 분리 (Spring Domain 유지)
- 프론트엔드 → Monorepo + Storybook + Tailwind 적용
- DevOps → GitHub Actions + Docker + Kubernetes 배포
결과적으로 초기 구축 기간 4주 → 1주로 단축
유지보수 비용 약 35% 절감 효과를 얻었습니다.
마치며 – JHipster는 조직화된 구조다
JHipster의 가장 큰 장점은:
- 작은 팀도 엔터프라이즈 수준의 표준 구조를 바로 쓸 수 있고
- 커스터마이징 시에도 체계적으로 확장할 수 있다는 점입니다.
이번 편을 통해 구조를 이해했다면,
다음 단계에서는 마이크로서비스로 확장하거나 코드 생성기를 직접 확장하는 도전에 나설 수 있습니다.
다음 화 예고
JHipster 시리즈 7화 - 마이크로서비스 구조 전환 – Gateway와 Service Registry 실습
모놀리식에서 Microservice로 구조를 전환하는 방법, Gateway 설정, Service Registry 활용법을 실습 중심으로 정리합니다.