모바일 앱에서 급여 명세서를 조회하는 기능을 개발할 때, 푸시 알림에서 바로 해당 월 급여로 이동하는 딥링크가 필요했다. URL에 파라미터를 담을 때 URL 인코더의 원리를 알아야 제대로 동작한다.
딥링크 구조
급여 상세 페이지로 이동하는 딥링크 예시다.
mycompany://salary?year=2026&month=02&employeeId=EMP001
웹 URL로는 이렇게 된다.
https://hr.mycompany.com/salary?year=2026&month=02
clickfor.kr/url-encoder에서 URL 인코딩 테스트를 해볼 수 있다.
인코딩이 필요한 이유
URL에는 사용할 수 없는 문자가 있다. 공백, 한글, 특수문자 등은 퍼센트 인코딩해야 한다. 예를 들어 공백은 %20, 한글 홍길동은 %ED%99%8D%EA%B8%B8%EB%8F%99이 된다.
const encodedName = encodeURIComponent("홍길동"); // %ED%99%8D%EA%B8%B8%EB%8F%99
서명된 URL
급여 정보는 민감하니 아무나 접근하면 안 된다. URL에 서명을 추가해서 위변조를 방지한다.
const payload = "year=2026&month=02&employeeId=EMP001"; const signature = hmac(payload, secretKey); const signedUrl = baseUrl + "?" + payload + "&sig=" + signature;
서버에서 시그니처를 검증해서 유효한 요청인지 확인한다. URL 인코딩과 서명을 함께 사용한다.
만료 시간
딥링크에 만료 시간을 포함시키면 보안이 강화된다. 푸시 알림의 링크를 나중에 공유해도 만료되어 접근이 안 된다.
?year=2026&month=02&exp=1709251200&sig=xxx
앱 미설치 처리
딥링크를 클릭했는데 앱이 없으면 앱스토어로 유도하거나 웹 버전으로 대체한다. 유니버설 링크(iOS)나 앱 링크(Android)를 사용하면 이걸 자동 처리할 수 있다.
추적 파라미터
마케팅 분석을 위해 UTM 파라미터를 추가하기도 한다. 푸시에서 왔는지, 이메일에서 왔는지 추적한다.
?year=2026&month=02&utm_source=push&utm_medium=mobile
결론
딥링크는 사용자 경험과 보안 모두 신경 써야 한다. URL 인코딩 테스트가 필요할 때 온라인 URL 인코더를 활용하자.