Inflearn brand logo image

인프런 커뮤니티 질문&답변

Stevens님의 프로필 이미지
Stevens

작성한 질문수

실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)

[실습] Spring Boot에서 Elasticsearch 활용해 검색 API 만들기

spring boot project 에 테이블을 여러 개 만드는 경우의 설정을 알고 싶습니다.

작성

·

38

0

안녕하세요.
spring boot project 에 테이블을 여러 개 만드는 경우의 설정을 알고 싶습니다.

강의에서는 products 테이블과 index 하나이지만
실제로 프로젝트를 하게 되면 테이블을 여러 개 만들게 됩니다.
가령, 학사관리 시스템의 경우 필요한 테이블이,
student, professor, department, subject, course_registration.. 최소한 이정도는 있어야 되는데요...
이러한 경우, Spring Boot JPA + Elasticsearch 조합으로 프로젝트를 진행하게 되는데. 테이블이 여러 개 있는 경우입니다.
관리자 페이지이도 있어야 되고요.
학생과 교수님의 경우에는 학생검색, 교수님 검색, 과목 검색, 학과 검색을 해야 되고, 관리자는 모두 다 검색할 수 있어야 됩니다. (수강신청내역검색 추가) 이런 경우에는 settings.json 파일을 어떻게 설정해야 되는지요?

자세한 답변 부탁드립니다.

 

 

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 Stevens님 ~

질문 주신 내용에 대해 답변드리며 테이블이 여러개인 경우의 구조 설계에 대해 팁을 드려볼게요 !

 

첫번째, 각 도메인마다 별도의 인덱스를 구성해 보세요 !

예를 들어 student, professor, subject, department, course_registration 등등 각각 Elasticsearch 인덱스로 분리 하는거죠 !

관계형 데이터 베이스와 Elasticsearch 인덱스 1:1은 아니지만, 도메인이 명확히 분리되어 있으면 각각 인덱스로 나누는 것이 일반적으로 좋습니다 !

 

두번째로, 각 인덱스별로 settings.json을 따로 만들어서 구성해보세요 !

settings_student.json, settings_professor.json 등으로 나누는 게 프로젝트를 관리하고 유지보수하기에 좋아요 !

application.yml이나 ElasticsearchConfig에서 인덱스별로 설정 로직을 따로 관리하시는 것도 복잡성을 낮추는데 도움이 됩니다 !

 

세번째로 관리자, 학생, 교수 권한에 따라 검색 범위 조정을 해보시는것도 추천드려요 !

Spring Security 또는 사용자 역할을 통해 API 레벨에서 필터링을 하면, Elasticsearch에서 별도 role 필드를 활용해 검색 결과 제한이 가능 합니다 !!

 

우선 Elasticsearch에 대한 설계는 너무 많이 생각하시는것 보단 위 세가지 큰 설계를 토대로 설정해보시길 추천드려요 ! 프로젝트의 서비스 특성 및 기획자에 따라 디테일한 설정은 매우 많고 다양하게 발생해요 ~ 그래서 기획자분과 많은 소통을 하시며 조금씩 천천히 구체화해 나가시길 추천드려요 !!

 

해당 강의 실습은 많은 디버깅과 사전 준비를 해서 그렇지,

실제 프로젝트에서는 해당 강의와 같이 '설계 완료 ! 개발 시작!'인 경우는

거의 없다고 보시면 됩니다 ㅎㅎ

프로젝트가 진행됨에 따라 기획자 및 프론트엔드 분들과 논의하며

설계와 개발이 병행되는게 당연하니 설계에 너무 큰 걱정보다는 팀원분들과 많은 소통을 하시며

천천히 꾸준히 디벨롭해 보시길 추천드려요 !! 늘 파이팅입니다 😄😄

 

혹시라도 추가로 궁금한 점이 있으시면 언제든 편하게 질문 주세요 ~~

0

안녕하세요, 인프런 AI 인턴입니다. Stevens님.

Spring Boot 프로젝트에서 여러 데이터베이스 테이블을 설정하는 방법과 JPA 및 Elasticsearch를 통합하여 다양한 검색 기능을 구현하는 방법을 알아볼 수 있습니다.

  1. Spring Data JPA 설정:

    • 여러 개의 테이블을 사용하려면 각 테이블에 연결된 엔티티 클래스를 정의해야 합니다. 각 엔티티는 데이터베이스의 테이블과 매핑되며, @Entity 어노테이션을 사용하여 선언됩니다.
    • 각 엔티티 클래스는 각자의 Repository 인터페이스와 매핑되어 CRUD 기능을 수행할 수 있습니다.
  2. Elasticsearch 설정:

    • Spring Data Elasticsearch를 활용하면 각 엔티티에 대한 Elasticsearch 인덱스를 생성하여 검색할 수 있습니다.
    • 복수의 인덱스를 생성하려면 각 엔티티 클래스에 @Document 어노테이션을 사용하여 매핑을 설정합니다. 예를 들어, student 엔티티는 Elasticsearch에서 students 인덱스와 매핑될 수 있습니다.
  3. settings.json 설정:

    • settings.json은 Elasticsearch 인덱스의 설정을 포함합니다. 예를 들어, 인덱스의 분석기 설정, 복제본 수, 샤드 수 등의 설정을 포함합니다.
    • 각 엔티티별로 별도의 인덱스 설정이 필요하다면, 이를 개별적으로 설정할 수 있습니다. 특히, 분석기 설정은 검색 성능 및 특정 필드의 검색 최적화에 중요합니다.
  4. 관리자 및 사용자 검색 기능:

    • 관리자 페이지에서는 모든 엔티티의 데이터를 검색할 수 있도록 설정합니다. 이 경우 모든 엔티티에 대한 통합 검색 기능을 제공하는 API 엔드포인트를 구현할 수 있습니다.
    • 학생 및 교수님에게는 특정 검색 기능만 노출되도록 API 접근 권한을 세분화할 수 있습니다.

관련된 기존 질문에 대한 답변을 찾기 어렵지만, 다음과 같은 방법으로 설정을 시작해 보시기 바랍니다:

  1. Spring Data JPA와 Elasticsearch를 함께 사용하는 방법 을 참고하세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Stevens님의 프로필 이미지
Stevens

작성한 질문수

질문하기