지금까지는 카카오 소셜로그인과 구글소셜로그인에 대해서 학습해보았습니다.
>> 카카오 소셜로그인
>> 구글 소셜로그인
이번 포스팅에서는 네이버소셜로그인을 다뤄보도록 하겠습니다. 네이버 소셜로그인은 타 소셜로그인에 비해 까다로운 부분이 많습니다. 그렇게 말하는 이유는 API를 사용하기 전, 애플리케이션 로고와 사용자 정보 활용처를 캡쳐한 사진을 첨부해 검수요청을 보내야 하기 때문입니다. 검수 기준이 다소 까다롭고, 바로 사용할 수 없다는 점이 매우 큰 단점입니다.
따라서, 소셜 로그인을 빠른 시일 내에 구현해야 하는 경우, 네이버 소셜 로그인 외에 카카오, 구글 등 다른 소셜 로그인 방법을 선택하시기를 권장드립니다.
① 아래의 링크에 접속한다.
>> 네이버 로그인 Open API
② 오픈 API 이용 신청 버튼을 클릭한다.
③ 이용약관에 동의해준다.
④ 본인인증을 진행한다. 회사 이름은 입력하지 않아도 된다.
⑤ 애플리케이션 이름을 설정해주고 네이버 로그인을 선택한다. 필요한 정보를 선택해주면 된다.
⑥ 네이버 API를 사용할 서비스 환경을 선택한다. 그리고 Redirect URL도 설정해주면 된다.
⑦ Client ID와 Client Secret 값을 저장해두자.
⑧ 상단 메뉴에서 Application > 내 애플리케이션을 클릭하면 아래와 같은 화면이 나온다. 연필 버튼을 클릭해주자.
⑨ API 설정 탭에서 로고 이미지를 설정할 수 있다. 검수 요청을 위해 필수적으로 등록해야 한다. 아래의 수정버튼을 눌러 변경사항이 적용해주자.
⑩ 스크롤을 아래로 내려 검수요청 하러 가기 버튼을 클릭한다.
⑪ 검수 요청 가이드 확인에 체크해주고, 제공 정보(이메일주소와 닉네임)가 사용되는 화면을 첨부해서 보여주어야 한다.
⑫ 네이버 로그인을 통한 신규 회원 가입에 적용을 체크해주고, 네이버 로그인 이용 절차를 확인할 수 있는 캡쳐 파일을 첨부한다. 추가 제출 서류 확인에는 없음을 체크한다.
⑬ 하단에 검수요청 버튼을 누르면 서비스 요청이 완료된다. 검수에는 3~4일이 소요될 수 있다고 하는데, 일반적으로 하루 정도면 처리가 되는 것 같다.
네이버의 검수가 별로 엄격하지 않기 때문에 겁먹을 필요가 없다는 글을 본 적이 있다. 하지만, 검수 승인 절차는 생각보다 까다롭다.
위와 같이 애플리케이션 로고와, 로그인 인증 Flow, 사용자 정보 활용처에 대한 캡쳐 사진을 제출했음에도 불구하고, 2번이나 승인을 거부당했다.
첫 번째 거부의 이유는 "애플리케이션에 대한 설명 부족"이었다. 아무래도 실제 런칭한 애플리케이션이 아니다보니, 네이버 측에서 애플리케이션을 확인할 방법은 없었고, 첨부한 사진에는 애플리케이션의 기능이 나타나지 않기 때문에 승인을 거부한 것이다. 이에 애플리케이션에 대한 소개와 관련 사진을 첨부한 소명자료를 제출하였다.
하지만, 이번에도 승인이 거부되었다. 이번 거부 사유는 "부적절한 방식으로 서비스를 이용하는 유저에 대한 제재가 없다"는 것이었다. 실제 서비스에서는 유저에 대한 제재를 구현했는데, 이를 소명자료에는 포함시키지 않았었다. 네이버에서는 사용자의 피해가 우려되는 부분을 어떻게 해결할 것인지도 검수 승인에 중요한 기준으로 두고 있다.
결국 유저에 대한 제재 정책과 신고 관련 이미지를 첨부하였고, 거기에 더해 애플리케이션에서 제공할 상세 기능 사진까지 전부 첨부하여 결국 승인을 받았다.
네이버 소셜로그인을 권장하지 않는 이유가 바로 이것 때문이다. 생각보다 준비해야 할게 많다. 만약, 디자인이 완성되지 않은 상태라면, 검수 요청조차 하지 못한다. 그래도 네이버 로그인 API가 꼭 필요한 상황이라면, 위에서 설명한 기준을 참고하여 한번에 통과할 수 있기를 바란다.
이제 네이버 API를 통해 사용자의 정보를 가져와보자. 참고로 검수를 통과하지 않은 상태에서, 서비스에 API를 적용하는 것은 불가능하지만, API를 테스트해보는 것은 가능하다. 대신, 관리자의 ID(본인 ID), 또는 멤버 관리에 등록된 아이디에 대해서만 소셜로그인 기능을 테스트해볼 수 있다. 멤버 관리에 아이디를 등록하고 싶다면, 멤버관리 탭에서 진행할 수 있다.
① postman에 접속한다.
② Authoriaztion에 들어간다.
③ 토큰의 설정 정보를 지정한다.
④ Client Authentication을 Send client credentials in body로 설정하고 Get New Access Token 버튼을 클릭한다.
⑤ 네이버 로그인을 진행하고 정보 제공에 동의하면 아래와 같이 토큰을 발급받을 수 있다. Use Token버튼을 클릭해주자.
이제 send 버튼을 클릭하면, 아래와 같이 유저의 정보를 조회할 수 있다.
닉네임과 이메일이 잘 받아와진다는 것을 확인할 수 있다.
이제 이 정보를 바탕으로 유저를 가입시키는 코드만 작성해주면 될 것이다. 코드 작성 자체는 카카오 소셜로그인 구현 코드와 유사하기 때문에 간단하게만 설명하고 넘어가겠다.
Controller에서는 액세스토큰을 쿼리 파라미터로 받아 naverService의 메서드로 넘겨주기만 하면 된다.
서비스는 조금 복잡한데, 유저를 생성하는 데 필요한 정보를 네이버 API에서 받아와서 유저 생성 메서드에 입력인자로 전달만 해주면 된다. 참고로 유저의 이메일과 닉네임을 가져오는 메서드는 아래와 같이 정의되어 있다.
이건 프로젝트에서 사용한 코드이다보니, 유저 생성에 house를 등록해야하는 등 조금 특이한 부분이 있는데, 본인의 애플리케이션의 요구사항에 맞추어 적절히 변경해주면 된다. 네이버 로그인 API와는 무관하지만, 한가지 재밌는 로직에 대해 소개해보도록 하겠다.
현재 닉네임의 중복을 불허하는 서비스로 운영하고 있는데, 소셜로그인에서 닉네임을 가져올 경우, 닉네임이 중복될 수 있다. 하지만, 닉네임이 중복된다는 이유로 예외를 호출해버리면, 소셜로그인 유저가 회원가입을 진행하는 데에 난항을 겪게 될 것이다. 그래서 위 코드에서는 닉네임 중복이 발생할 경우 auto increment 값을 suffix로 붙여 닉네임의 유일성을 보장하고 있다.
시험 삼아 일반회원 가입으로 "현섭"이라는 닉네임의 유저를 생성해보자.
이제 네이버 소셜로그인을 시도해보자. 네이버로 소셜로그인으로 가져오는 닉네임은 "현섭"이다.
닉네임의 중복이 발생하기 때문에 네이버로 로그인 한 "현섭"이라는 유저의 닉네임은 "현섭1"로 변경된다.