📘 워너플라이 (WANNAFLY)

큐시즘이라는 동아리에서 만든 프로젝트 한 번에 지원서를 관리하고 작성하는 웹사이트 서비스 wannafly이다.

다른 프로젝트와는 다른 이점들을 살펴보자.

Lambda

Lambda를 이용하여 파이썬 맞춤법 검사기 라이브러리 사용, 하나의 작은 API를 사용하기 위해 EC2를 올리는게 비효율적, 람다를 사용하여 인프라 관리 부담 감소하게되었다. 특히 요청이 있을 때만 실행되는 구조라, 상시 실행 서버를 운영/모니터링(패치, 스케일링, 장애 대응 등)해야 하는 부담을 줄일 수 있었다.

처음에는 Docker을 활용하여 ec2에 플라스크 서버를 열어 스프링이랑 통신을 하려고 했다. 하지만 하나의 작은 api를 사용하기 위해 ec2에 올리는게 비효율적이라고 판단하여 aws lambda를 사용하게 되었다. 결과적으로 작은 기능 하나를 위해 서버를 계속 띄워두지 않아도 되었고, 트래픽이 많지 않은 상황에서는 비용 측면에서도 더 합리적이었다.

JWT,Access Token,Refresh Token

JWT 사용, Access Token의 시간을 짧게 두어 Access Token을 탈취 당했을때를 대비, Refresh Token을 캐싱하여로그인이 자주 풀리는 사용자 경험을 개선 Access Token을 짧게 두면 보안적으로는 유리하지만(탈취 시 피해 시간 최소화), 사용자는 토큰 만료로 인해 자주 로그인이 풀리는 경험을 하게 될 수 있다. 이 부분을 Refresh Token으로 Access Token을 재발급하는 방식으로 보완했다.

같이 프로젝트 하는 형이 설명해주었는데 학교 eclass만 가봐도 사용자가 로그인을 했을때 몇분 지나지 않아서 로그인이 풀리는 경우가 존재한다. 그 경험을 개선하고자 Refresh token을 사용하였다. 즉 사용자가 서비스 이용 중 Access Token이 만료되더라도, Refresh Token으로 자동 재발급을 받아 다시 로그인하지 않아도 되도록 구성했다.

또한 refresh token을 Redis에 저장하였는데 그 이유는

  1. 성능: Redis는 고성능으로 유명한 인메모리 데이터 저장소다. Redis에 새로 고침 토큰을 저장하면 빠른 액세스 및 검색이 가능하여 인증 프로세스의 대기 시간이 줄어든다.

  2. 지속성: Refresh Token을 서버에서 관리함으로써 토큰을 통제할 수 있다는 점이었다. 예를 들어 로그아웃, 강제 로그아웃(탈취 의심), 특정 사용자/디바이스의 토큰 만료 처리 등 “토큰 회수(무효화)”가 가능해진다.

  3. 만료: Redis는 데이터 만료 시간(TTL) 설정을 기본적으로 지원하므로 특정 기간이 지나면 새로 고침 토큰이 자동으로 만료될 수 있다. 이는 토큰 순환과 같은 보안 조치를 시행하는 데 도움이 되며 오래되거나 사용되지 않은 토큰이 캐시에 무기한 남아 있는 위험을 완화한다. 추가로 Refresh Token을 서버에 저장해두면, Refresh Token 재사용(Replay) 같은 이상 징후를 감지하거나, 정책적으로 1인 1토큰/기기별 토큰 관리 같은 확장도 가능하다.토큰이 캐시에 무기한 남아 있는 위험을 완화한다.

이점들은 여기까지 인거같고, 이 프로젝트에서는 코드적는 부분이나 스프링에 전체적인 틀 객체지향 생활체조 원칙을 지키며 코딩하고 여러가지로 많이 배운 프로젝트였다.

태그:

카테고리:

업데이트: