JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] MySQL에 데이터 삽입/삭제 시 Elasticsearch에도 같이 반영되게 만들기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
define-elasticsearch-document-in-spring-boot
type
post
updatedAt
Dec 6, 2025 04:48 AM

✅ MySQL에 데이터 삽입/삭제 시 Elasticsearch에도 같이 반영되게 만들기

이전 강의에서 설계했던 인프라 아키텍처에 맞게 작동하도록 만들어보자.
notion image
 
  1. ProductDocumentRepository 의존성 추가
    1. ProductService
      @Service public class ProductService { private final ProductRepository productRepository; private final ProductDocumentRepository productDocumentRepository; public ProductService(ProductRepository productRepository, ProductDocumentRepository productDocumentRepository) { this.productRepository = productRepository; this.productDocumentRepository = productDocumentRepository; }
       
  1. 상품 등록 로직 수정하기
    1. ProductService
      public Product createProduct(CreateProductRequestDto createProductRequestDto) { Product product = new Product( createProductRequestDto.getName(), createProductRequestDto.getDescription(), createProductRequestDto.getPrice(), createProductRequestDto.getRating(), createProductRequestDto.getCategory() ); Product savedProduct = productRepository.save(product); ProductDocument productDocument = new ProductDocument( savedProduct.getId().toString(), savedProduct.getName(), savedProduct.getDescription(), savedProduct.getPrice(), savedProduct.getRating(), savedProduct.getCategory() ); productDocumentRepository.save(productDocument); return savedProduct; }
       
  1. 상품 삭제 로직 수정하기
    1. public void deleteProduct(Long id) { productRepository.deleteById(id); productDocumentRepository.deleteById(id.toString()); }
 
 

✅ 잘 작동하는 지 테스트해보기

  1. 기존 MySQL 테이블 삭제하기
    1. notion image
 
  1. Kibana에서 Elasticsearch 인덱스 삭제하기
    1. DELETE /products
       
  1. Spring Boot 서버 실행시키기
    1. Spring Data JPA와 Spring Data Elasticsearch에 의해 Spring Boot 프로젝트에서 정의한 객체에 맞게 MySQL에 테이블이 생성되고, Elasticsearch에 인덱스가 생성됐을 것이다.
       
  1. Postman으로 데이터 넣어보기
    1. localhost:8080/products
      { "name": "삼성 갤럭시 S25", "description": "<h2>최신 스마트폰</h2><p>AI 기능과 강력한 배터리를 갖춘 프리미엄 스마트폰입니다.</p>", "price": 1290000, "rating": 4.8, "category": "ELECTRONICS" }
      notion image
       
  1. 데이터 잘 들어갔는 지 확인하기
    1. MySQL (Datagrip)
      notion image
       
      Elasticsearch (Kibana)
      notion image
       
  1. Postman으로 데이터 삭제해보기
    1. notion image
 
  1. 데이터 잘 삭제됐는 지 확인하기
    1. MySQL (Datagrip)
      notion image
       
      Elasticsearch (Kibana)
      notion image
 
 
👨🏻‍🏫
Spring Boot에 Elasticsearch에 대한 코드를 추가해줌으로써 데이터 동기화 문제를 해결했다. 데이터를 삽입하면 MySQL, Elasticsearch 둘 다 동시에 삽입이 되고, 데이터를 삭제하면 MySQL, Elasticsaerch 둘 다 동시에 삭제가 된다. 그럼 다음 강의에서는 본격적으로 자동 완성 API와 검색 API를 만들어보자.
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
type
series-footer
updatedAt
Dec 6, 2025 05:12 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.