HulkCodeer의 기술 블로그

WKWebView 쿠키 허용 논문

April 12, 2019 | 3 Minute Read

나는 어느날 웹뷰 기반의 프로젝트를 하게 되었다.

내가 서버 개발자를 3년 이나 했는데 웹뷰 기반의 프로젝트 쯤이야…후후후 하면서 프로젝트를 하게 되었다.

그 프로젝트는 다이나믹 링크를 타고 들어온 행위, 이 행위는 여러가지가 있을 수 있지만 주로 결제 관련된 행위이다. 페이스북 챗봇에서 상품을 주문하고 챗봇에서 어떠한 URL을 하나 제공해주는데 그것이 다이나믹 링크이다.

쨋든 다이나믹 링크 관련된 코드를 짜도록 새로 들어온 부사수에게 해보라고 던져 주고 나는 잠시 다른 일을 하게 되었지만, 하루 정도 지나자 return “해주세요” 로 나에게 다시 돌아왔다…

그래 넌 신입이니깐..모를수도 있지 내가 해주마하고 “우다다다다다다” 하면서 다이나믹 링크 관련된 코드를 짜게 되었다.

신입 : 우왕 사수님 대단행!
나 : 뭘 이정도로…후후

그렇게 3일정도 지났을때였다.

신입 : 사수님 사수님!
나 : 네?
신입 : 제가 다이나믹링크로 타고 들어온 사용자에 대해서 PG사 결제 페이지로 이동해야 하는데…
나 : 네. 뭐 어려운게 있나요?
신입 : 자꾸 쿠키 허용하라고 떠욧!!!!!!
나 : (아…쿠키..머릿속에서 뒤적뒤적)…쿠키란 말이죠 어떠한 정보를 저장하는건데
모바일에서는 설정에서 쿠키 허용을 켜줘야 되요.
신입 : 아! 그렇군요! 근데 그거 켰는데요?
나 : (흠흠…뭐지….뭐가 문제지….) 일단 그럼 제가 한번 찾아볼께요.
신입 : 네!

퇴근 6시 30분이 되었다.

신입 : 전 이만 가보겠습니다.
나 : 네??웹뷰는?…
신입 : 3일동안 봤는데 지금 더 본다고 할 수 있을까요??
나 : 아…네…그렇죠(요즘 보기 드문 당돌한 신입이로군!)..

그렇게 나는 30분간의 멍을 때렸다. 그렇군 아주 현명한 판단이야…3일동안 봤는데 지금 더 본다고 달라지겠어?? 아니 그럼 3일 보고 안되면 평생 안되는건가!!!하면서 나는 구글링으로 WKWebView의 쿠키 허용 방법에 관해서 구글 링을 하게 되었다.

각종 자료를 구글링 해본 결과 PG사의 웹뷰는 쿠키를 바탕으로 동작하는 것으로 보인다. 쿠키가 있으면 쿠키 허용 하라는 창이 뜨지 않고, 쿠키가 없으면 쿠키 허용 하라는 메세지가 자꾸 뜬다.

WKWebView의 쿠키는 코드상으로 따로 생성해줘야 한다고 한다..ㅠㅠ(3시간 동안 찾음)

구글링 상에는 여러가지의 방법이 있었지만, 이 프로젝트는 굉장히 특수한 상황이였다. 일단 다이나믹 링크를 타고 들어온다는것!! 앱을 설치만 해두고 한번도 켜놓지 않은 상황에서 다이나믹 링크를 타고 들어오게 되면 아직 앱이 실행도 안된 시점이며, 쿠키 또한 앱과는 별개로 생성 되기 때문에 앱 실행시 쿠키 허용하는 코드를 넣어야 하며 AppDelegate에서 바로 쿠키를 생성해서 메모리에 적재시켜야 한다.

아래의 코드는 존경하는 서버 개발자님이 도와줘서 같이 만든 코드이다…사람은 겸손해야 한다.. PG사가 제공해주는 샘플 코드가 있지만, PG사는 아마 다이나믹 링크를 타고 들어와서 앱이 한번도 실행 된적이 없는 상태로 웹뷰를 호출 해보지 않았을 것이다.

HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always // 쿠키 항상 허용 설

 let ExpTime = TimeInterval(60 * 60 * 24 * 365)
 let cookieProps: [HTTPCookiePropertyKey : Any] = [
     HTTPCookiePropertyKey.domain: "pg.cnspay.co.kr",
     HTTPCookiePropertyKey.path: "/",
     HTTPCookiePropertyKey.name: "1",
     HTTPCookiePropertyKey.value: "2",
     HTTPCookiePropertyKey.secure: "TRUE",
     HTTPCookiePropertyKey.expires: NSDate(timeIntervalSinceNow: ExpTime)
 ]
 
 if let cookie = HTTPCookie(properties: cookieProps) {
     HTTPCookieStorage.shared.setCookie(cookie)
 }

쿠키에 대한 설정을 항상 허용으로 두며, PG사의 Domaing을 설정만 하고 나머지는 아무 데이터나 넣어두면 쿠키가 생성 되면서, PG사의 웹뷰는 더이상 쿠키 허용이라고 뜨지 않는다!!!!

결국 나는 부사수에게 잔소리를 하게 되었고, 부사수는 그때는 정말 집에 가고 싶었다고 한다….

그래 워라밸 중요하지!(나도 집에 가고 싶어ㅠㅠ 너때문에 밤 11시까지 야근했단말야 으아아앙)

부사수보다 나의 실력이 점점 느는것 같아 고민인 하루였다…