[환경]
Spring Tool Suite(STS) 3.9.5 RELEASE
Spring Boot 2.1.8.RELEASE
jdk 1.8.0_181
MySQL 8.0.17
이번 포스터에서는 Hibernate Search, Lucene을 사용하는 검색 기능에 대해서 다뤄보도록 하겠습니다.
앞에서 언급했다시피 이번 프로젝트에선 ORM을 위해 Hibernate와 JPA를 사용했습니다. 이미 Hibernate와 JPA를 사용하고 있다면 추가 설정 없이 아주 쉽게 Hibernate Search를 이용할 수 있다는 장점이 있습니다. 또한 고성능의 확장 가능한 Full-Text 검색 엔진 라이브러리인 Apache Lucene을 직접적으로 사용하여 강력한 분석 프레임워크의 모든 기능을 제공할 수 있다고 공식 홈페이지에 나와있습니다.
ElasticSearch와도 통합하여 확장이 가능하다고 나와있지만 이번 WIKI 프로젝트에 그 정도까지는 필요 없을 것 같으니 다루지 않도록 하겠습니다.
또한 최근에는(2019-09-24) Hibernate Search 6.0.0.Beta1 버전이 출시되었습니다.
https://hibernate.org/search/
[환경]
Spring Tool Suite(STS) 3.9.5 RELEASE
Spring Boot 2.1.8.RELEASE
jdk 1.8.0_181
MySQL 8.0.17
이번 포스터에서는 Thymeleaf Layout Dialect를 사용하여 Layout을 구성하는 법을 다루고, GitHub에 오픈소스로 공개되있는 Markdown js 프로젝트를 사용하여 WIKI 작성 페이지를 만들도록 하겠습니다.
[환경]
Spring Tool Suite(STS) 3.9.5 RELEASE
Spring Boot 2.1.8.RELEASE
jdk 1.8.0_181
MySQL 8.0.17
이번 포스터에서는 Spring Boot에서 공식 지원하는 템플릿 엔진 중 하나인 Thymeleaf의 문법 중에 WIKI 프로젝트에서 사용한 문법들을 다뤄보도록 하겠습니다. Thymeleaf는 서버에서 템플릿에 따라 html을 그려서 클라이언트에 전달해주는 서버 사이드 템플릿 엔진입니다.
[환경]
Spring Tool Suite(STS) 3.9.5 RELEASE
Spring Boot 2.1.8.RELEASE
jdk 1.8.0_181
MySQL 8.0.17
저번 포스터에서 JPA ManyToMany 관계에 대해서 살펴봤습니다. Entity 구성이 끝났으니 이제 ManyToMany 관계에서 어떻게 Join 테이블에 접근하는지 알아야 합니다.
Spring Data JPA의 JpaRepository를 사용할 경우 기본적인 SELECT, INSERT, DELETE 쿼리를 메소드명의 조합으로 작성할 수 있는데, UPDATE 쿼리의 경우 @Query 어노테이션을 사용하여 작성해야 합니다.
이번 포스터에서는 이 두 가지 내용을 다뤄보도록 하겠습니다.
[환경]
Spring Tool Suite(STS) 3.9.5 RELEASE
Spring Boot 2.1.8.RELEASE
jdk 1.8.0_181
MySQL 8.0.17
이번 포스터에서는 @ManyToMany 어노테이션을 사용하여 두 개의 Entity 사이에 다대다 관계를 mapping 하는 방법을 다뤄보겠습니다.
DataBase에는 글의 정보를 담고 있는 Board 테이블과 태그 정보를 담고 있는 Tag 테이블이 있습니다. WIKI 프로젝트 특성상 하나의 Board는 여러 개의 Tag를 가질 수 있고, 하나의 Tag 또한 여러 개의 Board에 포함될 수 있습니다. 저는 @JoinTable 어노테이션을 사용해서 Board 테이블과 Tag 테이블 사이에 다대다 관계를 성립시켜주는 테이블을 생성하는 방법을 사용할 것입니다. RDB에서 정규화를 신경 쓰면서 다대다 관계를 테이블 두개로 표현하는 방법은 없다고 생각합니다. 물론 @JoinTable과 @ManyToMany 어노테이션을 사용하지 않고 수동으로 테이블들을 Create 해주고 Join 쿼리를 통해 튜플들에 접근해도 됩니다. 하지만 이렇게 할 경우 데이터 무결성에 위배될 수도 있고, Board를 저장하거나 수정할 때 원래면 작성하지 않아도 될 추가적인 코드가 발생할 것입니다.