# Java EE/Jakarta EE 애플리케이션 서버 연동

Java EE/Jakarta EE 환경에서 Keycloak을 연동하면, 기존에 보유한 엔터프라이즈 애플리케이션에 OIDC 기반 보안 기능을 손쉽게 추가할 수 있다. 특히 세션 및 사용자 역할 관리를 중앙집중화하여 애플리케이션 코드의 변경 없이 인증·인가 로직을 효율적으로 통합할 수 있다. 다음은 대표적인 연동 방법과 고려 사항이다.

Keycloak은 전통적인 Java EE 보안 컨텍스트(JAAS, JASPIC 등)를 직접 이용하거나, Keycloak이 제공하는 애플리케이션 서버용 어댑터를 통해 통합할 수 있다. 애플리케이션 서버마다 설정 방식에 차이가 있으나, 전반적인 흐름은 유사하다. 일반적인 작업 절차는 다음과 같다.

1. Keycloak 관리자 콘솔에서 Realm과 Client(클라이언트) 생성
   * Client 유형: Public, Confidential, Bearer-only 중 선택
   * 권장 인증 플로우: 표준 웹 애플리케이션에는 “Standard Flow”를 사용
   * Redirect URI 설정: Java EE/Jakarta EE 애플리케이션이 실제 서비스될 도메인(또는 로컬 환경)에 맞춰 정확히 설정
2. 어댑터 설정 파일 확보 (keycloak.json 또는 기타 설정)
   * Keycloak 관리자 콘솔에서 “Installation” 탭을 통해 Client 설정 파일(keycloak.json)을 다운로드
   * 또는 Spring Boot, Quarkus 등과 연동할 경우 application.properties(yml)에 해당 설정을 직접 기재
   * 전통적인 Java EE/Jakarta EE 서버(와일드플라이, JBoss EAP, Payara 등)의 경우, 서버 전역 설정 혹은 애플리케이션 WAR/EAR 내부에 keycloak.json을 배치
3. 애플리케이션 서버에 Keycloak 어댑터 적용
   * WildFly/JBoss EAP 계열: 모듈(module) 등록 후 standalone.xml(domain.xml)에 Keycloak 서브시스템 추가
   * Payara/GlassFish 계열: JVM 파라미터 설정 또는 필터(Filter) 기반 라이브러리 연동
   * TomEE, WebSphere, WebLogic 등: 공식 어댑터 혹은 서드파티 어댑터를 이용해 JAAS, JASPIC 영역에서 Keycloak 인증 모듈 연계
4. 애플리케이션 보안 구성
   * web.xml 또는 jakarta.xml(과거 web.xml) 보안 섹션 설정: `<security-constraint>` 및 `<login-config>`를 통해 보호 대상 URL을 지정하고 인증 방식을 KEYCLOAK 등으로 설정
   * vendor-specific 배포기술(예: jboss-web.xml, glassfish-web.xml)을 사용하는 경우, Keycloak 보안 도메인 혹은 Realm 정보를 연동하도록 추가 설정
   * role-name 매핑: Keycloak에서 정의한 역할(Role)과 애플리케이션의 보안 설정(예: `@RolesAllowed`)이 일치하도록 매핑
5. 인증·인가 동작 방식 확인
   * 사용자가 보호된 리소스에 접근하면, Keycloak 로그인 페이지로 리다이렉트
   * 인증이 성공하면 Keycloak에서 생성한 세션 혹은 토큰이 전달되어, 이후에는 Single Sign-On(SSO) 상태로 여러 애플리케이션 간 인증 세션 공유 가능
   * Role 기반 접근제어(RBAC)는 Keycloak 콘솔에서 할당된 역할 정보를 토대로 Java EE/Jakarta EE 컨테이너가 요청을 처리
6. 통합 테스트 및 운영 고려사항
   * Redirect URI, CORS 설정, SSL(HTTPS) 적용 여부를 운영 환경에 맞게 정확히 구성
   * 로깅 활성화: 초기 연동 시 인증 흐름이 올바르게 작동하는지 서버 로그와 Keycloak 서버 로그를 반드시 확인
   * 세션 만료정책, 토큰 유효기간, 애플리케이션 서버의 session-timeout 설정을 일관성 있게 유지
   * Keycloak 클라이언트 정책(Client Policies)을 활용하면, 특정 클라이언트에 대해 세션 보안, 토큰 발급 규칙 등을 세분화하여 강화 가능

Java EE/Jakarta EE 환경은 전통적으로 컨테이너 기반 보안(Declarative Security)과 프로그램적 보안(Programmatic Security)을 모두 제공해 왔다. Keycloak은 해당 보안 모델에 자연스럽게 결합되도록 다양한 어댑터와 설정 옵션을 제공한다. 각 애플리케이션 서버별 공식 문서를 확인하면 구체적인 설정 예시와 버전별 제약 사항을 쉽게 확인할 수 있다. 주요 포인트는 Keycloak에서 발급된 ID 토큰·액세스 토큰을 애플리케이션 서버가 신뢰하고, 요청에 대한 인증·인가를 처리할 수 있도록 환경을 구성하는 것이다.

또한, 최신 Jakarta EE 기반 프로젝트에서는 Jakarta Security 표준을 통해 OIDC를 구현하는 라이브러리가 제공되기도 한다. Keycloak은 이 표준을 지원하는 방법 역시 공식 문서나 커뮤니티를 통해 제시한다. 서버 설정과 애플리케이션 구성 파일을 명확하게 분리하고, Keycloak Realm 및 Client 설정 값만 일관성 있게 적용하면 운영 환경에서도 안정적인 Single Sign-On이 가능하다.

정리하면, Java EE/Jakarta EE 애플리케이션 서버와 Keycloak의 연동은 어댑터 설치 및 서버 설정, web.xml 같은 배포 서술자에 대한 인증·인가 구성, Client/Realm 환경 설정의 세 요소가 핵심이 된다. 이를 통해 엔터프라이즈 애플리케이션의 인증 흐름을 통합 관리할 수 있고, 역할 매핑이나 세션 관리 같은 주요 기능도 중앙에서 통제할 수 있다.
