전자정부프레임워크 경량시스템 구동 순서 A to Z: 필터, 인터셉터, AOP 완벽 이해하기 ☕️

안녕하세요, 여러분! 개발자로 일하다 보면 전자정부프레임워크라는 말을 참 많이 듣게 되죠. 특히 전자정부프레임워크 경량시스템은 공공기관 프로젝트에서 빼놓을 수 없는 중요한 기술 스택입니다. 그런데 이 녀석이 대체 어떤 순서로 동작하는지, 특히 필터, 인터셉터, AOP 같은 개념들이 어떻게 맞물려 돌아가는지 헷갈릴 때가 많습니다. 저 역시 처음에는 이 부분 때문에 머리를 쥐어뜯었던 기억이 생생하네요. 😂

그래서 오늘은 여러분의 답답함을 시원하게 긁어드리고자, 전자정부프레임워크 경량시스템의 구동 순서를 아주 상세하고 친절하게 정리해 보려고 합니다. 이 글을 읽고 나면 복잡하게만 보였던 이 시스템의 동작 원리가 한눈에 쏙 들어올 거예요. 자, 그럼 함께 떠나볼까요?

 

1. 서론: 전자정부프레임워크 경량시스템, 왜 알아야 할까?

 

전자정부프레임워크 경량시스템은 개발의 효율성과 표준화를 높이기 위해 탄생한 일종의 가이드라인이자 도구입니다. 단순히 코드를 짜는 것뿐만 아니라, 보안, 로깅, 트랜잭션 처리 등 다양한 부가 기능들을 체계적으로 관리할 수 있도록 도와주죠. 특히 필터, 인터셉터, AOP 같은 핵심 기술들이 유기적으로 결합되어 있어, 이를 제대로 이해해야만 진정한 프레임워크의 힘을 활용할 수 있습니다. 마치 자동차의 엔진, 변속기, 핸들이 각각의 역할을 하면서도 하나의 목표(주행)를 위해 움직이는 것처럼요.

오늘 우리가 살펴볼 전자정부프레임워크 경량시스템의 구동 순서는 아래와 같은 큰 흐름으로 이루어집니다.

  1. 클라이언트의 요청(Request)
  2. WAS(웹 애플리케이션 서버) 진입
  3. 필터(Filter) 체인 실행
  4. DispatcherServlet 진입
  5. 인터셉터(Interceptor) 체인 실행
  6. Controller 실행 (AOP 적용)
  7. Service/DAO 실행 (AOP, 트랜잭션 적용)
  8. View 반환
  9. 인터셉터(Interceptor) 체인 역순 실행
  10. 필터(Filter) 체인 역순 실행
  11. 응답(Response)

이 복잡해 보이는 과정을 하나하나 뜯어보면서, 각각의 역할과 동작 방식을 심도 있게 파헤쳐 보겠습니다.


 

2. 본론: 경량시스템 구동 순서 상세 분석 💡

 

 

2.1. 클라이언트의 요청과 WAS 진입

 

모든 것은 사용자의 요청으로부터 시작됩니다. 웹 브라우저에 URL을 입력하거나, 버튼을 클릭하는 순간, 그 요청은 네트워크를 타고 WAS(Tomcat, Jeus 등)로 전달됩니다. WAS는 이 요청을 받아서 처리할 준비를 하죠.

 

2.2. 필터(Filter) 체인 실행: 요청의 첫 번째 관문

 

요청이 WAS에 도착하면, 가장 먼저 필터가 맞이하게 됩니다. 필터는 서블릿 컨테이너(WAS) 레벨에서 동작하며, 모든 요청에 대해 전역적으로 공통적인 작업을 수행할 수 있는 강력한 도구입니다. 전자정부프레임워크에서는 web.xml 또는 @WebFilter 어노테이션을 통해 필터를 등록하고 사용합니다.

대표적으로 사용되는 필터들은 다음과 같습니다.

  • 인코딩 필터 (e.g., CharacterEncodingFilter): 요청과 응답의 문자 인코딩을 UTF-8 등으로 통일하여 한글 깨짐 문제를 방지합니다. 여러분이 web.xml에서 <filter> 태그를 보면 제일 먼저 발견하게 될 거예요.
  • 보안 필터 (e.g., Spring Security Filter): 사용자의 인증 및 권한을 확인하여 허가되지 않은 접근을 차단합니다.
  • 로깅/감사 필터: 모든 요청에 대한 로그를 남기거나, 특정 패턴의 요청을 감시하는 역할을 합니다.

필터는 요청이 들어올 때 (doFilter())와 나갈 때 (chain.doFilter()) 모두 동작할 수 있어, 요청 전/후에 공통적인 작업을 처리하기에 아주 유용합니다. 마치 집 안으로 들어오는 모든 손님을 문 앞에서 맞이하여 신발을 벗게 하고, 나갈 때 다시 신발을 신게 하는 것과 비슷하죠. 여러 개의 필터가 존재할 경우, 체인 형태로 연결되어 순차적으로 실행됩니다.

 

2.3. DispatcherServlet 진입: Spring MVC의 핵심

 

필터 체인을 무사히 통과한 요청은 이제 DispatcherServlet으로 전달됩니다. DispatcherServlet은 스프링 MVC의 핵심 컴포넌트로, 모든 웹 요청의 ‘최전방 컨트롤러’ 역할을 합니다. 이 친구가 요청을 분석하여 어떤 컨트롤러에게 전달해야 할지 결정하는 ‘교통 정리’를 담당합니다.

 

2.4. 인터셉터(Interceptor) 체인 실행: DispatcherServlet 내부의 감시자

 

DispatcherServlet이 요청을 받으면 바로 컨트롤러를 호출하는 것이 아니라, 그 전에 인터셉터 체인을 실행합니다. 인터셉터는 필터와 비슷하게 요청 전/후에 공통적인 작업을 처리하지만, 동작하는 위치와 범위가 다릅니다. 인터셉터는 스프링 컨텍스트(Application Context) 안에서 동작하며, 주로 컨트롤러 호출과 관련된 작업을 수행합니다.

인터셉터의 동작 순서는 다음과 같이 세 단계로 나뉩니다.

  • preHandle(): 컨트롤러가 호출되기 전에 실행됩니다. 여기서 사용자의 로그인 여부를 체크하거나, 특정 요청에 대한 권한을 검사하는 등의 작업을 할 수 있습니다. 이 메서드가 false를 반환하면 요청 처리가 중단됩니다.
  • postHandle(): 컨트롤러 실행이 끝나고 뷰(View)가 렌더링되기 전에 실행됩니다. 주로 모델(Model) 데이터에 추가 정보를 넣거나, 뷰에 전달할 데이터를 수정하는 데 사용됩니다.
  • afterCompletion(): 뷰 렌더링까지 모든 요청 처리가 완료된 후 실행됩니다. 예외가 발생했는지 여부와 관계없이 실행되므로, 자원 해제나 로깅 처리에 적합합니다.

 

2.5. Controller 실행 (AOP 적용)

20250909 I7 11

인터셉터 체인을 모두 통과하면 드디어 요청을 처리할 Controller가 호출됩니다. 컨트롤러는 요청에 따라 비즈니스 로직을 담고 있는 서비스(Service)를 호출하거나, 직접적인 응답을 생성하는 역할을 합니다.

이때, 컨트롤러의 특정 메서드가 호출되기 직전 또는 직후에 **AOP(Aspect-Oriented Programming)**가 동작할 수 있습니다. AOP는 횡단 관심사(Cross-cutting concerns)를 모듈화하여 코드의 중복을 줄이고 유지보수성을 높이는 프로그래밍 패러다임입니다. 쉽게 말해, 여러 곳에 중복되는 기능(로깅, 트랜잭션, 보안 등)을 한 곳에 모아놓고, 필요한 곳에 ‘싹둑’ 잘라 붙이는 방식이라고 생각하시면 됩니다.

전자정부프레임워크에서는 스프링 AOP를 사용하여 다음과 같은 작업을 수행합니다.

  • 로깅: 특정 메서드가 호출되거나 종료될 때 로그를 남깁니다.
  • 트랜잭션: 서비스 계층의 메서드에 @Transactional 어노테이션을 붙여 하나의 작업 단위로 묶어줍니다.
  • 보안: 특정 메서드에 대한 접근 권한을 체크합니다.

 

2.6. Service/DAO 실행 (AOP, 트랜잭션 적용)

 

컨트롤러는 비즈니스 로직을 처리하기 위해 Service를 호출합니다. 이 Service 계층은 실제 핵심 비즈니스 로직을 담고 있으며, 데이터베이스 접근을 위한 **DAO(Data Access Object)**를 호출합니다.

이 과정에서도 AOP가 활발하게 사용됩니다. 특히, 데이터베이스의 정합성을 보장하는 트랜잭션 처리가 대표적인 예입니다. @Transactional 어노테이션을 서비스 메서드에 붙여주면, 해당 메서드가 성공적으로 완료되었을 때만 DB에 변경 사항을 반영(Commit)하고, 도중에 에러가 발생하면 모든 작업을 취소(Rollback)하게 됩니다. 이 모든 과정이 AOP의 힘으로 자동화됩니다.

 

2.7. View 반환 및 응답

 

컨트롤러는 로직 처리 후 결과를 담은 모델(Model)을 뷰(View)에 전달하고, 뷰는 모델 데이터를 기반으로 HTML 페이지를 생성하여 클라이언트에 응답합니다. JSP, Thymeleaf, Freemarker 등 다양한 뷰 기술이 사용될 수 있습니다.

 

2.8. 응답 단계: 인터셉터, 필터 역순 실행

 

응답이 클라이언트로 전달되기 전, 요청 단계에서 실행되었던 인터셉터필터가 이번에는 역순으로 동작합니다.

  1. 인터셉터postHandle()afterCompletion()이 순서대로 실행됩니다.
  2. 필터 체인이 doFilter() 메서드의 나머지 부분을 실행하며 응답에 대한 작업을 처리합니다.

이런 역순 실행을 통해, 요청 전/후에 일관된 로직을 적용할 수 있게 되는 것이죠.


 

3. FAQ: 자주 묻는 질문 🙋‍♀️

 

Q1. 필터와 인터셉터의 가장 큰 차이점은 무엇인가요?

  • 동작 위치: 필터는 서블릿 컨테이너(WAS) 레벨에서 동작하고, 인터셉터는 스프링 컨텍스트(DispatcherServlet) 레벨에서 동작합니다.
  • 적용 범위: 필터는 모든 요청에 적용할 수 있지만, 인터셉터는 스프링 MVC 내의 컨트롤러 호출과 관련된 요청에만 적용됩니다.
  • 주요 역할: 필터는 인코딩, 보안, 로깅 등 서블릿 요청/응답에 대한 전처리/후처리 작업에 주로 사용되며, 인터셉터는 컨트롤러 호출 전/후에 특정 로직(인증, 권한, 로깅)을 적용하는 데 사용됩니다.

Q2. AOP는 필터나 인터셉터와 어떻게 다른가요? AOP는 ‘관점 지향 프로그래밍’으로, 필터나 인터셉터가 ‘요청-응답’이라는 특정 흐름에 종속되어 있는 것과 달리, 어떤 메서드가 ‘언제’ 호출되는지에 초점을 맞춥니다. 예를 들어, saveUser()라는 메서드가 호출될 때 트랜잭션을 적용하거나, 로깅을 수행하는 등 비즈니스 로직 자체에 부가 기능을 ‘주입’하는 개념입니다. 필터와 인터셉터는 ‘요청’이라는 단위에 묶여 있는 반면, AOP는 ‘메서드’라는 단위에 묶여 있다고 생각하면 쉽습니다.

Q3. 전자정부프레임워크 경량시스템에서 필터, 인터셉터, AOP를 함께 사용하면 어떤 장점이 있나요? 이 세 가지 기술을 적재적소에 사용하면 코드의 중복을 획기적으로 줄이고 유지보수성을 높일 수 있습니다.

  • 필터: 모든 요청에 대한 전역적인 처리(인코딩, 보안)
  • 인터셉터: 컨트롤러 호출과 관련된 공통 로직 처리(로그인 체크, 권한)
  • AOP: 비즈니스 로직 내의 횡단 관심사 처리(트랜잭션, 로깅) 각자의 역할이 명확하게 분리되어 있어, 개발자는 핵심 비즈니스 로직에만 집중할 수 있게 됩니다.

 

4. 결론: 이 모든 것의 조합, 완벽한 경량시스템 🚀

 

오늘 우리는 전자정부프레임워크 경량시스템이 어떻게 동작하는지, 그리고 그 핵심에 필터, 인터셉터, AOP가 어떻게 자리 잡고 있는지 상세히 살펴보았습니다. 처음에는 복잡하게 느껴졌던 이 기술들이 이제는 제법 친숙하게 느껴지시나요?

전자정부프레임워크 경량시스템은 단순히 개발을 빠르게 해주는 도구가 아니라, 복잡한 시스템을 체계적이고 효율적으로 구축하기 위한 철학이 담긴 결과물입니다. 필터, 인터셉터, AOP는 이 철학을 구현하는 데 필수적인 요소들이죠. 이들의 역할을 명확히 이해하고 적절하게 활용하는 개발자가 된다면, 여러분은 어떤 복잡한 프로젝트라도 자신감을 가지고 해결해 나갈 수 있을 것입니다.

오늘의 지식이 여러분의 개발 여정에 큰 도움이 되기를 바라며, 다음에도 더 유익한 정보로 찾아뵙겠습니다. 감사합니다! 😊