기술 가이드

AlmaLinux 9에 Apache Solr 설치 및 최적화

6 min read 검색 서버 업데이트됨 01 Oct 2025
AlmaLinux 9에 Apache Solr 설치 및 최적화
AlmaLinux 9에 Apache Solr 설치 및 최적화

중요: 실서비스에 배포하기 전에는 인증, 방화벽, 모니터링, 백업 전략을 반드시 구성하세요.

소개

Apache Solr 설치 대표 이미지

Apache Solr(이하 Solr)는 Apache Lucene 기반의 엔터프라이즈급 검색 플랫폼입니다. Solr는 고가용성(복제, 자동 장애조치), 분산 색인, 장애 허용성, 높은 성능을 제공합니다. 많은 대형 인터넷 서비스에서 검색 플랫폼으로 사용됩니다.

이 문서에서는 AlmaLinux 9 환경에서 Solr 9.x를 설치하고, 최대 힙 메모리(SOLR_HEAP)를 설정하고, 시스템 제한(ulimit)을 조정하며, 기본 인증으로 Solr을 보호하는 방법을 다룹니다. 실습 예시는 내부 IP 192.168.10.15와 서버 메모리 8GB를 기준으로 합니다.

빠른 준비물

  • AlmaLinux 9 서버(권장 메모리 4GB 이상; 예제는 8GB)
  • sudo 권한이 있는 비-root 사용자
  • 외부 인터넷 연결(바이너리 다운로드용)

목차

  • 사전 준비
  • Java(OpenJDK 11) 설치
  • Apache Solr 바이너리 설치
  • Solr 구성 및 힙 설정
  • ulimit 및 firewalld 설정
  • 기본 인증 설정
  • 첫 인덱스(코어) 생성
  • 운영 및 보안 체크리스트
  • 문제 해결 및 검증
  • 대안 및 확장 옵션
  • 용어집 및 요약

사전 준비

다음 환경을 갖추었는지 확인하세요.

  • AlmaLinux 9 부트된 인스턴스
  • 메모리, 디스크 여유 공간 확인
  • 포트 8983 을 사용할 수 있는지 네트워크 확인

터미널에서 다음 명령으로 메모리/디스크를 확인합니다.

free -h
lsblk

Java OpenJDK 11 설치

Solr 9.x는 Java 11 이상을 요구합니다. AlmaLinux AppStream 저장소에서 OpenJDK 11을 설치합니다.

sudo dnf install java-11-openjdk java-11-openjdk-devel

설치 후 버전을 확인합니다.

java --version

정상 설치 시 OpenJDK 11 버전 정보가 출력됩니다.

OpenJDK 설치 확인 화면

Apache Solr 설치 (바이너리 사용)

  1. 설치에 필요한 도구를 먼저 설치합니다.
sudo dnf install curl lsof chkconfig -y
  1. Solr 9.2.1 바이너리를 다운로드합니다.
curl -qO https://downloads.apache.org/solr/solr/9.2.1/solr-9.2.1.tgz
  1. 설치 스크립트만 추출합니다.
tar xzf solr-9.2.1.tgz solr-9.2.1/bin/install_solr_service.sh --strip-components=2

추출 후 현재 디렉토리에 install_solr_service.sh 스크립트가 있어야 합니다.

  1. 설치 스크립트 실행으로 Solr를 설치합니다.
sudo bash ./install_solr_service.sh solr-9.2.1.tgz

설치가 성공하면 서비스가 자동으로 시작되고 기본 포트 8983로 실행됩니다.

Solr 설치 완료와 서비스 정보

  1. (예제) 자동 시작 후 프로세스가 보이면 종료합니다(예제는 PID 12084).
kill -9 12084

그리고 서비스로 다시 시작합니다.

sudo service solr start

상태 확인:

sudo service solr status

Solr 서비스 상태

Solr 구성 및 힙 메모리 설정

Solr가 실행되는 JVM의 힙을 서버 메모리에 맞게 조정해야 합니다. 이 예제에서는 8GB 서버에 SOLR_HEAP=4g를 설정합니다.

  1. 커널 공유메모리와 큰 페이지 설정(선택적 최적화):
sudo sh -c "echo 4294967295 > /proc/sys/kernel/shmmax"
sudo sh -c "echo 1536 > /proc/sys/vm/nr_hugepages"

노트: 이 값들은 예시입니다. 프로덕션에서는 메모리 사용량 및 커널 문서를 참조해 조정하세요.

  1. Solr 환경 파일 편집:
sudo nano /etc/default/solr.in.sh

파일에서 SOLR_HEAP, SOLR_HOST, SOLR_JETTY_HOST 등을 찾아 주석을 해제하고 값으로 변경합니다.

SOLR_HEAP="4g"
SOLR_HOST="192.168.10.15"
SOLR_JETTY_HOST="192.168.10.15"

변경 후 서비스를 재시작합니다.

sudo service solr restart

상태 확인으로 힙 설정이 반영됐는지 확인합니다.

sudo service solr status

Solr 힙 설정 확인

중요: SOLR_HEAP는 서버 전체 메모리의 과도한 값을 설정하지 마세요. OS와 다른 프로세스가 사용할 메모리를 남겨두어야 합니다.

ulimit 및 firewalld 설정

Solr는 다수의 열린 파일(descriptors)과 프로세스를 사용합니다. 최소 65,000 이상의 값이 권장됩니다.

  1. limits.conf 수정:
sudo nano /etc/security/limits.conf

파일 끝에 다음을 추가합니다.

solr   soft   nofile   65000
solr   hard   nofile   65000
solr   soft   nproc    65000
solr   hard   nproc    65000
  1. solr 사용자로 ulimit 값 확인:
sudo -H -u solr bash -c "ulimit -aH"

ulimit 확인 화면

  1. Solr 재시작으로 경고를 확인합니다.
sudo service solr restart
  1. 방화벽에서 포트 8983 허용:
sudo firewall-cmd --add-port=8983/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

방화벽 규칙에 8983 포트가 표시되어야 합니다.

firewalld 설정 화면

브라우저에서 http://192.168.10.15:8983/ 에 접속하면 Solr 대시보드가 표시됩니다.

Apache Solr 대시보드

기본 인증으로 Solr 보안 강화

Solr는 기본적으로 인증이 없기 때문에 관리 인터페이스가 외부에 노출되면 위험합니다. 이 섹션은 Basic Authentication(솔라의 BasicAuthPlugin)을 설정합니다.

  1. security.json 파일 생성:
sudo nano /var/solr/data/security.json

다음 JSON을 입력해 기본 사용자(solver)을 만듭니다. (예제 비밀번호: SolrRocks)

{  
  "authentication":{  
    "blockUnknown": true,  
    "class":"solr.BasicAuthPlugin",  
    "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="},  
    "realm":"My Solr users",  
    "forwardCredentials": false  
  },  
  "authorization":{  
    "class":"solr.RuleBasedAuthorizationPlugin",  
    "permissions":[{"name":"all", "role":"admin"}],  
    "user-role":{"solr":"admin"}  
  }  
}

보안 주의: 보안 파일에는 해시화된 credential 값이 들어갑니다. 실제 환경에서는 강력한 비밀번호와 안전한 전송 방법을 사용하세요.

  1. 서비스 재시작:
sudo service solr restart
  1. 브라우저에서 접속하면 로그인 페이지가 나타납니다. 사용자명 solr, 비밀번호 SolrRocks 로 로그인합니다.

Solr 로그인 화면

로그인 후 Security 메뉴에서 basic_auth 플러그인이 활성화된 것을 확인할 수 있습니다.

Solr 인증 플러그인 활성화 화면

첫 인덱스(코어) 생성

Solr 관리 인터페이스에 접근 가능한 상태라면 코어를 생성해 색인을 테스트할 수 있습니다.

  1. 인증 옵션을 환경에 추가합니다(환경 파일 편집):
sudo nano /etc/default/solr.in.sh

아래 항목을 주석 해제 또는 추가합니다.

SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
  1. 서비스 재시작(정확한 순서로):
sudo service solr restart
  1. 예제 코어 생성:
su - solr -c "/opt/solr/bin/solr create -c test1_core -n Test1Core"

정상 생성되면 “Created new core test1_core” 메시지가 출력됩니다. 관리 화면 Core Admin에서 test1_core를 확인하세요.

코어 확인 화면

운영 및 보안 체크리스트

운영 준비를 위한 역할별 체크리스트을 제공합니다.

  • 시스템 관리자
    • Java 버전 관리 및 보안 패치 적용
    • ulimit 및 커널 파라미터 검토
    • firewalld/네트워크 접근 제어
    • 서비스 모니터링(프로세스, 메모리, 디스크)
  • 보안 담당자
    • 인증 및 권한 분리(관리자/읽기 권한 구분)
    • TLS(HTTPS) 적용(리버스 프록시 또는 Jetty TLS)
    • 보안 로그 수집 및 감사
  • 개발자
    • 스키마 설계와 분석기(Analyzer) 설정
    • 색인/검색 성능 테스트(샘플 데이터)
    • 에러 처리 및 재시도 로직

문제 해결 빠른 가이드

  • Solr가 시작되지 않음
    • 로그 확인: /var/solr/logs/ 또는 /opt/solr/server/logs
    • Java 버전 불일치 확인
    • 포트 충돌: netstat 또는 ss로 포트 사용 확인
  • 인증 문제
    • security.json 문법 및 파일 권한 확인
    • SOLR_AUTHENTICATION_OPTS 값이 /etc/default/solr.in.sh에 정확히 설정됐는지 확인
  • 퍼포먼스 이슈
    • 힙 메모리와 GC 로그 확인
    • 느린 쿼리는 query profiling 사용

예시 명령

sudo tail -n 200 /var/solr/logs/solr.log
ss -ltnp | grep 8983
sudo -H -u solr bash -c "ulimit -n"

대안 및 확장 옵션

  • 인증 옵션
    • Kerberos: 중앙 인증(Active Directory/KDC)과 통합 필요 시 고려
    • JWT: 마이크로서비스 환경에서 토큰 기반 인증을 원할 때
    • Reverse Proxy + OAuth2: 외부 인증 공급자와 통합하기 쉬움
  • 배포/확장
    • SolrCloud: 여러 노드에 분산 색인 및 샤딩 필요 시 사용
    • 리버스 프록시(Nginx, Apache)로 TLS, 로깅, 요청 제한을 적용

설계 관점의 정신모형(mental model)

  • 코어(core): 테이블과 유사한 단위. 각 코어는 색인과 설정을 가짐.
  • 컬렉션(collection): SolrCloud에서 샤드로 나뉜 논리적 인덱스.
  • 노드(node): Solr를 호스팅하는 물리/가상 서버.
  • 리더/팔로워: 복제 구조에서 색인 쓰기와 읽기 역할.

이 모델을 기억하면 확장 구조와 장애 대응 설계가 쉬워집니다.

간단한 테스트 케이스(수용 기준)

  • 서비스 기동
  • 인증 검증
  • 코어 생성
    • 조건: test1_core가 관리 콘솔에 표시
    • 검증: /admin/cores?action=STATUS&core=test1_core

보안 강화를 위한 권장 추가 단계

  • TLS 적용: Solr의 관리 인터페이스를 HTTPS로 암호화하세요. 일반적으로 리버스 프록시(Nginx) 또는 Jetty TLS 설정을 사용합니다.
  • 원격 접근 제어: 관리 포트는 내부 네트워크로 제한하세요.
  • 로그 및 감사: 검색 쿼리와 관리 작업에 대한 로그 보관 및 분석
  • 백업: 정기적으로 core snapshot 또는 컬렉션 백업을 수행
  • 패치 관리: Solr 및 Java의 보안 패치 적용 정책 수립

마이그레이션 팁

  • 버전 호환성 확인: Solr major 버전 업그레이드는 스키마/플러그인 호환성에 영향
  • 테스트 환경에서 인덱스 덤프와 복원으로 검증
  • SolrCloud 전환: 단일 노드에서 운영 중이라면 SolrCloud로 이동 시 샤딩·복제 전략 수립

용어집(한 줄 정의)

  • 코어: Solr에서 독립적으로 색인과 구성을 가진 단위
  • 컬렉션: SolrCloud에서의 논리 인덱스
  • 샤드: 큰 인덱스를 나눈 파티션
  • 리더: 샤드에서 쓰기 작업을 수행하는 노드
  • 팔로워: 리더의 복제본을 갖는 노드

체크리스트 템플릿(운영 전 점검)

  • Java 버전 확인 및 설치
  • Solr 서비스 시작 및 접속 확인
  • SOLR_HEAP 적절성 검토
  • ulimit 값 65,000 이상 설정
  • 방화벽 포트 8983 확인
  • 인증 활성화 및 관리자 계정 검증
  • HTTPS 적용 또는 내부 네트워크 제한
  • 모니터링/로그 수집 설정

결론

축하합니다. 이제 AlmaLinux 9 서버에 Apache Solr를 설치하고 기본적인 운영·보안 설정을 완료했습니다. 다음 권장 작업은 TLS 적용, 자동 백업(스냅샷), 모니터링(예: Prometheus, Grafana) 구성입니다.

요약: 설치, 힙/호스트 설정, ulimit 및 방화벽 적용, 기본 인증 활성화, 첫 코어 생성 및 운영 체크리스트 제공을 완료했습니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Ansible Molecule과 Docker로 역할 자동 테스트하기
DevOps

Ansible Molecule과 Docker로 역할 자동 테스트하기

PHP FastCGI 테스트 및 사이트별 php.ini 적용
서버·운영

PHP FastCGI 테스트 및 사이트별 php.ini 적용

이미지에서 텍스트 추출하는 실무 OCR 가이드
가이드

이미지에서 텍스트 추출하는 실무 OCR 가이드

공용 Wi-Fi 보안 가이드 — 위험과 방어
네트워크 보안

공용 Wi-Fi 보안 가이드 — 위험과 방어

iPad에서 Pages·Keynote·Numbers와 Dropbox 연동하기
기술

iPad에서 Pages·Keynote·Numbers와 Dropbox 연동하기

iPhone에서 동영상 반복 재생하는 방법
영상 편집

iPhone에서 동영상 반복 재생하는 방법