Solr는 Apache 제단에서 만든 오픈소스 검색엔진이다.
나는 elasticsearch만 알고 있었는데 부장님께서 solr의 존재를 알게 해주셨다.
elasticsearch와 solr 모두 Apache lucene을 기반으로 만들어진 검색엔진이다.
이번 기회에 간단히 검색엔진 구축을 하면서 알게 된 점에 대해 기록해보려고한다.
환경 구성
1. Solr 설치
최신 버전(Solr_9.9)에는 Data Import Handler가 Deprecated 되었다는 얘기를 들어서 빠르고 편하게 구축해보기 위해
Solr_8.11.1 버전으로 진행하였다.
https://archive.apache.org/dist/lucene/solr/8.11.1/
Index of /dist/lucene/solr/8.11.1
archive.apache.org
윈도우즈는 zip 파일을 다운 받아서 진행하면 된다.
나는 아래 폴더 구조로 진행하였다.
D:\solr-8.11.1>
윈도우즈 cmd에 해당 경로에서 bin\solr start 명령어로 solr를 시작할 수 있다.
잘 시작되면 브라우저의
http://localhost:8983/solr/#/ 에서 해당 화면을 볼 수 있다.

이 후 Collection을 생성해준다.
Windows: bin\solr create -c board -d server\solr\configsets\basic_configs
Mac, Linux: bin/solr create -c board -d server/solr/configsets/basic_configs
2. 대부분 eclipse로 진행한 자료들이 많아서 IDE를 IntelliJ로 진행해 보았다.
나는 IntelliJ Community 2025.1.2 버전으로 진행하였다.
https://www.jetbrains.com/idea/
The Leading IDE for Professional Java and Kotlin Development
IntelliJ IDEA is the JetBrains IDE for pro development in Java and Kotlin. Built for your comfort, it unlocks productivity, ensures quality code, supports cutting-edge tech, and protects your privacy.
www.jetbrains.com
3. DB는 기존에 12.1.1-MariaDB server가 깔려 있어서 요거로 진행했다.
Download MariaDB Server - MariaDB.org
REST API Reporting Bugs … Continue reading "Download MariaDB Server"
mariadb.org
혹시 크롬으로 다운로드 사항이 안나오면 엣지로 다운로드 받아서 설치해보자.
mariaDb 설치 후 아래 명령어들로 Table을 생성해주면 db 준비는 끝이다.
CREATE DATABASE `board`;
USE `board`;
CREATE TABLE TBL_BOARD (
BGNO INT(11), -- 게시판 그룹번호
BRDNO int(11) NOT NULL AUTO_INCREMENT, -- 글 번호
BRDTITLE varchar(255), -- 글 제목
BRDWRITER varchar(20), -- 작성자
BRDMEMO varchar(4000), -- 글 내용
BRDDATE datetime, -- 작성일자
BRDHIT INT, -- 조회수
BRDDELETEFLAG CHAR(1), -- 삭제 여부
PRIMARY KEY (BRDNO)
);
CREATE TABLE TBL_BOARDFILE (
FILENO INT(11) NOT NULL AUTO_INCREMENT, -- 파일 번호
BRDNO INT(11), -- 글번호
FILENAME VARCHAR(100), -- 파일명
REALNAME VARCHAR(30), -- 실제파일명
FILESIZE INT, -- 파일 크기
PRIMARY KEY (FILENO)
);
CREATE TABLE TBL_BOARDREPLY (
BRDNO INT(11) NOT NULL, -- 게시물 번호
RENO INT(11) NOT NULL, -- 댓글 번호
REWRITER VARCHAR(10) NOT NULL, -- 작성자
REMEMO VARCHAR(500) DEFAULT NULL, -- 댓글내용
REDATE DATETIME DEFAULT NULL, -- 작성일자
REDELETEFLAG VARCHAR(1) NOT NULL, -- 삭제여부
REPARENT INT(11), -- 부모 댓글
REDEPTH INT, -- 깊이
REORDER INT, -- 순서
PRIMARY KEY (RENO)
);
CREATE TABLE TBL_BOARDGROUP (
BGNO INT(11) NOT NULL AUTO_INCREMENT, -- 게시판 그룹번호
BGNAME VARCHAR(50), -- 게시판 그룹명
BGPARENT INT(11), -- 게시판 그룹 부모
BGDELETEFLAG CHAR(1), -- 삭제 여부
BGUSED CHAR(1), -- 사용 여부
BGREPLY CHAR(1), -- 댓글 사용여부
BGREADONLY CHAR(1), -- 글쓰기 가능 여부
BGDATE DATETIME, -- 생성일자
PRIMARY KEY (BGNO)
);
3. 게시판 구축은 아래 글에 링크되어 있는 board_simple라는 프로젝트를 받아서 진행하였다.
https://github.com/gujc71/board_sample
GitHub - gujc71/board_sample: Spring 4 + MyBatis 3 + MariaDB : board sample
Spring 4 + MyBatis 3 + MariaDB : board sample. Contribute to gujc71/board_sample development by creating an account on GitHub.
github.com

github에서 <> code 버튼(녹색)을 누르면 맨아래 Download ZIP으로 받아주면 된다.
원하는 경로에 압축을 풀고 IntelliJ에 board_simple 파일을 불러온다.

Open 버튼으로 프로젝트를 열어주면 된다.
프로젝트 생성 후
board\src\main\webapp\WEB-INF하위에 있는
applicationContext.xml 을 열어서
아래 부분을 검색해서 db 설정에 맞게 수정해주면 된다.
<!--
p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost/board"
p:driverClassName="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" p:url="jdbc:log4jdbc:mysql://localhost/board"
-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" p:url="jdbc:log4jdbc:mysql://localhost/board"
p:username="유저이름" p:password="비밀번호"
p:initialSize="2"
p:maxActive="30"
p:maxIdle="10"
p:minIdle="3"
p:maxWait="30000"
p:removeAbandoned="true"
p:removeAbandonedTimeout="30"
p:validationQuery="SELECT 1" />
여기서 url의 뒤에 ?useUnicode=true&characterEncoding=UTF-8 를 붙혀줘야 한글을 인식을 하는 것을 알 수 있었다.
Solr 구축을 편하게 정리해두신 분이 계셔서 편하게 따라 구축해볼 수 있었다.
[Solr 빠른 완성] 1. 준비하기
준비하기 Solr는 훌륭한 검색엔진입니다. Java로 개발한 프로그램에 Solr를 빠르게 적용할 수 있도록 도와드리기 위해 Solr 빠른 완성을 연재합니다. Solr 빠른 완성 시리즈는 Solr의 Schema를 설정하고,
jetalog.net
4. Java 1.8
IntelliJ를 사용하면 기존 컴퓨터에 환경설정해둔 자바버전(나는 Java 21)을 변경하지 않고 IntelliJ 내부에서 자바를 다운받아서 설정할 수 있다. 게시판 프로젝트가 Java 1.8을 기준으로 작성되어서 Java 1.8을 IntelliJ에서 구동하는 설정을 하고 진행하였다.

1. 왼쪽 상단의 줄무늬 버튼을 누르면 File 등의 메뉴가 나오는데
2. File > Project Structure (단축키: Ctrl + Alt + Shift + S)에 진입


3. Project 탭으로 이동: Project 탭에서 SDK 항목을 확인.
4. JDK 버전 선택: 현재 프로젝트에 적용할 JDK 버전을 드롭다운 메뉴에서 선택하거나, Add SDK를 통해 로컬 컴퓨터에 설치된 다른 JDK를 추가.
5. 변경 사항 적용: Apply 또는 OK를 눌러 변경 사항을 적용한다.
5. Apache Tomcat 설치
5-1
Spring boot와는 달리 그냥 Spring에는 WAS가 내장되어 있지 않다. 따라서 WAS를 따로 다운받아서 컴퓨터에 설치해주어야 한다.
Java version과 호환이 되는 버전이 현재로써는 9이기 때문에 Tomcat 9을 다운받아 설치해준다.
https://tomcat.apache.org/download-90.cgi
윈도우즈는 32-bit/64-bit Windows Service Installer (pgp, sha512) 를 다운받아서 설치해주면 된다.
Apache Tomcat® - Apache Tomcat 9 Software Downloads
Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version
tomcat.apache.org
톰캣 설치시 manage-ui 기본 포트가 8080으로 되어 있는데 스프링이나 오라클 등등의 프로그램이 default 포트 8080을 사용하기 때문에 나는 18080으로 바꿔주었다.
5-2
Spring Boot 환경이 아닌 IntelliJ에는 Smart Tomcat이라는 플러그인을 깔아줘야 Tomcat을 사용할 수 있다고 한다.
위의 자바 설치처럼 줄무늬 버튼을 누른 후 'Settings > Plugins' 메뉴를 통해 Marketplace에서 설치하거나, 디스크에 다운로드한 .zip 파일을 이용해 설치할 수 있다. IDE의 설정 메뉴에서 'Plugins'를 클릭하면 플러그인 목록을 보고 설치할 수 있으며, 플러그인을 미리 다운로드한 경우 'Install Plugin from Disk...' 옵션을 선택해 직접 설치할 수 있다.



Smart Tomcat 설치 후에 메뉴의 Run > Edit Configuration에서 Tomcat의 위치를 설정해준 후 실행해주면 된다.

나는 docker 공부를 하면서 윈도우즈에서 미리 포트를 선점해놔서 기본포트 충돌이 발생해 실행이 되지 않는 오류를 겪었다. 기본포트로 실행이 잘되면 Server Port와 Admin Port 번호를 변경하지 않아도 될 것이다.
Tomcat이 maven 프로젝트도 빌드된 jar 파일을 읽어서 서버를 실행해주기 때문에 Tomcat 구동 전에 해줘야 할 일이 있다.
Maven 프로젝트를 Reload 한 후 Lifecycle에서 clean, build를 동작시켜주자.


build까지 실행시켜 주고 나면 프로젝트 경로에 target 폴더 아래 .jar 파일이 생겨있을 것이다.

이제 Run > Edit Configuration 에서 Tomcat을 실행시켜주면 localhost:서버포트번호/board/board4List 에서 게시판을 볼 수 있을 것이다.
다음 글에서는 solr설정을 적용해보겠다.