피트니스 산업과 IT, 그리고 스타트업

IT

인증과 보안, 엑세스 토큰과 리프레시 토큰

핏더스트리 2025. 5. 23. 13:51

인증과 보안, 엑세스 토큰과 리프레시 토큰

현대의 대부분의 웹과 앱은 로그인 기능이 있습니다. 그런데 우리는 로그인 한 번 하고 나면, 일정 시간 동안 계속 앱을 사용할 수 있죠. 예를 들어 은행 앱에 로그인하고 나서 바로 끊기지 않고 다양한 기능을 이용하거나, 유튜브에 로그인해두면 매번 로그인하지 않아도 내 계정을 유지할 수 있습니다.

 

이런 동작의 핵심에는 바로 인증(authentication) 시스템과 보안 토큰(token)이라는 기술이 숨어 있어요. 사용자 정보를 서버에 매번 보내지 않고도 ‘이 사람은 인증된 사용자다’라는 것을 알려주는 역할을 합니다.

 

그중에서도 액세스 토큰(access token)과 리프레시 토큰(refresh token)은 특히 중요한 역할을 하죠. 하지만 처음 접하는 사람에게는 이름도 비슷하고 개념도 헷갈리기 쉬워서, 이 두 가지를 어떻게 사용하고 왜 필요한지를 명확히 이해하는 것이 중요합니다. 이번 글에서는 인증 시스템의 큰 그림과 함께, 이 두 가지 토큰의 역할을 초보자의 눈높이에서 천천히 설명해보겠습니다.

 

 

 

로그인과 액세스 토큰

웹 서비스나 앱에서 로그인할 때 우리는 보통 이메일과 비밀번호를 입력합니다. 이 정보를 서버가 확인해서 맞다고 판단하면, 바로 “로그인 성공”이라고 알리고 끝내는 걸까요? 그렇지 않습니다. 그렇게 하면 매번 요청할 때마다 비밀번호를 보내야 하니까, 보안상 매우 위험합니다.

 

그래서 로그인에 성공하면, 서버는 “인증 완료”라는 증명서를 하나 만들어줍니다. 이 증명서가 바로 액세스 토큰(access token)이에요.

 

이 토큰은 일종의 출입증 같은 거예요. 회사 건물에 출입하려면 일일이 신분증을 보여주는 게 아니라, 사원증을 태그하듯이요. 앱이나 브라우저는 서버가 준 액세스 토큰을 가지고 여러 기능(게시물 보기, 댓글 달기 등)을 이용하게 됩니다.

 

하지만 이 토큰은 영원히 유효하지 않아요. 보통 몇 분에서 몇 시간 내에 만료되도록 설정되어 있습니다. 왜냐하면 유출되었을 때 피해를 줄이기 위해서예요.

 

즉, 액세스 토큰은 짧게 쓰고 버리는 1회용 열쇠 같은 것이고, 이 열쇠를 안전하게 관리하고, 만료되었을 때 새로운 열쇠를 받는 방식이 리프레시 토큰과 연결됩니다.

 

 

 

리프레시 토큰의 역할

앞에서 살펴본 것처럼, 액세스 토큰은 보안을 위해 일정 시간이 지나면 만료되도록 설계됩니다. 그러면 사용자 입장에서는 이런 의문이 생기죠. “토큰이 만료되면 다시 로그인해야 하나요?” 불편함 없이 앱이나 웹 서비스를 계속 사용하려면, 토큰이 만료될 때마다 로그인을 반복하게 만드는 건 매우 비효율적입니다.

 

이때 등장하는 것이 바로 리프레시 토큰입니다. 리프레시 토큰은 만료된 액세스 토큰을 갱신하는 데 사용되는 일종의 ‘재발급권’입니다. 예를 들어 액세스 토큰이 회사 사무실 출입을 위한 1일권이라면, 리프레시 토큰은 장기권처럼 매일 새 출입증을 발급받을 수 있는 권한을 갖는 셈이죠. 사용자에게는 로그인 상태를 끊지 않고 지속할 수 있는 경험을 제공하고, 서버는 보안을 유지하면서도 유저 인증을 유연하게 처리할 수 있게 됩니다.

 

리프레시 토큰은 일반적으로 액세스 토큰보다 더 긴 유효기간을 가지며, 액세스 토큰이 만료됐을 때만 사용됩니다. 예를 들어 사용자가 웹사이트에서 오랜 시간 활동하지 않다가 다시 기능을 이용할 때, 클라이언트는 자동으로 저장해둔 리프레시 토큰을 서버에 보내 새로운 액세스 토큰을 요청합니다. 서버는 리프레시 토큰의 유효성을 검증한 뒤 새 액세스 토큰을 발급해주죠. 이렇게 하면 사용자는 다시 로그인하지 않아도 계속해서 서비스를 이용할 수 있게 됩니다.

 

결국 리프레시 토큰의 역할은 사용자 경험과 보안을 동시에 지키는 다리 역할이라고 볼 수 있습니다. 시스템은 유연하게 작동하면서도 위험을 최소화할 수 있게 되고, 사용자는 불필요한 로그인 반복 없이 앱을 매끄럽게 이용할 수 있습니다.

 

 

 

실제 서비스에서는 어떻게 활용될까

토큰 기반 인증 구조는 실제 서비스에서 굉장히 널리 사용되고 있습니다. 대부분의 웹앱이나 모바일 앱에서는 로그인 시 액세스 토큰과 리프레시 토큰을 함께 발급하고, 그 토큰들을 바탕으로 사용자의 인증 상태를 관리합니다. 사용자가 로그인하면 클라이언트는 액세스 토큰을 통해 대부분의 API 요청을 처리하고, 일정 시간이 지나 토큰이 만료되면 리프레시 토큰을 이용해 새로운 액세스 토큰을 받아옵니다. 이 과정은 대부분 백그라운드에서 자동으로 이루어지기 때문에 사용자는 로그인 상태가 유지된다는 느낌을 받게 됩니다.

 

하지만 이 구조를 제대로 활용하려면 몇 가지 중요한 보안 설계를 신중히 고려해야 합니다. 첫째, 리프레시 토큰은 반드시 안전한 저장소에 보관해야 합니다. 브라우저에서는 httpOnly 쿠키를 사용하고, 모바일 앱에서는 키체인(iOS)이나 EncryptedSharedPreferences(Android) 같은 안전한 영역을 활용하는 것이 일반적입니다. 둘째, 리프레시 토큰이 탈취되는 상황에 대비해 서버는 토큰 재사용 감지 기능을 포함해야 합니다. 만약 동일한 리프레시 토큰이 두 곳에서 동시에 사용된다면, 그 토큰은 폐기하고 사용자에게 재로그인을 요구해야 합니다. 셋째, 로그아웃 시에는 리프레시 토큰을 반드시 서버에서 폐기해야 합니다. 그렇지 않으면 사용자가 로그아웃했음에도 불구하고, 다른 기기에서는 여전히 인증 상태가 유지될 수 있기 때문입니다.

 

토큰 기반 인증은 매우 효율적인 구조이지만, 하나의 토큰이 곧 사용자의 신원 자체를 의미하기 때문에 보안적으로 매우 민감한 설계입니다. 작은 실수 하나로 인해 전체 서비스의 보안이 무너질 수 있으므로, 설계 초기부터 토큰의 저장 위치, 만료 주기, 폐기 조건 등을 명확하게 정의해두는 것이 중요합니다.

 

 

마치며...

인증 시스템은 단순히 “누가 로그인했는가”를 확인하는 기능이 아닙니다. 서비스 이용자에게는 불편함 없는 사용 경험을 제공하면서도, 개발자에게는 데이터와 기능을 안전하게 보호할 수 있는 구조를 제공해야 하죠. 액세스 토큰과 리프레시 토큰의 개념을 제대로 이해하고 설계하는 일은 그 출발점입니다.

 

초기에는 복잡해 보일 수 있지만, 핵심은 의외로 간단합니다. 액세스 토큰은 짧게 쓰고 빠르게 바꾸는 임시 키, 리프레시 토큰은 장기적으로 보관하면서 새로운 키를 받을 수 있는 장치입니다. 이 두 가지를 적절히 조합하면, 사용자도 편하고 서비스도 안전한 구조를 만들 수 있습니다.

 

시스템을 만드는 사람이라면, 사용자의 편의만큼이나 보안도 책임져야 합니다. 이 글이 인증 시스템을 처음 접하는 분들이 큰 그림을 이해하고, 자신만의 서비스에 맞는 구조를 설계하는 데 도움이 되었기를 바랍니다.

반응형