파이널 프로젝트 회고록 - 로그인 1편
2025년 03월 22일

파이널 프로젝트 회고
데브코스를 수료했지만, 기간에 쫓기다 보니 일부 기능들이 애매하게 구현되거나 개선이 필요한 부분들이 여전히 많다.
특히 로그인 인증 절차는 백엔드 팀원들과 소통하는 과정에서 서로 혼선이 생겨 어려움을 겪었다. 백엔드 팀은 세션 기반 로그인 방식에 더 익숙했던 것으로 보인다.
반면 프론트 팀은 소셜 로그인을 통한 JWT 토큰 방식에 더 익숙했기에 어떤 인증 방식이 프로젝트에 적합할지 많은 논의를 진행했고, 결국 우리는 확장성과 실무 활용성을 고려해 JWT 토큰 기반의 소셜 로그인을 구현하기로 했다.
왜 JWT 토큰기반인가?
세션 방식의 로그인 구현은 보안적인 측면에서 장점이 있지만, 확장성 측면에서 한계가 있어 JWT 토큰 기반 인증을 제안했다. 사용자 수가 늘어나거나 트래픽이 증가할 경우, 세션 방식은 안정적인 성능을 보장하기 어렵기 때문이다.
특히 프로젝트가 성장하여 여러 서버로 분산되는 환경에서는 복잡도와 비용이 크게 증가한다. 예를 들어, 서버1에 유저 A의 세션 정보가 저장되어 있는데 요청이 서버2로 라우팅된 경우, 서버2에는 해당 세션 정보가 없어 인증되지 않은 사용자로 처리되는 문제가 발생할 수 있다.
최근 실무에서도 JWT를 선호하는 경향이 더 많다는 강사님의 의견도 한 몫했다. 결국 우리는 실무환경에서 로그인 기능을 잘 다루어야 할텐데, 세션만 할 줄 안 다면 경쟁력은 떨어질 것이다. 아마 이부분은 백엔드 팀원들에게도 납득이 되는 이유가 아니었을까? 라고 조심스럽게 예상해본다.
JWT 인증의 장점
1. 확장성이 뛰어남
토큰이 클라이언트에 저장되므로 서버는 상태를 유지할 필요가 없음
AWS, GCP, Vercel 같은 클라우드 환경에서 무상태(stateless) 구조로 관리가 용이함
2. 마이크로서비스 아키텍처와 잘 어울림
분산된 서비스 환경에서도 JWT로 어디서든 사용자 정보 검증 가능
중앙 인증 서버에서 발급된 토큰만으로 다른 서비스들이 인증 처리 가능
3. 모바일/SPA 환경에서 활용하기 좋다.
React, Vue 같은 SPA나 모바일 앱에서 토큰 기반 인증이 자연스러움
클라이언트 사이드 렌더링(CSR) 환경에서 토큰 관리가 세션 유지보다 효율적
4. 표준 인증 프로토콜과의 호환성
구글, 카카오 등 OAuth 기반 소셜 로그인이 기본적으로 토큰 방식 사용
표준에 맞는 방식으로 확장성과 연동성이 우수함
JWT 인증의 단점
JWT 인증의 가장 큰 단점은 보안이 취약하다는 점이다.
공격자가 토큰을 탈취하면 해당 토큰을 이용해 사용자 권한으로 무제한 요청을 보낼 수 있다. 특히 XSS 공격으로 노출되면 서버 측에서 즉시 무효화하기 어렵다. 리프레시 토큰을 클라이언트의 스토리지에 보관하게 되면 보안 위험이 증가하게 되는 셈이다.
이런 문제점 때문에, 백엔드와 프론트 모두가 토큰 관리에 어려움을 겪을 수밖에 없는 것도 단점이 될 것이다. 만료 기간이 짧은 액세스 토큰을 어떻게 다룰지가 핵심이 될 것이고, 이에 따라서 백엔드와 협의하여 액세스 토큰의 만료 시간을 적절하게 설정해야 UX를 해치지 않을 것이다.
또한 토큰에 정보가 많을수록 HTTP 요청마다 전송되는 데이터 크기가 증가하여 네트워크 부하 및 성능에 영향을 줄 수 있다. 발급된 토큰은 만료 전까지 무효화하기 어려워 비상 상황(계정 해킹 등)에서 즉각적인 접근 차단이 복잡하다는 점도 고려해야 한다.
안전한 JWT 구현을 위해서는 토큰 순환(token rotation), 블랙리스트 등 추가 보안 메커니즘이 필요하며, 개발자가 꼼꼼하게 보안을 챙기지 않는다면 취약점이 발생할 가능성이 높아진다. 이러한 구현 복잡성은 개발 과정에서 추가적인 시간과 노력을 요구하게 된다.
잘 구현하면 좋은 터닝 포인트
인증 구조의 복잡성과 성장 기회
복잡도가 증가하게 되면서 다른 기능의 개발이 지연될 가능성도 높다는 위험이 있었다. JWT 기반 인증은 토큰 발급, 검증, 갱신, 저장 전략 등 여러 측면에서 세션 방식보다 구현해야 할 세부 사항이 많기 때문이다.
하지만, 이 과정에서 백엔드 팀원들과의 협업 기회가 확장되고, 양쪽이 함께 보안을 강화하며 시스템을 발전시키는 과정을 공유하면서 서로의 역량이 크게 성장할 것이라고 믿었다. 특히 표준 프로토콜에 맞는 구현 방식을 채택함으로써 팀 전체가 업계 모범 사례를 학습하고 적용할 수 있는 기회였다.
로그인 인증은 어떤 서비스에서든 기초적이면서도 가장 중요한 부분 중 하나라고 생각했다. 다른 프로젝트를 진행하며 백엔드 팀원들과 로그인 인증 방식과 보안정책에 대해 협의할 기회가 많지 않았는데, 이번 프로젝트를 통해 이를 충분히 논의할 수 있을 거라고 생각했다.
특히, 인증 관련 취약점은 매번 중요한 관심사에 속하는 만큼, 보안적으로 견고한 인증 시스템 구축 경험은 개발자로서 매우 가치 있는 자산이 된다는 판단이었다. 토큰 순환, CSRF 방어, Secure/HttpOnly 쿠키 활용, 접근 제어 메커니즘 등의 보안 기법을 적용해 보는 과정은 팀 전체의 보안 인식을 높이는 데 기여할 것이다.
또한 인증 시스템은 UX에 직접적인 영향을 미치므로, 보안과 UX 사이의 적절한 균형점을 찾아가는 과정에서 프로젝트 설계 관점의 성장도 기대할 수 있다. 이러한 이유로 약간의 욕심을 보태서, JWT 인증 구현은 초기에는 부담스러울 수 있지만 장기적으로 팀에게 큰 가치를 가져다 줄 것으로 판단했다.