소셜 로그인 구현 (카카오, 네이버, 애플)
윈도우 설정을 통하지 않아도 암호를 변경하거나 제거할 수 있는 방법이 있습니다. 또한 로그인 암호를 잊어버려 컴퓨터에 로그인이 불가능한 상태에서도 쓸 수 있어 암호를 잊어버렸을 때 유용한 툴을 소개해드리겠습니다. 바로 패스팹의 PassFab 4WinKey입니다. 이 프로그램을 사용하면 로그인 암호를 잊어버려도 쉽게 암호를 제거할 수 있습니다. 로그인 암호를 없앤 후에도 로그인 버튼을 클릭해야 다음으로 넘어가는 것은 여전합니다. 로그인 버튼을 클릭하지 않고 자동으로 로그인되게 설정하려면 다음 가이드를 따라 해주시면 됩니다.
DB 접근 기술 JdbcTemplate
현재 프로젝트는 JdbcTemplate을 이용해서 리포지토리를 구성했다. 추후 MyBatis, JPA 기술로 변경할 가능성을 염두해 MemberRepository 인터페이스를 상속받게 하도록 만들었다. 실제로 MemberService에도 JdbcTemplateMemberRepository가 아닌 MemberRepository 인터페이스에 의존하는 모습을 볼 수 있어요.
4 초기화 코드 및 Open URL설정
먼저 KakaoSDK 초기화 코드 추가가 필요합니다. AppDelegate.swift에서 아래의 코드를 추가합니다. 주석에 표시한 것 처럼 네이티브 앱 키를 확인하여 넣어주세요 Swift code RxSwift code Swift Code RxSwift Code iOS 13.0 이후부터 앱의 생명주기 관리는 AppDelegate가, UI의 생명주기는 SceneDelegate에서 관리하도록 변경되었습니다.
따라서 배포 타겟이 13.0 이상인 프로젝트라면 UISceneDelegate.swift가 기본으로 실행되도록 설정되기 때문에 SceneDelegate.swift에 아래의 코드도 같이 입력합니다.
1 애플리케이션 추가
먼저 에서 로그인 연동에 사용할 애플리케이션을 아래와 같이 추가합니다. 추가된 앱을 선택하면 설정 화면이 나오게 됩니다. 카카오 로그인에서 활성화 설정을 ON으로 바꿔주세요. OIDCOpneID Connect를 사용하려면 이 옵션 또한 활성화 시켜야 합니다. 카카오 로그인 시 얻어올 사용자의 정보에 대한 동의 항목도 아래와 같이 설정해 주세요 이렇게 설정한 항목들은 아래와 같이 로그인 요청시 동의 청구 항목으로 나타납니다.
JWT 로그인 기능
나는 Redis와 JWT를 이용하여 JWT 로그인을 구현하고자 했다. redis에 세션을 저장하는 것까지는 좋지만, 여러 서버로 분산 전해지는 요청이 redis에 집중되므로 부하가 올 수 있어요. 반면 JWT를 이용하는 방식은 access token 검증 시 redis에 접근하지 않으므로 redis에 대한 부하를 줄일 수 있어요. 두 가지 방법 중 무엇이 더 좋은지에 대한 답은 없다고 생각합니다. 현재 프로젝트에서는 redis에 대한 부하를 세션 방식에 비해 더 줄일 수 있고, 장기적으로 확장성이 높은 JWT를 선택했다.
인증 로직에는 2개의 토큰이 사용됩니다. 로그인 인가 로직은 다음과 같다.
유저 로그인 access token은 만료 시간과 함께 json으로, refresh token은 쿠키로 전달합니다. 유저 요청 Authentication Bearer 헤더에 유효한 토큰을 담아 사용자가 요청을 보낸다. 토큰 검증 AuthGuard에서 토큰의 유효성을 검증합니다.
토큰이 유효함 이용자 정보를 request 객체에 저장하고, 요청을 수행합니다. 토큰이 유효하지 않음 401 상태코드와 함께 요청을 거절합니다.
토큰 갱신 GET authrefresh 요청을 보내면 refresh token이 서버로 전달됩니다. refresh token의 유효성을 검증하고, 유저 정보를 access token으로 만든 후 반환합니다.
Next.js에서 Firebase로 요청 보내기
Firebase의 회원가입에는 firebase/auth의 createUserWithEmailAndPassword 메서드를 이용합니다. 우선은 임시로 테스트 데이터를 넣어서 Firebase에 요청이 가는지만 확인해봅니다. Firebase와의 통신은 문제 없이 이루어졌습니다. 이제 테스트 데이터 대신 카카오 API에서 받은 값을 넘겨주면 되겠네요. 카카오 API의 응답을 받을 페이지에서 데이터를 가공하여 넘겨봅시다.
그 뒤, 구성한 파라미터 정보를 httpskapi.kakao.comv2userme에 함께 넘겨 필요한 데이터를 받아옵니다. 여기서는 kapiParams의 propertykey에 구성했던 유저의 이메일 정보가 되겠습니다. 주의유저의 정보를 받아오려면 해당 정보에 대한 유저의 동의가 필요합니다. 카카오 개발자 페이지에서 비즈 앱 등록을 마치면 동의를 받을 수 있습니다.
자주 묻는 질문
DB 접근 기술
현재 프로젝트는 JdbcTemplate을 이용해서 리포지토리를 구성했다. 구체적인 내용은 본문을 참고 해주시기 바랍니다.
4 초기화 코드 및 Open
먼저 KakaoSDK 초기화 코드 추가가 필요합니다. 궁금한 사항은 본문을 참고하시기 바랍니다.
1 애플리케이션 추가
먼저 에서 로그인 연동에 사용할 애플리케이션을 아래와 같이 추가합니다. 구체적인 내용은 본문을 참고하시기 바랍니다.