개발일기

NextAuth 사용자 정보 update 및 mutate 하기 본문

SideProject(My-Selectshop-Finder)

NextAuth 사용자 정보 update 및 mutate 하기

황대성 2025. 2. 3. 18:51

개요

알수없는 supabase 오류로 새로운 백엔드 서비스를 사용하여 다시 프로젝트를 만들기 시작했다.

간단하게 변경하고 마무리 할줄 알았지만 새로운 지식을 습득하는건 역시 어려웠다.

나는 Supabase를 대신하기 위해 데이터베이스로는 postgreSQL을 사용하였고,

회원가입과 로그인 관리를 위해 NextAuth를 사용하였다.

NextAuth를 사용하면서 사용자의 정보를 업데이트 했을 때

바로 최신화 되지 않는 것을 해결하는 방법에 대해 기록하려고 한다.

 

 

 

 

 

첫번째, DB데이터 최신화 하기

먼저 나의 생각은 이러했다.

NextAuth가 알아서 처리해주지 않을까? 라는 생각을 처음에 했다.

이유는 NextAuth의 Adapter로 Prisma와 연결 했기 때문. 

그래서 처음으로 시도한 방법은 DB에 저장되어 있는 유저 정보를 업데이트하는 것이였다.

간단하게 하기 위해 코드는 간소화 했다.

 

 

 

첫번째 방법을 시도 했지만

데이터베이스의 정보만 업데이트 한다고 해서 유저의 정보가 바로 최신화 되지는 않았다.

그렇다고 해서 이방법이 완전히 틀린(?) 문제는 아니였다.

이유는 로그아웃 후에 다시 로그인 하면 유저 정보가 업데이트 되었기 때문이다.

그래서 나는 이 방법을 어떻게 해결해야할지 고민했다.

만약 내가 이 방법을 해결하지 못한다면 최후의 수단으로 프로필 업데이트시 자동 로그아웃 후 로그인이 되게 하려고 했다.

열심히 찾다보니 NextAuth에서 제공하는 update 메서드를 발견했다.

그리고 정답을 발견했지만 정답을 보고도 이해를 못해 많은 시간을 헤맸다.

확인해보자.

 

 

 

 

NextAuth에서 제공하는 update 메서드 사용하기

 

공식문서에는 이렇게 설명 되어있다.

NextAuth에서는 세션을 관리하는 방법 2가지가 있는데 첫번째가 jwt 방식이고, 두번째는 Database 방식이다.

만약 jwt 방식으로 세션을 관리한다면 update() 메서드를 통해 세션 객체를 업데이트 할 수 있다.

Database의 방식도 비슷한 방법인 것 같다.

코드를 확인해 보자.

 

update() 메서드를 사용해서 세션을 먼저 업데이트 하고, trigger를 통해 update가 발생하면 업데이트 된 세션 데이터를 토큰 데이터에 넣어준다. 그렇게 되면 화면에 보여지는 사용자 정보가 mutate 된다.

 

 

 

트리거란?
데이터베이스에서 특정 이벤트가 발생할 때 자동으로 실행되는 특별한 종류의 저장 프로시저를 말합니다.
트리거는 데이터 무결성을 유지하거나, 특정 작업을 자동화하기 위해 사용됩니다.
어떠한 이벤트가 발생할 때 자동으로 실행되는 것이라고 이해하면 될거 같다. 우리는 update라는 이벤트가 발생 되었고, 그로 인해 session 데이터를 token 데이터를 자동으로 실행 했다. 라고 이해하면 좋을 것 같다.

NextAuth에서는 트리거를 발생시킬 수 있는 방법이 아래의 3가지 방법인 것 같다.

 

 

 

 

update() 코드 적용하기

 

프로필 업데이트에서 유저의 네임과 image만을 바꿀 수 있기 때문에 변경된 session 데이터 name과 image만 토큰 데이터에 넣어주면 유저 정보가 mutate 된다.