# Keycloak 설치

Keycloak는 오픈 소스 아이덴티티 및 액세스 관리 솔루션으로, WildFly 애플리케이션 서버를 기반으로 동작한다. 설치 시에는 독립 실행형(Standalone) 모드 또는 도메인(Domain) 모드로 실행할 수 있으며, 운영 환경 및 확장성 요구 사항에 따라 적절한 모드를 선택하면 된다.

### 독립 실행형(Standalone) 모드

독립 실행형 모드는 Keycloak 서버를 단일 프로세스로 구동하는 기본 방식이다. 별도의 중앙 컨트롤러 없이 하나의 서버 인스턴스만 실행하므로, 소규모 환경이나 단순 구조를 원하는 경우에 적합하다.

* 구조
  * WildFly 기반 서버를 한 대만 띄워서 운영한다.
  * `standalone.xml` 파일이 주요 구성 파일이며, JDBC, 로그, 세션 설정 등을 이곳에서 관리한다.
  * 별도의 호스트 컨트롤러(host controller)나 도메인 컨트롤러(domain controller)가 없다.
* 설치 및 실행
  * Keycloak 압축 파일을 해제한 후, `bin/standalone.(sh|bat)` 스크립트를 실행하여 서버를 구동한다.
  * 네트워크 바인딩 옵션(예: `-Djboss.bind.address=0.0.0.0`) 등을 통해 원하는 IP로 서비스할 수 있다.
  * 구성 변경 시에는 서버를 다시 시작해야 변경 사항이 반영된다.
* 특징
  * **단순성**: 설정이 간단하고 리소스 소비가 비교적 적으며, 디버깅이 용이하다.
  * **제한적 확장성**: 단일 서버 기반이므로 고가용성(HA)이나 대규모 확장 요구가 있는 경우에는 별도의 로드 밸런서나 복제 구성을 추가로 고려해야 한다.

### 도메인(Domain) 모드

도메인 모드는 여러 Keycloak 서버 인스턴스를 중앙에서 일관되게 관리하고자 할 때 활용한다. WildFly의 도메인 구조를 그대로 사용하므로, 대규모 환경이나 다수의 Keycloak 노드를 운영해야 하는 경우에 유리하다.

* 구조
  * 하나의 도메인 컨트롤러(domain controller)가 전체 서버(호스트)들을 관리한다.
  * 각 호스트(서버)에는 호스트 컨트롤러(host controller)가 실행되며, 실제 애플리케이션을 구동하는 서버 인스턴스를 제어한다.
  * `domain.xml`과 `host.xml` 파일을 통해 도메인 전반의 설정(서버 그룹, 프로파일, 소켓 바인딩 등)과 각 호스트별 설정을 정의한다.
* 설치 및 실행
  * Keycloak 압축 파일을 해제한 후, `bin/domain.(sh|bat)` 스크립트를 통해 도메인 컨트롤러를 구동한다.
  * 추가로 연결될 호스트들은 동일 버전의 Keycloak(또는 WildFly)을 사용해야 하며, 호스트 컨트롤러가 도메인 컨트롤러에 연결되도록 설정한다.
  * 도메인 컨트롤러에서 프로파일을 한 번 수정하면 다수의 서버 인스턴스에 자동 반영할 수 있다.
* 특징
  * **중앙 집중 관리**: 도메인 컨트롤러가 여러 서버에 대한 구성을 통합 관리하므로 운영 효율이 높다.
  * **확장성**: 서버 그룹을 통해 무중단 배포(Rolling Update)나 확장 전략을 유연하게 적용할 수 있다.
  * **구성 복잡도**: 독립 실행형 모드에 비해 초기 설정 및 구성이 복잡하다. 도메인, 호스트, 서버 그룹의 개념을 정확히 이해해야 하며, 운영 환경에 맞춰 여러 XML 파일을 조정해야 한다.

도메인 모드를 사용하면 일관된 설정으로 다수의 Keycloak 서버를 운영할 수 있으나, 규모가 작고 단순한 환경이라면 독립 실행형 모드만으로 충분할 수 있다. 배포 환경 규모와 운영 방식을 고려하여 적합한 모드를 선택하는 것이 중요하다.
