다른 사람이 짠 OAuth 코드를 프로젝트에 맞게 이식하기
포스트
취소

다른 사람이 짠 OAuth 코드를 프로젝트에 맞게 이식하기

개요

글의 접근성을 높이기 위해 엄청나게 쉽고, 간단하게 작성하였음을 먼저 밝힙니다. 사실, 다른 사람이 짠 코드를 (아무런 문서가 없는) 자신에게 맞게끔 수정하고, 적용하는것은 많이 어렵고 까다롭습니다. 이 점을 먼저 확인하고, 다음의 글을 읽어나가면 도움이 될 것 같습니다.

프로그램을 개발하기 위해 가장 먼저 개발이 되는 것은 가히 로그인이라 말할 수 있습니다. 로그인과 회원가입은 매 프로젝트 마다 개발이 되어져야하는, 매우 번거롭고 귀찮으며, 최근 트렌드에 맞추는 것은 상당한 귀찮음이 따라오게 됩니다. 이에, 보통은 다른 사람들이 사전에 개발한 프로그램이나 오픈소스로 구현된 것을 들고와서 개발합니다. 하지만, 오픈소스로 구현된 것을 활용하게 된다면 라이센스로 인한 코드 공개 의무가 발생하거나, 유료 정책으로 인해 더 번거로워지거나 심각한 의존성이 발생할 수 있습니다. 그래서 직접 구현하거나, 직접 개발한 내용을 다시 활용하기도 합니다.

본 글에서는 필자가 OAuth2.0 을 통한 로그인 프로그램 개발 할 때 어떻게 구현하였는지 설명하는 것이 핵심 내용입니다. 필자의 경우에는 OAuth2.0을 통한 로그인이 분명히 어딘가에 구현이 되어 있을거라 생각하였고, 오픈소스 프로젝트를 활용하여 로그인 서비스를 제공하였지만, 라이센스 문제와 기능 특정(Naver OAuth)가 누락되어 있어 직접 구현하게 되었습니다.

개발 흐름

먼저, OAuth2.0 로그인 서비스를 위해 사용된 오픈소스는 Supabase(Github) 입니다. 다만, SupabaseKubernetes가 아닌 docker-compose 형태로 제공이 되고있다 보니, kubernetes를 위한 yaml 파일을 작성하여 테스트를 진행하게 되었습니다. 이때, OAuth2.0을 제공되고 있던 목록들이 많았지만, 원하던 Naver가 없었기도 했지만, Self Hosting에서는 OAuth를 통한 Authentication이 지원하지 않았다는 점입니다.

그래서 직접 구현하는것이 더 옳바르다고 생각하게 되었고, Supabase에서 제공하는 기능들이나, OAuth2.0를 구현한 오픈 소스를 가져와서 커스텀하는 것이 더 빠를것이라 판단하였습니다.

실제로, Supabase에서 사용하는 OAuth관련 라이브러리/프로그램은 MIT 라이센스로, gotrue 오픈소스 였다는 점이였습니다. gotrueGo언어로 작성된 Supabase를 위한 OAuth 프로그램이였기에, 간단하게 코드를 수정한다면? Supabase에서 만든 OAuth 기능을 온전히 사용할 수 있지 않을까? 라는 생각하게 되었습니다.

당연하게도, 처음에는 gotrue를 바로 사용하는것이 가능했다면 쉬웠겠지만, gotruesupabase를 타겟으로 만들어졌다 보니, 불필요한 코드와 함께 강한 커플링이 되어져 있었기에, gotrue를 온전히 사용하기 어렵다고 판단하였습니다. gotrue의 코드를 분석하여 새롭게 나의 솔루션에 맞는, 커스텀화가 되어져 있는 프로그램을 개발하게 되었습니다.

실제 개발

안타깝게도, gotrue에는 문서화가 전혀 되어있지 않았습니다. 필자의 특기인 다른사람의 코드를 분석 및 수정하기가 많은 도움이 되었습니다. 먼저, Oauth가 구현되어져있는 facebook, gitlab, kakako는 프로젝트 어딘가에 파일명이나, 함수 명으로 존재할 것이기 때문에 검색하여 찾는 것을 우선시 하였습니다. code 그래서, 아하! 해당 코드만 복사해서 오류가 나지 않게 수정한다면 완벽하겠군! 이라 판단하여, 해당 폴더에 있는 모든 내용을 복사한 다음, 빌드 오류가 나지 않도록 적절히 수정을 해주었습니다.

결과적으로는 gotrue에서 구현되어져 있던 모든 OAuth 코드를 가져와서 실행할 수 있었고, NaverOAuth도 적절하게 추가할 수가 있었습니다.

다행이도, 대부분 프로그램들이 CLI 환경에서 동작하는 프로그램의 라이센스는 자유롭게 하되, GUI와 관련된 프로그램은 유료 라이센스 정책으로 하는 덕분에 충분히 가능했었습니다.

개발 시간

대부분의 OAuth를 들고와서 Client KeySecret Key, Redirect URI만 기입한다면 모두 동작하도록 만들 수 있었습니다. 또한, 이전에 개발이 되어져 있떤 gotrue를 들고와서 필자의 프로젝트에 맞게 개발까지는 만 4시간 걸렸을 때, 1개의 Oauth 로그인이 되는저 PoC를 진행하였고, 만 6시간 정도 지났을 때, 모두 동작하는 것을 확인하였습니다. 그 정도로 엄청나게 짧은 시간 내에 개발 할수 있을 정도로, 개발 시간을 단축이 가능했습니다.

첨언

직접 모든것을 개발하거나, 이미 만들어져 있는 오픈소스를 들고와서 사용하는 것이 아니라, 원하는 기능만 들고와서 사용하는 것은 어떨까요?

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

PyGuard 파이썬의 보안 취약점 검사 논문 읽기

On-Premise 환경에서 Harbor와 ArgoCD 연동하기