Keycloak 소개

Keycloak은 오픈소스 인증 및 권한 부여 관리 솔루션입니다.

이를 통해 SSO(Single Sign-On) 기능을 손쉽게 구현할 수 있으며, 기업의 애플리케이션과 사용자 관리가 더욱 편리해집니다.

특히, Keycloak은 다양한 프로토콜을 지원하여 OAuth2, OpenID Connect, SAML2와 같은 표준 기반의 인증 방식을 사용할 수 있어 많은 시스템과의 연동이 가능합니다.

이외에도 소셜 로그인, MFA(다단계 인증), 사용자 연동 관리 등 여러 기능을 제공합니다.

Keycloak 관련 용어

용어 설명
OIDC OAuth가 권한 부여만 다루는 것이라면 OIDC는 OAuth 를 포함하여 인증과 권한부여를 모두 포함한 것이다.
SSO의 구현을 위한 수단으로 사용된다.
Realm 인증, 권한 부여가 적용되는 범위를 나타내는 단위이다.
SSO를 적용한다고 했을 때 해당 SSO가 적용되는 범위는 Realm 단위이다.
Client 인증, 권한 부여 행위를 대행하도록 맡길 애플리케이션을 나타내는 단위이다.
그 단위는 웹사이트 혹은 REST API를 제공하는 서비스도 될 수 있다. 하나의 Realm에 n개의 Client를 생성, 관리할 수 있다.
User Client에 인증을 요청할 사용자를 나타낸다. 하나의 Realm에는 Realm에 종속된 n개의 User를 생성, 관리할 수 있다.
기본적으로 User는 Username, Email, FirstName, LastName으로 구성되어 있지만 Custom User Attribute를 사용하면 원하는 속성을 추가할 수 있다.
Role User에게 부여할 권한 내용을 나타낸다.
여기에는 Keycloak의 REST API를 사용할 권한을 부여할 수 있고 사용자가 정의한 권한을 부여할 수도 있다.

Keycloak + PostgreSQL 설치

Docker Compose로 PostgresSQL과 Keycloak 서버를 설치합니다.

docker-compose.yml 작성

services:
  postgres:
    image: postgres
    container_name: postgres-keycloak
    restart: unless-stopped
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: _aA123456
      PGDATA: /var/lib/postgresql/data
    volumes:
      - postgres-keycloak-data:/var/lib/postgresql
    ports:
      - '3998:5432'
    networks:
      - keycloak-net

  keycloak:
    image: quay.io/keycloak/keycloak
    container_name: keycloak
    restart: unless-stopped
    environment:
      # 개발용 관리자 계정 (dev 모드에서 편리)
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
      # DB 설정
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres-keycloak:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: _aA123456
      # Optional: 호스트명/포워딩 설정 (리버스 프록시 뒤에 둘 경우)
      KC_HOSTNAME_STRICT: "false"
      KC_PROXY_HEADERS: xforwarded
      PROXY_ADDRESS_FORWARDING: "true"
      KEYCLOAK_FRONTEND_URL: <https://keycloak.code-factory.co.kr>
    command:
      - start-dev
    ports:
      - '3300:8080'
    depends_on:
      - postgres
    volumes:
      - keycloak-data:/opt/keycloak/data
      # realm 자동 임포트용 (선택)
      # - ./import/realms:/opt/keycloak/data/import
    networks:
      - keycloak-net

volumes:
  postgres-keycloak-data:
  keycloak-data:

networks:
  keycloak-net:

접속 확인

웹브라우저 주소창에 localhost:3200을 입력하고 접속해 봅니다. 접속이 잘 된다면 admin/admin 으로 로그인 합니다.

스크린샷 2025-10-21 오전 11.20.52.png

Keycloak 설정하기