본문 바로가기

개발 경험기

(3)
[JWT 로그인 구현기] (3) Redis 도입하기 전편에서 refresh token을 MySQL에 저장했다. 그런데 내가 개발한 애플리케이션에서는 사용자 로그인, 토큰 재발급 요청이 들어올 때마다 refresh token 값이 수정된다. 쉽게 말해 MySQL IO 연산이 너무 자주 일어난다. 이는 성능적으로 문제가 있음을 느꼈고 개선하고 싶었다. 그래서 이번 편에서는 전편에서 생긴 성능 문제를 해결하기 위해 고민하고 공부한 내용을 공유하려 한다. Redis 성능에 대해 문제가 생길 것 같다고 생각한 이유는 MySQL은 데이터를 SSD, HDD에 저장하기 때문이다. 성능을 어떻게 올릴 수 있을까 고민하고 공부하면서 Redis를 알게 됐다. Redis? Redis는 Remote Dictionary Server로 key-value로 데이터를 저장하는 서버이다..
[JWT 로그인 구현기] (2) JWT 로그인 개발하기 전 편에서 사용자 인증 방식으로 Token 기반 방식인 JWT를 이용해 로그인 기능을 개발했다. 그리고 멘토님께 받은 피드백으로 글을 마무리했다. 이번 글에서는 멘토님께 받은 피드백을 계기로 JWT를 이용한 로그인 기능을 고도화하면서 고민한 내용을 공유하려고 한다. Jwt 반환 방식 처음 개발한 JWT 로그인에서는 발급한 JWT를 어떻게 클라이언트로 보낼지 고민하지 않고 헤더에 'token'이라는 이름으로 반환했다. 이 부분을 멘토님께 피드백을 받고 관련 내용을 공부하면서 적합하다고 생각하는 방식으로 수정했다. JWT를 내려주는 방식으로 응답 메시지의 바디, 헤더, 쿠키로 3가지 선택지가 존재한다. 선택에 있어 중요한 부분은 JWT를 클라이언트가 안전하게 보관할 수 있을지다. 선택을 위해 3가지 방법의 ..
[JWT 로그인 구현기] (1) Session vs Token 팀 프로젝트를 진행하면서 사용자 인증, 인가 기능 개발을 맡았다. 맡은 부분을 개발하면서 많은 고민을 하고 코드를 점진적으로 개선했다. 이 과정에서 한 고민과 경험을 공유하기 위해 글을 작성하게 됐다. Session vs Token 첫 번째 만났던 문제는 사용자 인증 방식이었다. 사용자 인증 방식은 토큰 기반 방식과 세션 기반 방식이 있다. 이 중 어떤 방식으로 개발할지 고민했다. 현재 상황에 맞는 선택하기 위해 두 방식의 장단점을 이해하고 내 상황에 적절한 방식을 선택했다. Session 세션 기반 방식의 흐름은 다음 그림과 같다. 세션 기반 방식은 사용자가 인증되면 사용자와 관련된 세션을 만들고, 세션 아이디를 반환해 준다. 이때 세션은 서버 메모리 또는 DB에 저장할 수 있다. 그 후 사용자는 세션..