은행 앱은 왜 10분까지만 로그인이 유지되나요

보안은 서비스의 문지기구나

by 잇문학도
1767939778009?e=1769644800&v=beta&t=h-ADWrXlmS-ceC82h7hR7hBOjGNUfRhlz0yITzQ7aMU



1.
보안과 인증은 서비스라는 성문에 서 있는 '문지기'와 같습니다. 문지기는 크게 두 가지를 확인하는데요. "당신, 우리 성의 주민이 맞습니까?"라고 신분증을 확인하는 인증(Authentication)과, 당신이 왕의 방까지 들어갈 수 있는 귀족인지, 아니면 마당까지만 갈 수 있는 평민인지 출입 권한을 확인하는 인가(Authorization)입니다.

2.
여기에 우리가 자주 듣는 OAuth(여권)가 등장합니다. 사용할 서비스마다 매번 새로운 카드키를 만드는 대신, 국가가 발행한 여권(구글이나 카카오)으로 신분을 증명하는 방식이죠. 상대방 서비스에 내 비밀번호를 알려주지 않아도 되니 사용자 입장에서도 훨씬 안전하고 편리합니다.
신분이 확인되면 문지기는 우리에게 JWT(JSON Web Token, 디지털 자유이용권)라는 팔찌를 채워줍니다. 그냥 쉽게 토큰이라고도 부르는데요. 이 팔찌에는 내 이름, 등급, 유효기간이 암호화된 데이터 형태로 적혀 있어서, 이후에는 번거롭게 신분증을 다시 꺼낼 필요 없이 잠깐 쓰고 버리는 입장 팔찌라고 생각하면 됩니다.

3.
실제로 우리가 쇼핑몰 앱에서 '카카오로 로그인'을 클릭할 때의 흐름을 보면 더 명확합니다. 쇼핑몰 서버가 카카오 문지기에게 "이 사람 회원 맞나요?"라고 요청(Request)하면, 카카오 서버는 확인 후 도장이 찍힌 확인서(인가 코드)를 보내줍니다. 쇼핑몰 서버는 이 확인서를 보고 당사자가 맞다는 걸 확인한 뒤, 앱 전용 디지털 팔찌(JWT)를 발행해 주는 구조입니다.

4.
예를 들어 휴대폰에 저장되는 이 팔찌(토큰) 안에는 이런 데이터가 숨어 있습니다.
{"userId": "meatking", "name": "고기왕", "role": "VIP_MEMBER"} 같은 JSON 형태의 모양인데요. 마케터가 "VIP 회원에게만 무료 배송 쿠폰을 보여주세요"라고 요청하면, 개발자는 이 팔찌에 적힌 등급(role)이 VIP인지 확인하고 쿠폰을 넣어주는 로직을 만들게 됩니다. 문지기는 이걸 확인하고요.

5.
은행 웹에 로그인하면 '10분까지만 로그인이 유지'되는 문구가 뜨는데요. 이것이 '디지털 팔찌(토큰)'의 유효기간이라고 보셔도 될 것 같습니다. 10분이 지나면 무엇을 하고 있든 팔찌가 갑자기 끊어져 강제로 로그아웃되는 거죠. 은행 같은 금융 업무는 보안을 위해 팔찌를 자주 바꿔주는 것도 중요하겠지만, 일반 앱은 사용자 경험(UX)과의 균형을 맞추는 게 더 중요하고요.

6.
보안 아키텍처를 직접 설계하진 않더라도, 비개발자가 이런 원리를 알면 서비스 기획의 질이 달라지지 않을까요? 무조건 직접 로그인을 만드는 것보다 OAuth를 활용해 보안 리스크를 줄이는 선택도 있다는 걸 알 게 되니까요. 이미 많은 기업들이 하고 있고요. 궁금하시다면 지금 카카오톡 설정의 '연결된 서비스 관리'에 들어가 보세요. 내 정보를 안전하게 빌려 쓰고 있는 서비스 목록을 확인할 수 있습니다.

7.
보안은 저도 참 어렵다고 생각하는데요. 대칭키, 비대칭키, 해시 함수 같은 암호 같은 단어도 쏟아지고..2단계 인증(2FA)의 원리는 잠깐 검색만 해보았답니다. 그냥 보안은 사용자에게 신뢰를 주는, 하지만 보이지 않는 설계구나 정도만 기억해도 충분할 것 같습니다.

[세 줄 이해]
- OAuth는 남의 신용(구글/카카오)을 빌려 안전하게 신원을 확인하는 도구다.
- JWT는 로그인 상태를 유지해주는 디지털 자유이용권(토큰)이다.
- 보안을 이해하면 사용자 편의(UX)와 시스템 안정성을 동시에 잡는 기획이 가능하다.

이전 07화치킨 할인 이벤트가 배달앱을 다운시킬 수 있다