데이터베이스 설정(내장 DB vs 외장 DB)
Keycloak는 인증·인가 기능을 제공하는 솔루션이므로 여러 설정 정보, 사용자 계정 정보, 세션 데이터 등을 안정적으로 저장·관리해야 한다. 이러한 데이터를 관리하기 위해 Keycloak는 기본적으로 내장(임베디드) DB와 외장(별도) DB 중 하나를 선택해 사용할 수 있다. 서비스 특성과 운영 환경에 맞는 방식을 택하는 것이 중요하다.
내장 DB(H2 Database)
Keycloak를 설치하면 기본적으로 H2 Database를 포함한다. H2 Database는 다음과 같은 특징이 있다.
테스트 및 개발 환경에서 간편함: 외부 DB를 준비하지 않아도 되므로 신속하게 Keycloak 환경을 구성할 수 있다.
메모리에 저장 가능: 데이터가 메모리에 올라가거나 임시 파일로 저장되므로 초기화와 재시작이 빠르다.
장기 운영에는 부적합: H2 Database는 파일 기반 또는 메모리 기반으로 동작하는 경우가 많다. 데이터 안정성이나 동시접속 처리 성능이 외장 DB에 비해 떨어지므로 운영 환경에서는 권장되지 않는다.
백업 및 확장성 한계: 많은 데이터가 쌓이거나 확장해야 하는 상황에서는 관리가 까다롭다.
결국 내장 DB는 빠른 테스트용이나 개념 검증(PoC) 등 소규모 환경에 주로 사용한다. 개발 단계에서 간단히 Keycloak 기능을 확인할 목적으로 활용하기에 적합하나, 운영 서비스의 요구사항을 충족하기에는 제약이 많다.
외장 DB
Keycloak는 PostgreSQL, MySQL, MariaDB, Oracle Database 등 대부분의 상용·오픈소스 RDBMS를 지원한다. 외장 DB 사용 시에는 다음과 같은 이점을 얻을 수 있다.
데이터 안정성: 서버 장애가 발생해도 외부 서버에 저장된 데이터가 보존되며, 백업·복구 전략을 다양하게 적용할 수 있다.
고가용성 및 확장성: DB 클러스터링 등을 이용해 성능과 가용성을 높이거나, 트래픽 증가 시 DB 서버를 증설해 대응할 수 있다.
운영 표준화: 이미 사내에 표준으로 사용 중인 DB 환경이 있다면 Keycloak 데이터도 동일한 체계로 관리가 가능하다.
설정 방법 개요
Keycloak를 설치한 디렉터리의 구성 파일(예:
standalone.xml또는standalone-ha.xml등)을 열어 Datasource 설정을 추가한다.driver항목과connection-url,username,password등 필요한 연결 정보를 외장 DB에 맞게 기입한다.KeycloakDatasource와DefaultKeycloakDatabase가 참조하는 Datasource가 올바른 외장 DB로 설정되어 있는지 확인한다.Keycloak 애플리케이션 서버를 재시작한다.
Keycloak를 Docker 등 컨테이너 환경에서 실행한다면 환경 변수를 통해 외장 DB 정보를 설정할 수 있다. 예를 들어, PostgreSQL을 사용하는 경우 다음과 같은 환경 변수를 제공한다.
DB_VENDOR=postgresDB_ADDR=postgres-server.example.comDB_DATABASE=keycloakDB_USER=keycloakDB_PASSWORD=secret
이러한 설정이 반영된 이미지를 실행하면 Keycloak는 외부 PostgreSQL 서버와 연결해 데이터를 읽고 쓴다.
선택 기준
규모: 사용자 수가 많거나 세션 데이터가 많이 발생하는 환경은 확실한 외장 DB가 필수다.
데이터 중요도: 인증 정보, 감사 로그, 감사 추적이 필요한 환경이라면 높은 신뢰성을 가진 외장 DB를 권장한다.
운영 편의성: 개발 환경에서 빠른 테스트가 목적이라면 내장 DB가 편하지만, 운영 환경에선 백업·모니터링 체계가 준비된 외장 DB 사용이 유리하다.
고객 요구사항: 사내 감사 정책이나 보안 규정이 엄격하다면, 검증된 DBMS를 사용하는 것이 안정적이다.
Keycloak를 운영 환경에서 사용하려면 내장 DB는 지양하고, 안정적이고 확장 가능한 외장 DB를 활용하는 것이 일반적인 권장 사항이다. 이를 통해 장애 발생 시 데이터 일관성과 서비스 연속성을 보장하고, 늘어나는 사용자 및 인증 트래픽을 유연하게 처리할 수 있다.
Last updated