Keycloak이란?
Keycloak이란? 로그인과 권한을 한 곳에서 관리하는 방법
서비스를 만들다 보면 “로그인”과 “권한” 문제가 꼭 생긴다.
- 로그인 화면과 비밀번호 정책
- 계정 잠금, 비밀번호 재설정 같은 사용자 관리
- “누가 어떤 기능을 쓸 수 있는지” 권한 관리
- 여러 서비스에서 한 번만 로그인하는 기능(SSO, Single Sign-On)
- 추가 인증을 요구하는 보안 기능(MFA, Multi-Factor Authentication)
- 감사 로그 같은 보안 기록
이걸 서비스마다 직접 만들 수도 있지만, 시간도 많이 들고 실수하면 보안 문제가 생길 수 있다.
Keycloak은 이런 로그인과 권한 기능을 한 곳에서 처리해주는 서버다.
이런 범주의 도구를 보통 IAM(Identity and Access Management, 계정 및 접근 권한 관리) 솔루션이라고 부른다.
각 서비스는 Keycloak에 로그인을 맡기고, Keycloak이 발급한 토큰(token, 로그인 성공을 증명하는 값) 으로 사용자를 확인한다.
1) Keycloak 한 문장 요약
Keycloak은 로그인 확인(인증, Authentication)과 권한 확인(인가, Authorization)을 중앙에서 처리하는 서버다.
그래서 각 서비스는 “로그인 만들기” 대신 “토큰 확인”에 집중하면 된다.
3) 전체 흐름을 Mermaid로 보기
sequenceDiagram autonumber participant U as User(사용자) participant S as Service(내 서비스) participant K as Keycloak(로그인 서버) participant API as API(보호된 기능) U->>S: 보호된 기능 요청 S->>K: 로그인 페이지로 이동 U->>K: 로그인(아이디/비밀번호, 필요하면 MFA(Multi-Factor Authentication)) K-->>U: 로그인 성공 + 토큰(token, 로그인 증명 값) U->>S: 토큰을 포함해서 다시 요청 S->>API: 요청 + 토큰 전달 API->>API: 토큰 확인(유효한지, 권한이 있는지) API-->>S: 허용 또는 거부 S-->>U: 결과 응답
그림은 “로그인할 때 무슨 일이 일어나는지”를 순서대로 보여준다.
사용자는 먼저 Keycloak에서 로그인을 하고, Keycloak은 로그인했다는 증명인 토큰(token) 을 발급한다.
그 다음부터는 서비스와 API가 이 토큰을 확인해서 “진짜 로그인한 사람인지”와 “이 기능을 써도 되는지”를 판단한다.
4) Keycloak 도입의 장점
4.1 구현과 보안 책임을 분리한다
로그인 화면, 비밀번호 정책, 계정 잠금, 비밀번호 재설정, 추가 인증(MFA, Multi-Factor Authentication) 같은 기능을 각 서비스에서 따로 만들 필요가 줄어든다.
4.2 한 번 로그인으로 여러 서비스를 쓸 수 있다
한 번 로그인하면 연결된 다른 서비스에서 재로그인이 줄어든다(SSO, Single Sign-On).
4.3 표준 프로토콜을 지원해서 연동이 쉽다
Keycloak은 OAuth 2.0, OpenID Connect(OIDC), SAML 같은 표준을 지원한다.
그래서 많은 웹/백엔드 프레임워크에서 제공하는 기존 라이브러리를 그대로 써서,
설정만으로 로그인과 토큰 검증을 연결할 수 있다.
4.4 사용자와 권한을 중앙에서 관리한다
관리 콘솔에서 사용자, 그룹, 역할(Role), 접근 정책을 한 곳에서 관리할 수 있다.
5) Keycloak 도입의 tradeoff (반드시 알고 가야 할 것들)
장점만 보고 도입하면 운영에서 예상보다 손이 많이 갈 수 있다.
5.1 운영 복잡도 증가
Keycloak은 라이브러리가 아니라 서버다.
배포, 모니터링, 업그레이드, 백업/복구, 장애 대응까지 운영 책임이 생긴다.
5.2 로그인 서버가 멈추면 서비스도 영향을 받는다
Keycloak을 로그인 관문으로 쓰면, Keycloak에 문제가 생길 때 로그인이 안 되거나 일부 기능이 멈출 수 있다.
그래서 운영에서는 Keycloak을 여러 대로 운영해 한 대가 고장 나도 계속 동작하게 하거나,
장애 시 대응 방식(예: 기존 로그인 유지, 임시 우회 정책)을 미리 정해두는 게 좋다.
5.3 설정 실수가 곧 보안 사고로 이어질 수 있다
리다이렉트 주소, 토큰 설정, 권한 매핑 같은 설정을 잘못 잡으면 우회 로그인, 권한 과다 부여, 토큰 오용 같은 문제가 생길 수 있다.
5.4 토큰 방식에 익숙해져야 한다
토큰 기반으로 가면 “서버 세션”과 방식이 달라진다.
- 로그아웃을 어디까지 강제할지
- 토큰 만료 시간을 어떻게 잡을지
- refresh token을 쓸지
같은 결정을 해야 한다.
5.5 커스터마이징 비용
로그인 UI, 동의 화면, 인증 흐름을 깊게 바꿀수록 유지보수 비용이 올라간다.
조직의 UX 요구사항이나 보안 정책이 특이할수록 비용이 커질 수 있다.
5.6 팀 학습 비용
Realm, Client, Role 설계와 OIDC 개념을 팀이 함께 이해해야 운영이 안정된다.
한 사람만 알고 있는 시스템이 되면 유지보수와 장애 대응이 위험해진다.
7) 언제 Keycloak이 잘 맞나, 아닐 수도 있나
잘 맞는 경우
- 로그인 대상 서비스가 여러 개라서 SSO가 필요하다
- 역할/권한이 복잡해지고 중앙 관리가 필요하다
- 추가 인증(MFA), 소셜 로그인 같은 보안 기능을 표준 방식으로 빠르게 도입하고 싶다
- 조직 차원에서 로그인과 권한 정책을 통일하고 싶다
오버스펙일 수 있는 경우
- 서비스가 1개이고 사용자/권한 요구사항이 단순하다
- 별도 서버를 운영하고 장애에 대응할 여력이 부족하다
- 요구사항이 너무 특수해서 커스터마이징이 과해질 가능성이 높다
마무리
Keycloak은 로그인과 권한이라는 중요한 기능을 서비스 밖으로 분리해 중앙에서 관리하게 해준다.
대신 운영 복잡도와 설계 결정, 설정 책임이 생긴다.
도입 전에 "우리가 이 로그인 서버를 운영할 준비가 되었는지"를 먼저 점검하는 게 좋다.
관련 글
- [🔓 Unlisted Post] - 보안 관련 개념