JHipster MSA 구축

개요

Mricroservice는 수많은 장점을 가지고 있지만 구축하는건 생각보다 쉽지 않습니다. JHipster와 함께 MSA구축을 하면 한층 쉽게 다가갈수 있다고 생각 되어 글을 작성 하게 되었습니다.

본 글에서는 크게

  • 개발 MSA 환경 구축
  • Docker Compose를 활용한 Service Mash

나뉘며 프로젝트 생성부터 Microservice Gateway와 Microservice Application생성과 더불어 상용 배포를 위한 Docker Compose 설정까지 알아 보겠습니다.

개발 MSA 환경 구축

MSA diagram

JHipster란?

JHipster란?

제이힙스터
간단히 정의 하면 자바 기반 생성(generate) 개발 플랫폼 이라고 말씀 드릴 수 있습니다.

기존 뛰어난 생산성으로 흥한 개발 플랫폼인 Ruby의 Ruby on Ralse나 Node.js의 Meteor.js등 애플리케이션 개발을 생성 도구 활용으로 인기를 었습니다.

그동안 Spring 진영에서도 생성 도구를 활용한 개발이 없어 생산성에서 뒤쳐졌지만, JHipster에서 만들게 되어 Spring에서도 빠른 생산성을 확보하게 되었습니다.

생성 도구는 Yeoman이라는 기존 웹 보일러플레이트 프로젝트 생성 도구인데 JHipster에서 Yeoman기반으로 만들어 활용 하였습니다.

해외판 전자정부프레임워크? JHipster에 대해 알아 보자!

개요

우리나라에서 공공기관과 민간기업에서 많이 사용하는 전자정부프레임워크가 있습니다. 업데이트도 느리거니와 생성도 불편하다고 생각 됩니다. 그에 반해 해외에서는 Yeoman을 가지고 쉽게 Spring Boot 개발 환경을 만들 수 있고 더불어 편한 유지 보수를 할 수 있게 도와주는 JHipster를 소개 합니다.

해외에서 자바 개발 플랫폼으로 핫한 프로젝트 입니다.

제이힙스터깃허브

오브젝트 매핑과 슈퍼 타입 토큰

자바 프로젝트를 진행 하면서 외부 데이터를 가지고 VO클래스에 매핑하고 여러가지 연산작업을들 합니다. 그중에서도 VO클래스의 정보를 가져와 매핑하는 방법에 대해서 궁금하게 되었고 자바에서 제공하는 리플렉션API와 간단한 예제들을 통해서 오브젝트 매핑에 대해 알아 보겠습니다.

클래스 정보 가져오기

자바는 java.lang.reflect패키지의 API를 가지고 클래스의 정보와 필드 어노테이션 정보까지 모두 가져 올수 있는 리플렉션을 제공 합니다.

그래서 이렇게 구할수 있는 정보를 가지고 외부에서 가져오는 json 데이터나 sql문을 가져올시 매핑을 하여서 해당 오브젝트로 값을 삽입해 넘겨줄수 있습니다.

QueryDSL

JPA

1 QueryDSL 소개

  • JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API
  • JPA 크리테리아에 비해서 편리하고 실용적임
  • 쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발 할 수 있는 프로젝트가 바로 QueryDSL 이다.
  • 오픈소스

객체지향 쿼리 언어

JPA

1 JPQL 소개

JPQL(Java Persistence Query Language) : 엔티티 객체를 조회하는 객체지향 쿼리.

  • JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다.
  • JPQL은 객체지향 쿼리 언어다. 테이블X 엔티티O
  • JPQL은 결국 SQL로 변환된다.

값 타입

JPA
  • 기본값 타입basic value type
    • 자바 기본 타입(예: int, double)
    • 래퍼 클래스(예: Integer)
    • String
  • 임베디드 타입embedded type(복합 값 타입)
  • 컬렉션 값 타입collection value type

복합 값 타입

복합값 정의 : @Embeddable 어노테이션으로 정의

프록시와 연관관계 관리

JPA
  • 프록시 : 연관된 객체를 실제 사용하는 시점에 데이터베이스에서 조회 하는 기술
  • 지연로딩: 연관된 객체를 실제 사용하는 시점에 불러 오는것
  • 즉시로딩 : 연관된 객체를 조인을 통하여 함께 불러오는것
  • 영속성 전이 : 연관된 객체를 함께 저장하거나 삭제
  • 고아 객체 : 부모객체가 삭제시 홀로 남겨지는 객체

8.1 프록시

엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.

JPA는 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다.

지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다.

고급 매핑

JPA
  • 상속 관계 매핑: 객체의 상속 관계를 데이터베이스에 어떻게 매핑하는지 다룬다.
  • @MappedSuperclass: 등록일, 수정일 같이 여러 엔티티에서 공통으로 사용하는 매핑 정보만 상속받고 싶으면 이 기능을 사용하면 된다.
  • 복합 키와 식별 관계 매핑: 데이터베이스의 식별자가 하나 이상일 때 매핑하는 방법을 다룬다. 그리고 데이터베이스 설계에서 이야기하는 식별 관계와 비식별 관계에 대해서도 다룬다.
  • 조인 테이블: 테이블은 외래 키 하나로 연관관계를 맺을 수 있지만 연관관계를 관리하는 연결 테이블을 두는 방법도 있다. 여기서는 이 연결 테이블을 매핑하는 방법을 다룬다.
  • 엔티티 하나에 여러 테이블 매핑하기: 보통 엔티티 하나에 테이블 하나를 매핑하지만 엔티티 하나에 여러 테이블을 매핑하는 방법도 있다. 여기서는 이 매핑 방법을 다룬다.