OpenSparrow v4.1, 이메일 기반 선택적 2단계 인증 추가 및 Ask AI 스트리밍 응답 기능 제공
요약
OpenSparrow v4.1 버전이 업데이트되어 이메일을 통한 선택적 2단계 인증 기능을 추가하고, Ask AI 답변을 토큰 단위로 스트리밍하며, External API가 PostgreSQL 뷰를 바인딩할 수 있게 되었습니다. 또한 전반적인 보안 강화와 사용자 경험 개선이 이루어졌습니다.
핵심 포인트
- 선택적 이메일 기반 2단계 인증 도입으로 계정 보안 강화
- Ask AI 답변을 스트리밍하여 실시간 분석 결과를 제공
- External API가 PostgreSQL 뷰를 지원, 통합 데이터 소비 방식 개선
OpenSparrow v4.1이 이메일을 통한 선택적 2단계 로그인 기능을 추가하고, Ask AI에서 답변을 스트리밍하며, External API에 PostgreSQL 뷰를 제공합니다 — 또한 쓰기 경로 전반에 걸쳐 보안 강화 패스를 거쳤습니다.
두 단계 인증 (Two-factor login), 기본적으로 비활성화됨
**시스템 → 설정(Settings) → 로그인 보안(Login Security)**에 토글이 추가되었습니다. 올바른 비밀번호를 입력한 후, 연락처 이메일이 있는 계정은 받은 편지함으로 전송된 6자리 코드를 입력해야 합니다. 이는 은행 앱에서 사용하는 패턴이며, 이제 자체 호스팅 인스턴스에 내장되었습니다.
- 계정별 선택적 활성화(Opt-in, per account) — 기본적으로 비활성화되어 있습니다. 이메일이 없는 계정은 비밀번호만으로 로그인할 수 있어 배포 과정에서 누구도 잠기지 않습니다.
- 남용 방지 기능(Abuse-resistant) — 코드는 60초 후에 만료되며, 5회 시도를 허용하고, 전송은 IP 및 사용자 이름별로 제한됩니다. 또한 전달 실패 시 요소를 건너뛰는 대신 폐쇄적으로 처리합니다(fails closed).
- 새로운 인프라 없음(No new infrastructure) — 기존의 cron/SMTP 이메일 설정과 v3.3의 연락처 필드를 재사용하므로 마이그레이션이 필요 없습니다.
Ask AI가 답변을 스트리밍합니다
응답이 마지막에 한 덩어리로 오는 대신 토큰 단위로 도착합니다. 따라서 긴 분석 내용도 모델이 여전히 작성 중일 때 즉시 나타나기 시작합니다.
- 클릭 가능한 레코드 링크(Clickable record links) — 답변은 행을 참조하여 해당 레코드로 바로 연결되는 링크를 제공합니다.
- 레코드의 답변(The answer of record) — 스트리밍된 텍스트는 미리보기입니다. 최종 페이로드에는 마크다운, 링크 및 후속 제안과 함께 정리된 버전이 담깁니다.
- 작동하는 비활성화 스위치(A working off switch) — 관리자의 Ask AI 활성화 플래그가 마침내 API를 게이트키핑하고(403), 메뉴 버튼과 FAB을 숨길 수 있게 되었습니다.
External API가 이제 PostgreSQL 뷰를 제공합니다
시스템 → API에서 등록된 원시 테이블 대신, 집계가 포함된 PostgreSQL 뷰를 바인딩할 수 있습니다. 이는 통합(integrations)이 일반적으로 데이터를 소비하려는 방식입니다.
- 컬럼과 필터는 저장 및 요청 시마다 실시간 데이터베이스를 대상으로 재확인됩니다. 변경된 뷰는
500대신 깨끗한404응답을 반환합니다. - 뷰는 첫 번째 선택된 컬럼(보장되지 않는
id)으로 정렬되며, 테이블은id DESC를 유지합니다. - 수정됨: 새로 생성된 API 키는 재저장 시마다 재생성되는 대신 저장 시 적용됩니다.
이번 릴리스에서 추가된 기능
- CSV 가져오기(import)가 적절한 서비스 계층으로 이동했습니다. 크론 출력은 일반 텍스트입니다.
- 버전 정보가 로그인 페이지에서 푸터로 이동했습니다.
- 새 레코드는 첫 번째 탭에서 열립니다.
다음 시리즈는?
OpenSparrow v4.0에서는 JSONB 컬럼 유형, 공개 읽기 전용 테이블 공유, 그리드에서 다대다 편집 기능을 추가했습니다
웹사이트
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기