약 2년 전, keycloak v8로 개발할 때, 이 오픈소스의 구성요소 Dependency를 조사했었다.
그리고 지금, keycloak은 v20에 들어서면서, 많은 것이 바뀌었다.
차이점을 알아보자!
Keycloak의 Dependency는 여기에서 확인할 수 있다.
https://mvnrepository.com/artifact/org.keycloak/keycloak-dependencies-server-all/20.0.3
또한, v11때 로딩 과정에서 기록한 Dependency를 그대로 비교한다.
|
v11 |
v20.0.3 |
Note |
실행 엔진 |
Wildfly |
Quarkus |
- v17부터 Quarkus가 정식 채용되었다. - Wildfly는 JBoss EAP의 Community Version으로, Java 컨테이너 기능을 풍부하게 지원하지만, 구동 시간이 오래 걸렸다. - Quarkus는 구동 시간과 메모리를 줄여, 컨테이너 사용에 적합하도록 개선된 Java Framework이다. - v20.0.0부터 Wildfly가 소스에서 제거되었다. |
HTTP API 서버 |
JBoss Undertow |
JBoss Undertow |
- Undertow는 Wildfly의 WAS로, 가벼운 웹서버라고 불린다. (https://undertow.io/) - Keycloak의 API 끝점을 HTTP로 서브하고, 실제 처리는 JAX-RS로 수행한다. - Quarkus로 엔진이 바뀌었어도 API는 유지된 것으로 보인다. |
ORM |
Hibernate |
Hibernate |
|
AAA Framework |
JBoss PicketBox |
Wildfly Elytron |
- AAA란 인증(Authentication), 인가(Authorization), 감사(Audit) 처리를 이르는 용어이다. - 11버전 이후로 Elytron으로 바뀌었다. PicketBox와 Elytron의 차이는 최근 개발되었다는 것과, Elytron이 좀 더 모듈화되었다는 점이다. |
Cache (In-Memory DB) |
JBoss Infinispan |
JBoss Infinispan |
- JBoss Marshalling을 통해 Cache를 마샬링, 언마샬링하여 데이터 그리드를 관리한다. - 캐시기능을 이용해 클러스터링 노드 간에 세션 데이터를 빠르게 공유할 수 있다. |
Clustering |
Wildfly Jgroups |
Wildfly Jgroups |
- JVM의 클러스터를 관리하는 오픈소스 라이브러리이다. TCP, UDP 등 프로토콜을 이용해 인스턴스 간 메시지 기반으로 인식한다. - 새 멤버 검색, 메시지 흐름 제어, 멤버 실패 감지, 세션 데이터 공유 등 수행 가능하다. |
JAX-RS RESTful API 서버 |
RESTeasy |
RESTeasy |
- Undertow에 의해 실제로 작동되는 API 처리 구현을 담당한다. |
Database Management |
JPA |
JPA |
|