유틸리티

URL 인코딩과 급여 시스템 딥링크 설계

모바일 앱에서 급여 명세서를 조회하는 기능을 개발할 때, 푸시 알림에서 바로 해당 월 급여로 이동하는 딥링크가 필요했다. 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 인코더를 활용하자.