# 운영체제별(Windows, Linux, macOS) 설치

### Windows 환경

1. **Java 설치**
   * Keycloak은 Java 17 이상이 필요하다.
   * Java 17 이상 버전을 [Oracle](https://www.oracle.com/java/technologies/downloads/) 또는 [OpenJDK](https://adoptium.net/)에서 다운로드하여 설치한다.
   * 설치 후 환경 변수 `JAVA_HOME`이 올바르게 설정되어 있는지 확인한다.
2. **Keycloak 다운로드**
   * [Keycloak 공식 웹사이트](https://www.keycloak.org/downloads)에서 최신 버전을 다운로드한다.
   * Windows 환경에서는 `zip` 패키지를 선택한다.
3. **압축 해제 및 디렉터리 구성**
   * 다운로드한 `zip` 파일을 적절한 위치(예: `C:\keycloak`)에 압축 해제한다.
   * 디렉터리 구조 예시:

     ```
     C:\keycloak
       └─ bin
       └─ conf
       └─ lib
       ...
     ```
4. **초기 설정**
   * Keycloak은 실행 시 관리자 계정을 설정해야 한다.
   * 명령 프롬프트를 열고

     ```
     C:\keycloak\bin
     ```

     디렉터리로 이동한 다음 다음 명령을 입력한다.

     ```
     kc.bat export --output-dir=..\data
     kc.bat start-dev
     ```

     * `start-dev` 모드는 개발 및 테스트 목적으로 빠른 실행을 위한 옵션이며 운영 환경에서는 `kc.bat start`를 사용한다.
     * 서버 구동 로그가 출력되면, 별도의 터미널에서 관리자 계정을 생성한다:

       ```
       kc.bat admin create --user admin --password admin
       ```
     * 기본 포트는 8080이므로 `http://localhost:8080/`에서 Keycloak 콘솔에 접속할 수 있다.
     * 운영 환경에서 사용할 때는 방화벽 설정과 HTTPS 적용을 함께 고려해야 한다.

***

### Linux 환경

1. **Java 설치**
   * Linux 배포판의 패키지 관리자를 통해 Java 17 이상을 설치한다. 예:
     * Ubuntu/Debian 계열:

       ```
       sudo apt-get update
       sudo apt-get install openjdk-17-jdk
       ```
     * CentOS/RHEL 계열:

       ```
       sudo yum install java-17-openjdk
       ```
   * 설치 후

     ```
     JAVA_HOME
     ```

     을 환경 변수로 설정한다. 배포판에 따라

     ```
     ~/.bashrc
     ```

     또는

     ```
     ~/.zshrc
     ```

     등에 다음과 같이 추가할 수 있다:

     ```
     export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
     export PATH=$JAVA_HOME/bin:$PATH
     ```
2. **Keycloak 다운로드**
   * [Keycloak 공식 웹사이트](https://www.keycloak.org/downloads)에서 최신 `tar.gz` 패키지를 다운로드한다.
   * 예를 들어,

     ```
     wget
     ```

     을 사용해 다운로드할 수 있다:

     ```
     wget https://github.com/keycloak/keycloak/releases/download/<버전>/keycloak-<버전>.tar.gz
     ```
3. **압축 해제 및 디렉터리 구성**
   * 다운로드한 패키지를 압축 해제한다. 예:

     ```
     tar -xvf keycloak-<버전>.tar.gz -C /opt
     mv /opt/keycloak-<버전> /opt/keycloak
     ```
   * 디렉터리 구조 예시:

     ```
     /opt/keycloak
       └─ bin
       └─ conf
       └─ lib
       ...
     ```
4. **초기 설정**
   * Keycloak 디렉터리로 이동한 뒤 다음 명령으로 개발 모드를 실행한다:

     ```
     cd /opt/keycloak/bin
     ./kc.sh export --output-dir=../data
     ./kc.sh start-dev
     ```
   * 실행 후 관리자 계정을 생성한다:

     ```
     ./kc.sh admin create --user admin --password admin
     ```
   * 브라우저에서 `http://<호스트 IP>:8080`으로 접속해 Keycloak 콘솔에 접근한다.
   * 운영 환경에서는 시스템 서비스로 등록하고 HTTPS 설정, 방화벽 등을 함께 구성해야 한다.

***

### macOS 환경

1. **Java 설치**
   * Homebrew

     를 사용해 Java 17 이상을 설치한다:

     ```
     brew update
     brew install openjdk@17
     ```
   * 설치 후

     ```
     ~/.zshrc
     ```

     등 쉘 설정 파일에 다음과 같이 환경 변수를 등록한다:

     ```
     export JAVA_HOME="/usr/local/opt/openjdk@17"
     export PATH="$JAVA_HOME/bin:$PATH"
     ```
2. **Keycloak 다운로드**
   * [Keycloak 공식 웹사이트](https://www.keycloak.org/downloads)에서 `tar.gz` 형식을 다운로드한다.
   * 예를 들어, 터미널에서

     ```
     curl
     ```

     로 받을 수 있다:

     ```
     curl -L https://github.com/keycloak/keycloak/releases/download/<버전>/keycloak-<버전>.tar.gz -o keycloak.tar.gz
     ```
3. **압축 해제 및 디렉터리 구성**
   * 다운로드된 패키지를 압축 해제한다:

     ```
     tar -xvf keycloak.tar.gz
     mv keycloak-<버전> /usr/local/keycloak
     ```
   * 디렉터리 구조 예시:

     ```
     /usr/local/keycloak
       └─ bin
       └─ conf
       └─ lib
       ...
     ```
4. **초기 설정**
   * Keycloak 디렉터리로 이동해 개발 모드로 실행한다:

     ```
     cd /usr/local/keycloak/bin
     ./kc.sh export --output-dir=../data
     ./kc.sh start-dev
     ```
   * 관리자 계정 생성:

     ```
     ./kc.sh admin create --user admin --password admin
     ```
   * 브라우저에서 `http://localhost:8080`으로 접속해 Keycloak 콘솔에 접근한다.
   * 운영 환경 배포 시에는 `launchctl` 등을 사용하여 서비스 형태로 등록하고 HTTPS 구성을 포함한 보안 설정을 병행해야 한다.

Keycloak은 서버 실행 시 필요한 포트와 자원을 효율적으로 관리해야 하며, 운영 환경에서 보안 설정(예: HTTPS, 방화벽, 사용자 권한 관리 등)을 꼼꼼히 진행해야 한다. 운영체제별 설치 후에는 실제 사용 목적과 트래픽 규모에 맞추어 JVM 옵션과 데이터베이스 연결 설정, 로드밸런싱 등을 고려하여 최적화하는 것이 좋다.
