Post

MovieCommunitySite - 인증 관리 기능


Movie Community - 인증 관리 기능에 대하여

인증 관리 기능이란 사용자를 확인하고 인증하는 프로세서다.
여기에는 여러가지가 있지만 프로젝트에서 구현했던 로그인, 로그아웃에 대해 말하고자 한다.
국비 수업을 들을 때 세션 기반으로 로그인, 로그아웃을 구현하는 방법을 배웠다.
그래서 프로젝트에서 로그인, 로그아웃 기능을 구현 할 때 배운대로 세션 기반으로 구현을 했다.
하지만, 코드를 볼수록 너무 간단하게 구현을 한 것 같아서 기분이 묘했다.
원래 이런건가? 너무 간단한데..? 이게 맞는 건가 ? 싶었다.
그래서 찾아본 결과를 작성하고자 한다.

세션 기반의 로그인, 로그아웃

세션 기반의 로그인, 로그아웃은 많은 웹 프레임워크에서 기본적으로 제공하는 기능이다.
구현이 간단하고 유지보수가 상대적으로 용이하다는 장점이 있다.
하지만 세션은 서버에서 관리를 한다. 사용자가 늘어날수록 서버에 부담이 된다는 점, 쿠키 공격에 취약,
세션을 종료하더라도, 클라이언트 측에서 세션 ID를 보유하고 있다면 다시 접근이 가능할 수 있다는 단점이 있다.
처음 세션으로 구현 할 때는 이런 부분들에 대해 생각을 하지 않았다.
그냥 이 방법을 알려주었으니 이 방법을 사용한 것이 크다.
지금 생각해보면 굉장히 안일했다. 물론 배운것을 잘 써야 하는 것도 맞지만,
구현하는데 의문을 갖지 않았던 것에 대해 반성해야 한다.
왜 이렇게 구현했어? 라는 질문을 받았을 때 모르는데요? 그냥 이렇게 배웠는데요? 라고 답할 수는 없지 않은가?
이 때 이후로 질문을 받았을 때 정확하게 답변 할 수 있고, 또한 어떤 기능을 하는지,
왜 그렇게 구현해야 하는가 라는 습관을 가지려고 끊임없이 다짐한다.
그 결과 세션 방식 말고 다른 방법이 있는가 찾아보게 되었고 알게 된 것이
Spring Security, JWT(JSON Web Token)다.

Spring Security

Spring Security는 보안 관련 작업을 처리하기 위한 프레임워크다.
초기에는 설정이 복잡하고 학습이 필요하다는 단점이 있다.
하지만 공식 문서를 통해 사용 방법과 설정 등에 대한 자세한 정보를 제공한다.
다양한 커뮤니티와 생태계를 통해 지속적인 업데이트와 지원을 받을 수 있다는 장점이 있다.
스프링 시큐리티는 다양한 보안 요구사항에 대응할 수 있어,
안정성과 신뢰성 있는 애플리케이션 보안을 구현하는 데에 효과적으로 활용된다.

JWT(JSON Web Token)

JWT(JSON Web Token)는 정보를 안전하게 전송하기 위한 표준 방식 중 하나다.
주로 웹에서 사용되며, 클라이언트와 서버 간의 정보를 JSON 객체로 안전하게 전송한다.
클라이언트가 토큰을 소유하고 관리하므로, 인증과 소유권이 분리된다. 서버는 토큰의 유효성만을 확인하면 된다.
서버에서 세션을 관리할 필요가 없어지므로, 서버 확장성이 높아진다. 분산 환경에서 성능이 향상될 수 있다.
Base64 인코딩을 사용하여 간단한 문자열로 변환되어 있어 처리가 용이하다.
다양한 플랫폼에서 쉽게 해석될 수 있다.
하지만 JWT에는 사용자 정보가 포함되어 있기 때문에 토큰이 커질 수 있다.
이는 모든 요청에 포함되어 네트워크 트래픽을 증가시킬 수 있다.
토큰은 클라이언트에 저장되기 때문에, 안전한 보관이 필요하다.
또한 토큰이 한 번 발급되면 변경이 불가능하므로 만료 시간을 적절히 설정해야 한다.
로그아웃 등의 세션 관리는 클라이언트에서 처리해야 한다.

느낀점

세션 기반으로 로그인, 로그아웃 구현

  • 프로젝트 선택 기준
    • 간단한 웹 애플리케이션 또는 작은 규모의 프로젝트.
    • 서버 측에서 상태를 유지해야 하는 경우.
  • 장점
    • 구현이 간단하고, 상대적으로 안전함.
    • 세션을 통한 상태 유지가 용이함.
  • 단점
    • 서버 부하 발생 가능.
    • 확장성에 제약이 있을 수 있음.

스프링 시큐리티로 로그인, 로그아웃 구현

  • 프로젝트 선택 기준
    • 대규모 애플리케이션 또는 강력한 보안이 필요한 경우.
    • 다양한 인증 및 권한 부여 기능을 활용해야 하는 경우.
  • 장점
    • 강력한 보안 기능 제공.
    • 세부적인 접근 제어 및 사용자 관리 용이.
  • 단점
    • 초기 설정이 필요하고, 복잡한 설정이 필요함.
    • 구현이 다소 복잡할 수 있음.

JWT로 로그인, 로그아웃 구현

  • 프로젝트 선택 기준
    • 분산된 시스템 또는 마이크로서비스 아키텍처.
    • 상태를 서버에 저장하지 않고 토큰을 사용하여 상태를 관리하려는 경우.
  • 장점
    • 서버 부하 감소, 확장성 향상.
    • 토큰 기반의 인증은 분산된 환경에서 유연하게 작동.
  • 단점
    • 토큰 크기 증가, 보안 측면에서 고려 필요.
    • 만료 기간 관리 및 토큰 유출에 대한 보안 고려 필요.

스프링 시큐리티는 강력한 보안이 필요한 금융 서비스 및 결제 시스템, 기업 내부 시스템,
인터넷 서비스 및 웹 애플리케이션 등에 사용하면 적절하다고 생각한다.
찾아보니 스프링 시큐리티와 JWT는 두 가지 다 사용해도 좋다고 한다.
이렇게 많은 것들이 있는데 배웠다고 그냥 세션으로 구현 했던 것이 나 자신에게 실망스럽다.
이런 점들을 앞으로 개선해야 할 것이고, 좋은 개발자가 되기 위해 끊임없이 공부를 하겠다고 다짐했다.
다음 프로젝트는 스프링 시큐리티와 JWT로 구현을 해볼 예정이다.