Tuesday, May 30, 2023

Springboot와 MySQL을 사용하여 Full-Text 검색 기능 구현하기

Springboot와 MySQL을 사용하여 Full-Text 검색 기능 구현하기

이 문서에서는 Spring과 MySQL을 사용하여 기본 Full-Text 검색 기능을 구현하는 방법을 소개합니다.

1. MySQL Full-Text 지원 테이블 생성

MySQL에서 Full-Text 검색을 사용하려면 해당 테이블에 FULLTEXT 인덱스를 만들어야 합니다. 아래 예시와 같이 필요한 열에 FULLTEXT 인덱스를 생성합니다:

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT (title, content)
) ENGINE=InnoDB;

2. Spring Boot 프로젝트에 MySQL 연결

Spring Boot에서 MySQL에 연결하려면 pom.xml에 MySQL Connector/J 의존성을 추가해야 합니다:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

그리고, application.properties 파일에 다음과 같이 MySQL 연결 정보를 설정합니다:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update

3. Article Entity 및 Repository 생성

Article Entity 및 ArticleRepository를 생성하여 데이터베이스와 연결을 설정합니다:

@Entity
public class Article {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String content;

    // 생략: Getters, Setters, and Constructors
}
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
}

4. Full-Text 검색을 위한 Custom Query 생성

ArticleRepository에 Custom Query를 생성하여 MySQL의 Full-Text 검색 기능을 활용할 수 있도록 합니다:

@Query(value = "SELECT * FROM articles WHERE MATCH (title, content) AGAINST (?1)", nativeQuery = true)
List<Article> fullTextSearch(String keyword);

이제 fullTextSearch 메소드를 사용하여 제목과 내용에 일치하는 키워드를 포함하는 모든 기사를 검색할 수 있습니다.

5. 검색 기능을 사용하는 REST API 구현

검색 기능을 사용하는 REST API를 구현하려면 Spring Web 의존성도 추가해야 합니다:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

이제 검색 컨트롤러를 생성할 수 있습니다:

@RestController
@RequestMapping("/api/articles")
public class ArticleController {
    private final ArticleRepository articleRepository;

    // 의존성 주입 
    public ArticleController(ArticleRepository articleRepository) {
        this.articleRepository = articleRepository;
    }

   @GetMapping("/search")
   public List<Article> search(@RequestParam String keyword) {
       return articleRepository.fullTextSearch(keyword);
   }
}
 

이렇게 하면 /api/articles/search?keyword=검색어 엔드포인트를 통해 검색 기능을 사용할 수 있습니다.

필요에 따라 Full-Text 검색 기능을 커스터마이징하거나 확장할 수 있습니다. 이 문서는 Springboot와 MySQL을 사용하여 기본 Full-Text 검색 기능을 구현하는 방법을 소개하였습니다. 원하는대로 검색 기능을 적용하기 위해 이 가이드를 참조하세요.


0 개의 댓글:

Post a Comment