그래들을 이용한 스프링부트 프로젝트를 내가 설계해보자
우선 두서 없이 생각나는대로 정리하기 위해 쓰는 마구잡이식 글이기 때문에 가독성이 전혀 고려되지 않은 포스트이다.
Gradle 프로젝트 생성하기
IntelliJ를 실행하여 Gradle 프로젝트를 생성한다.
Gradle 기본환경 구성하기
프로젝트가 생성되면 ‘build.gradle’을 수정한다. 아래의 사이트들을 참고했다.
Spring - Gradle
Spring - Spring Boot
Baeldung - Spring Boot Gradle Plugin
1 |
|
- 나중에 웹 페이지(JSP, HTML)들을 적용할 것이기에, WAR로 압축
- JAR(Java Archive), WAR(Web Application Archive)
JSP는 JAR에서 더이상 지원안된다고 spring 개발자가 stackoverflow에 댓글 단것을 보았다.
- JAR(Java Archive), WAR(Web Application Archive)
- 예전엔 implementation 보다 compile을 많이 사용했는데 공식문서에서는 implementation을 추천함
- complie은 하나의 모듈에 직간접적으로 의존하는 모듈 전체를 빌드해서 속도면에서도 많이 느리다 함
기본적으로 이정도인 내용만 설정해 두면 사용하는데는 문제가 없을 것이다. 모르면 공식문서를 보자.
이후 DB 세팅도 너무 편리해졌다.
하이버네이트를 기본 jpa 공급자로 세팅하기 때문에 더이상 entityManagerFactory 빈을 설정할 필요가 없다고 한다.
하지만… 난 다른 멀티 DB를 사용할 경우를 가정해서 entityManagerFactory를 직접 설정하도록 하겠다.
기본적으로 application.properties에 datasource에 대한 값은 설정이 되어있을 것이다.
1 |
|
- 우선 다중 DB에서 빈 이름도 정해 주었으나, @Primary 어노테이션을 통해 이름을 지정하지 않고 명시적으로 주입하여 사용 가능, 하나의 타입에 빈 클래스가 여러개일 경우 우선순위를 가진다.
- EntityManagerFactory에는 원래 SessionFactory만 사용하였는데, 찾아보니 SessionFactory는 JPA의 EntityManagerFactory를 상속한 클래스라 보면 됨, 거기서 LocalEntityManagerFactoryBean과 LocalContainerEntityManagerFactory가 있는데 멀티 DB를위한 Datasource를
적용하기 위해선 해당 클래스를 사용해야 한다. - hibernate.hbl2ddl.auto 값은 데이터베이스 자동 업데이트를 쓰기위해
update
로 주었다. 이렇게 해놓으면 내 entity에서@Column
을 사용해 관계를 매핑해 놓을경우 서버 재시작 시 자동으로 디비에도 컬럼이 생긴다. 신기한데 써보면서 문제가 생길것 같다 일단 써보자.hibernate.hbm2ddl.auto는 자동 스키마생성으로 기본값 : none 부터, create-only, create, create-drop, validate, update 동작이 있다.
참조 : Hibernate - Automatic schema generation - hibernate.dialect 값은 현재 postgreSQL 13버전이 설치되어 있으나 지금 hibenate 라이브러리는 5.4이고 5.4버전 공식문서에서 dialect 클래스는 10버전밖에 없고 이후버전도 지원한다고 하니
org.hibernate.dialect.PostgreSQL10Dialect
로 주었다.hibernate.dialect는 마치 지역 고유의 방언처럼 DB별 고유 방언이 있기때문에 해당 부분을 설정하는 것이다. 참조문서에는 9버전 까지밖에 없지만 클래스 찾기를 해보면 10버전까지 있다. 그런데 사실 해당값은 비워도 된다고 한다. Hibernate 3.2 버전부터 사용하는 방언을 감지하는 것을 도입했고,
3.3버전부터는org.hibernate.dialect.resolver.DialectResolver
구현체에 의존해서 더 강력한 방법으로 자동 설정한다고 한다.
참조 : Hibernate - Database-Dialect
참조 : Hibernate - Dialect resolution - PlatformTransactionManager를 통해 트랜잭션 매니저를 설정하여 기본적인 DB세팅을 한다.
1 |
|
간단하게 테스트 해보니 잘 된다.
굿!
작성자, DevInSpace