-
전자정부 표준프레임워크 시리즈 8화 – 로그인 인증 흐름 분석: Session, Interceptor, Spring Security 적용까지기술과 산업/언어 및 프레임워크 2025. 5. 13. 16:22728x90
전자정부 표준프레임워크에서 로그인 및 인증 구조가 어떻게 설계되어 있는지, Session 기반 인증과 Interceptor의 역할, 그리고 실무에서 Spring Security로 확장하는 방법까지 실전 관점에서 분석합니다.
1. 로그인 인증 기능은 공공 SI 프로젝트의 핵심
전자정부 표준프레임워크 기반 프로젝트에서 로그인/인증 기능은 핵심 중의 핵심입니다.
감리 대응 시 반드시 아래 요구사항을 충족해야 합니다.- 비인가 사용자 접근 차단
- 세션 탈취, 세션 고정 공격 방지
- 사용자 ID, 로그인 이력 로깅
- 세션 만료 후 재로그인 처리
전자정부 프레임워크는 이를 위해 기본적으로 Session + Interceptor 구조를 권장하고 있으며,
최근 실무에서는 Spring Security를 통한 확장 적용이 일반적입니다.
2. 전자정부 기본 로그인 구조 흐름
전자정부 표준 샘플 또는 기본 프로젝트를 보면 다음과 같은 흐름으로 로그인 구조가 구성됩니다.
[사용자] → [LoginController] → [LoginService] → [DAO → DB 인증] ↓ [Session 저장 (세션 로그인)] ↓ [Interceptor로 인증 확인] ↓ [업무 Controller 접근]
주요 컴포넌트 설명
컴포넌트 역할
LoginController 로그인 요청 수신 LoginService DAO 호출, 인증 처리 LoginDAO DB로부터 사용자 정보 조회 Interceptor 세션에 인증 정보가 없으면 로그인 페이지로 이동 Session 로그인 성공 시 사용자 정보 저장 (HttpSession 사용)
3. Session 기반 인증의 상세 구조
전자정부 프레임워크의 기본 로그인 성공 시 로직은 다음과 같습니다.
- 사용자 로그인 성공 → HttpSession에 사용자 객체(loginVO) 저장
- 이후 모든 요청은 Interceptor 또는 Filter를 통해 세션 존재 여부를 확인
- 세션이 없으면 로그인 페이지로 리다이렉트 (response.sendRedirect)
- 세션이 존재하면 Controller → Service → DAO로 업무 흐름 진행
session.setAttribute("loginVO", resultVO);
→ 이 방식은 단순하고 구현이 쉬워 공공 시스템 표준으로 널리 사용되었습니다.
4. 인증 체크: Interceptor 또는 Filter
전자정부 프레임워크는 다음 두 가지 방식 중 하나를 선택하거나 혼용할 수 있습니다.
1) Interceptor 방식 (권장)
- Spring MVC의 HandlerInterceptorAdapter를 상속
- PreHandle()에서 로그인 세션 존재 여부 체크
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { LoginVO loginVO = (LoginVO) request.getSession().getAttribute("loginVO"); if (loginVO == null) { response.sendRedirect("/uat/uia/egovLoginUsr.do"); return false; } return true; }
2) Filter 방식
- javax.servlet.Filter 구현
- 요청 URI 패턴으로 로그인 검증
권장: Interceptor 방식 → Spring MVC와 더 밀접하게 연동되며 유지보수가 용이
5. Spring Security로 확장 (실무 적용)
전자정부 표준 샘플은 기본적으로 Session + Interceptor 기반입니다.
그러나 대규모 시스템 또는 민감 데이터 처리가 필요한 프로젝트에서는
Spring Security를 통한 확장이 필수입니다.Spring Security 적용 이유
- 비밀번호 암호화 (BCryptPasswordEncoder)
- 권한 기반 접근 제어 (@PreAuthorize, hasRole)
- 자동 세션 고정 방지
- 인증 실패/성공 이벤트 커스터마이징
- CSRF 공격 자동 방지
실무 적용 예시
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); }
전자정부 4.x 이후 버전에서는 Spring Security 통합 적용이 가능하며,
감리 대응 시 암호화, 인증 실패 처리, CSRF 대응 여부 등에서 가장 높은 평가를 받을 수 있습니다.
6. 로그인 실패, 세션 타임아웃 처리
전자정부 프레임워크 기본 샘플에서는 다음과 같이 처리됩니다.
- 로그인 실패 시 → 로그인 페이지로 오류 메시지와 함께 재전송
- 세션 만료 (타임아웃) → Interceptor에서 로그인 페이지로 강제 이동
추가적으로 Spring Security 적용 시 다음 기능을 강화할 수 있습니다.
- 로그인 실패 횟수 제한
- 로그인 이력 저장 (로그 테이블 적재)
- 2차 인증 (OTP) 추가 가능
결론 – Session 기반에서 Security 기반으로 진화해야 한다
전자정부 프레임워크는 기본적으로 Session 기반 인증 구조를 제공합니다.
이는 작은 규모의 공공 시스템에는 매우 효과적입니다.하지만
- 민원포털
- 대형 업무 시스템
- 개인정보 처리 시스템
등에서는 반드시 Spring Security 기반으로 확장 적용해야
보안성, 확장성, 유지보수성이 모두 확보됩니다.
전자정부 표준프레임워크의 진짜 강점은
표준 구조 + Spring 기반 확장성을 모두 지원한다는 점입니다.
다음 화 예고
👉 전자정부 표준프레임워크 시리즈 9화 – 메시지 처리와 다국어 지원 기능 완벽 가이드
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
FastAPI 시리즈 10화 - 파일 업로드 및 다운로드 기능 구현하기 (0) 2025.05.13 Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드 (0) 2025.05.13 Java JSON 처리 실전 시리즈 3화 – 객체를 JSON으로 변환하기: Jackson과 주요 어노테이션 활용법 (0) 2025.05.13 JHipster 시리즈 5화 - React 프론트엔드 커스터마이징 실전 가이드 (0) 2025.05.12 Python 마스터 시리즈 9화 – 예외 처리 구조: try, except, finally의 설계 원칙과 실전 활용 (0) 2025.05.12