Self-hosted 로컬 CLI (커스텀인증구현)

Self-hosted 로컬 CLI (커스텀인증구현)
Photo by Rocio Ramirez / Unsplash

셀렉트 어드민 CLI에서는 데이터베이스 접근과 모든 화면은 로컬/내부에서 처리하면서, 동시에 간편한 도입과 설치를 위해 로그인(인증, 사용자, 권한) 부분만 클라우드를 통해 제공하고 있습니다.

일부 금융권등 보안성 요건에 따라 로그인(인증)부터 모든 사용자 계정정보의 보관, 감사로그도 완벽히 내부망에서 이루어져야 합니다.

이를 위해 셀렉트 어드민은 완전구축형(on premise)을 지원하여 해당 요건을 준수했습니다. 그러나 기본 구축비용이 연 수천만원 단위로 높고 설치 및 유지보수 비용이 발생하는 한계가 있었습니다.

2025년 셀렉트 어드민 CLI는 어드민, 운영툴 구축 편리함, 도입 기업의 보안 준수를 모두 충족하기 위해 기존 엔터프라이즈 플랜에서도 '완전구축형' 기능을 제공합니다. (25년 2월 기준) 추가비용 없이 모든 인증과 로그를 구축 가능하며 모든 공통 소스코드는 내부 검증 가능한 형태로 제공합니다.

커스텀 제공 가능한 범위

  • 세션 발급, 만료, 유지정책
  • 구글 로그인
  • Email, Password 로그인
  • 권한 관리
  • 사용자 디렉토리
  • 사용자 활동로그/감사로그

설치

기존의 CLI와 동일합니다.

npm install selectfromuser

설치된 버전을 확인합니다. 2.4 이상의 버전이 필요합니다.

slt v

ADMIN_ON_PREMISE 환경변수 켜기

ADMIN_ON_PREMISE=1
GOOGLE_CLIENT_ID=*******-**********.apps.googleusercontent.com
GOOGLE_REDIRECT_URI=http://localhost:9300/api/connect/google/callback
GOOGLE_CLIENT_SECRET=GO****-**********************

.env에 입력한 모습 (다른방법으로 추가해도 됩니다)

프로젝트 팀 설정에서 next 옵션 켜기

문의바랍니다.

실행

어드민을 실행하여 인증 관련 부분이 더이상 api.selectfromuser.com가 아닌 자체 endpoint를 바라보는 것을 확인합니다.

slt

인증코드 추가

해당 폴더에 코드를 직접 추가 가능합니다.

_auth

  • refreshSession.js
    • 필수 (세션 검증시 이용)
  • getRoles.js
    • 필수 (권한 검증시 이용)
  • requestOTP.js
  • requestPasswordReset.js
  • submitOTP.js
  • submitPassword.js
  • connectGoogle.js
  • connectGoogleCallback.js
  • connectGoogleDevice.js

예제 코드: https://github.com/eces/select/tree/main/tests/next/_auth

기본 로그인(구글인증)을 위해서는 connectGoogle, connectGoogleCallback, connectGoogleDevice, refreshSession, getRoles만 추가하면 됩니다.

기본 예제에서는 리소스에 있는 데이터베이스 mysql.sample 에서 AdminUser 테이블에 계정을 관리합니다. 필요시 다른 데이터베이스(vercel, supabase, neon)를 이용 가능합니다. (예제가 필요한 경우 문의바랍니다. 레디스 예제)

CREATE TABLE `AdminUser` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(500) DEFAULT NULL,
  `name` varchar(500) DEFAULT NULL,
  `role` json DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `last_seen_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `revoked_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `AdminUser` (`email`, `name`, `role`, `created_at`, `last_seen_at`, `updated_at`, `revoked_at`)
VALUES
	('jhlee@selectfromuser.com', 'jhlee', '[\"view\", \"Manager\"]', '2025-02-06 00:43:47', NULL, NULL, NULL);

로그 코드 추가

해당 폴더에 코드를 직접 추가 가능합니다.

_log

  • activityAudit.js

UI 호스팅

셀렉트에서 관리하는 UI가 아닌 버전 고정된 UI를 띄우고 싶은경우 다음으로 가능합니다.

slt ui

PORT=5173 slt ui

자주묻는 질문

셀렉트 클라우드에 전송되는 범위가 어떻게 될까요?

최초 어드민 접속시 프로젝트 정보 가져오기만 호출합니다.
/api/team/auth-methods?cname=589000c4525c-local.selectfromuser.com
해당 호출로 API Endpoint를 가져오고 이후 모두 로컬/내부망 endpoint로 전환합니다. (api.selectfromuser.com 에 대한 방화벽 허용이 필요)

💡
고객지원 문의시 콘솔로그, 에러메시지와 YAML을 첨부해주세요. 셀렉트 팀에서는 어드민 사용자 계정정보, 구성 리소스, 화면에 대해 접근할 수 없습니다.
어드민 사용자 정보가 외부에 전송되나요?

아니오. _auth 코드에서만 처리합니다. 다만 (개발자) CLI 로그인시 계정정보는 클라우드를 통해 처리됩니다. 어드민 사용자에 대한 트래킹은 하지않고 있으며 과금단위에도 포함하지 않습니다. (서비스 안정성을 위한 UI bug reporting은 존재, 방화벽 차단 가능)

Okta, Onelogin, LDAP등 연동 가능한가요?

네 가능합니다. 샘플 코드를 제공합니다.

Read more

우리도 이렇게 시작했어요 – 실사용 영상 보러가기

우리도 이렇게 시작했어요 – 실사용 영상 보러가기

안녕하세요. 셀렉트 어드민 사용 동영상을 공유합니다. Listing 데이터 조회 페이지를 만드는 모습입니다. Data Entry 데이터 수정 페이지를 만드는 모습입니다. API Integration 해외 API를 호출하여 모달(팝업)창을 띄우는 모습입니다. Visualize 데이터베이스 쿼리(SQL)로 바로 차트, 대시보드를 구성합니다. 셀렉트 어드민 로그인 후 템플릿에서 예제 코드를 확인 가능합니다. 감사합니다.

By 셀렉트 팀
셀렉트 클라우드의 새로운 데이터베이스 연결 방법 (Secure Tunnel)

셀렉트 클라우드의 새로운 데이터베이스 연결 방법 (Secure Tunnel)

안녕하세요 셀렉트팀 이진혁입니다. 셀렉트 어드민은 기존 데이터베이스를 연결하여 쉽게 조회, 수정등 페이지를 만들고 계정 초대로 팀원에게 쉽게 공유가능한 서비스입니다. 기존에는 이러한 어드민 개선과 데이터 업무를 위해 개발자, 개발팀 단위로 시간과 노력이 필요했지만 셀렉트 어드민은 SQL, API, DB, UI등 복잡한 단계를 통합하여 누구나 빠르게 데이터를 다루고, 협업이 가능한 환경을 추구해왔습니다. 셀렉트

By LEE JINHYUK