웹 어플리케이션을 개발할 때 주요 기능 중 하나는 당연히 사용자 인증 기능이라고 할 수 있다. Java EE 규약에서는 이러한 사용자 인증에 대해 다양한 스펙을 제시하고 있는데 컨테이너(서블릿/JSP 서버)측에서 제공하는 사용자 인증 방법으로 선언적 사용자 인증(Using Deployment Descriptors for Declarative Security)이라고 하는 방법을 제공한다.

선언적 인증이란 프로그래밍을 통해 인증로직을 구현하는 것이 아니라 Java EE 규격을 지원하는 컨테이너에서 제공하는 기능을 이용하여 배포기술자를 통해 선언함으로 로그인 기능이 제공되는 것이다.

스트러츠가 프로그래머가 직접 코딩을 하기보다는 프로퍼티들을 선언함으로써 자동으로 기능이 구현되도록 하는 것과 마찬가지로 로그인 기능 역시 프로그래밍을 하는 것이 아니라 로그인 정보를 선언하여 로그인 로직을 컨테이너가 제공하도록 하고 있다.

여담이지만 이러다가는 프로그래머와 어플리케이션 개발자의 계층이 나눠져야 하는 것이 아닌지하는 생각도 든다. 도메인 분석, 설계 능력을 가진 SI 개발자는 컨테이너와 프레임워크의 도움을 받아 구현에 필요한 프로퍼티와 작업의 흐름을 XML 문법으로 선언만하면 하나의 어플리케이션이 완성되니까, 그 밑(?)단에서 컨테이너나 프레임워크를 개발하는 개발자 층이 별도로 형성될 것 같다.

본론을 돌아가서 선언적 인증을 구현하기 위해 톰캣의 예를 들어보도록 하겠다.

톰캣은 사용자 정보를 기본적으로 'tomcat-users.xml'에 저장하여 이용하나, 추가로 데이터베이스나 인증서버를 이용하도록 지원한다. 여기서는 MySQL DB를 이용하여 사용자 정보를 저장하고 로그인 기능을 구현하겠다.

[MySQL 스키마]

먼저 위와 같이 사용자 테이블과 롤 정보를 담을 테이블을 생성한다. 그리고 MySQL DB로부터 이 정보를 읽어 올 수 있도록 JDBC 설정을 한다.

[Realme 설정]

다음으로는 인증과 관현한 설정을 web.xml에 기술한다.

[web.xml]

다음으로 로그인 화면과 로그인 실패시 표시할 화면을 HTML로 기술한다.

[로그인 화면]

[로그인 실패]

[로그인 성공시 표시될 화면]

로그아웃

이상 Quick Start 방식으로 구현을 해보았다. 자세한 설명은 다음 기회에 다뤄보도록 하겠다.

+ Recent posts