애플리케이션에서 인증(Authentication) 과정은 응용 로직이다.

easbui·2023년 8월 22일

우리가 사용하는 대부분의 서비스에는 기본적으로 애플리케이션에 대한 권한이 있는 사용자인지 확인하는 인증절차가 있다. 그것이 어떤 기술을 기반으로 이루어지던 간에 (session, jwt ...) 대부분의 서비스를 개발할 때 꼭 포함된다. 나는 대개 그렇듯이 JWT를 많이 사용하였다.

스프링을 이용해서 개발할 때는 보통 Spring security를 통해서 구현하니 굳이 생각해볼 일이 없었는데, 다른 언어와 프레임워크 상에서 DDD와 클린 아키텍처에 충실하게 구현할 때, 이 인증 과정을 어떤 층위에서 구현할 지 고민을 많이 했다.

처음에는 로그인과 회원가입 절차 역시 하나의 도메인으로 설정했으니까 사용자 정보를 나타내는 도메인 모델에 JWT 등을 포함시켜 처리하려 했으나, 구현 기술을 도메인 모델에 담는 게 넌센스란 걸 곧 깨달았다. 그렇다고 스프링에서 처럼, 이것을 완전히 인프라스트럭처 층위에서 모두 처리하게 하는 것도 무언가 찝찝하다. 결국 Request에서 JWT를 받아 어떤 사용자의 요청인지 알아 내기 위해선 데이터베이스에 접근해야 했기 때문에, 별 관련없는 두 개의 인프라스트럭처 사이에 의존성이 생기는 것이 싫었다.

그래서 적당한 선에서 타협을 보려면 응용 계층에서 인증을 처리하는 인프라스트럭처와 데이터베이스 간에 조율을 해주는 것이 필요하다. 인증 과정 역시도 서비스의 범위 내에 두면서 관리할 수 있기 때문이다.

profile
개발자 - 프로그램을 개발새발짜는 사람

0개의 댓글