테마 및 UI 커스터마이징
1️⃣ 로그인/계정 화면 커스터마이징
1. Keycloak 기본 로그인 화면
Keycloak은 기본적으로 아래와 같은 로그인 화면을 제공합니다.
✅ 장점
- 즉시 사용 가능
- 반응형 디자인
❌ 단점- 회사 CI / UX에 맞지 않음
2. 로그인 화면 커스터마이징 개요
커스터마이징 가능한 화면 종류는 다음과 같습니다:
화면 | 설명 |
---|---|
login | 로그인, OTP, 에러 등 |
account | 마이 페이지 (비밀번호 변경, 이메일 확인 등) |
인증 메일 HTML | |
welcome | 기본 Keycloak 시작 화면 |
3. 화면 커스터마이징 방법 요약
<KEYCLOAK_HOME>/themes/mytheme/
├── login/
├── account/
├── email/
├── theme.properties
└── resources/
# theme.properties
parent=keycloak
import=common
Keycloak 서버 실행 시 standalone.conf
에 테마 경로 지정:
export KEYCLOAK_THEME=mytheme
또는 realm에서 직접 설정:
Admin Console > Realm Settings > Themes
4. 예시: 로그인 페이지 제목 바꾸기
themes/mytheme/login/login.ftl
<h1>🚀 회사 전용 로그인 포털</h1>
2️⃣ Freemarker 템플릿 구조
1. Freemarker란?
Keycloak의 테마는 Apache FreeMarker 템플릿 엔진을 사용합니다.
HTML + 변수 치환 방식으로 동작하며, 조건문/반복문 등도 사용 가능.
2. 주요 템플릿 파일
파일명 | 설명 |
---|---|
login.ftl |
기본 로그인 페이지 |
login-update-password.ftl |
비밀번호 초기화 화면 |
login-verify-email.ftl |
이메일 인증 화면 |
message.ftl |
일반 메시지 화면 (예: 로그아웃됨) |
3. 예시: 로그인 페이지에 사용자 안내 문구 추가
<p>로그인 후 내부 시스템을 이용하실 수 있습니다.</p>
<#if realm.password && usernameEditDisabled?? && usernameEditDisabled>
<p>비밀번호 인증만 가능합니다.</p>
</#if>
4. 커스터마이징 플로우
[ 사용자의 웹 요청 ]
↓
[ Keycloak Theme Resolver ]
↓
[ mytheme/login/login.ftl 렌더링 ]
↓
[ Freemarker + HTML + CSS ]
↓
[ 사용자에게 응답 ]
3️⃣ 커스텀 로고, 색상, 레이아웃 설정
1. 로고 및 스타일 파일 위치
themes/mytheme/resources/img/logo.png
themes/mytheme/resources/css/custom.css
2. CSS 적용
theme.properties
에 다음 추가:
styles=css/custom.css
3. 로그인 템플릿에서 로고 사용 예시
<img src="${url.resourcesPath}/img/logo.png" alt="Company Logo" height="80"/>
4. 색상, 버튼 스타일 커스터마이징 (custom.css 예시)
body {
background-color: #f4f6f9;
font-family: 'Noto Sans KR', sans-serif;
}
.kc-login .btn-primary {
background-color: #003366;
border-color: #003366;
}
.kc-logo-text {
color: #003366;
font-weight: bold;
}
5. 전체 아키텍처 흐름
[ 사용자 요청 ]
↓
[ Keycloak Theme Engine ]
↓
[ Freemarker Template + 사용자 테마 ]
↓
[ 렌더링된 HTML + CSS + JS ]
↓
[ 사용자에게 표시 ]
📸 시각화 예시:
+-------------------+
| 로그인 페이지 |
+-------------------+
| [🚀회사로고] |
| 사용자명 입력칸 |
| 비밀번호 입력칸 |
| 로그인 버튼 |
+-------------------+
🔚 요약
항목 | 설명 |
---|---|
테마 종류 | login, account, email, welcome |
구조 | themes/mytheme/ 하위에 템플릿 구성 |
템플릿 엔진 | Apache Freemarker |
주요 파일 | login.ftl, theme.properties, custom.css |
적용 방법 | Realm 설정 또는 서버 환경변수 |
사용자 정의 가능 | 로고, 색상, 안내 문구, 이메일 등 전체 커스터마이징 가능 |
🎁 팁: docker-compose
환경에서 테마 테스트할 경우, volumes
로 테마 디렉터리를 /opt/keycloak/themes
에 mount하면 됩니다.
마지막 수정일자