• release

Logto 제품 업데이트

Logto v1.40.0에서는 감사 로그를 위한 시간 범위 선택기, 더욱 풍부해진 조직 멤버십 웹훅 페이로드, 대규모 조직에 대한 성능 향상, 그리고 몇 가지 자체 호스팅 환경에서의 품질 개선을 제공합니다.

Yijun
Yijun
Developer

사용자 인증에 몇 주를 낭비하지 마세요
Logto로 더 빠르게 안전한 앱을 출시하세요. 몇 분 만에 사용자 인증을 통합하고 핵심 제품에 집중하세요.
시작하기
Product screenshot

Logto v1.40.0은 플랫폼 강화 릴리스입니다. 이제 감사 로그를 대규모로 실용적으로 사용할 수 있고, 조직 멤버십 웹훅에서 어떤 변경이 발생했는지 정확하게 알 수 있으며, 대규모 테넌트에서 조직 쿼리 속도가 대폭 향상되었고, 자체 호스팅 배포에서 오랜 불편함 두 가지를 해소했습니다. 새로운 커넥터 3종도 추가되었습니다. 새로운 기능을 소개합니다.

실제로 범위를 지정할 수 있는 감사 로그

감사 로그는 무언가 일이 발생했을 때 가장 유용합니다. 하지만 지금까지 Console은 제한 없는 범위의 로그를 가져왔기에 로그량이 매우 많은 테넌트에서는 느려졌습니다.

이번 릴리스에서는 감사 로그 페이지에 시간 범위 선택기가 추가되었으며, 기본값은 최근 7일입니다. (최근 1시간, 최근 24시간, 최근 7일, 최근 30일)의 프리셋과 커스텀 날짜 범위를 선택할 수 있으며, 이전 로그도 범위만 확장하면 쉽게 확인할 수 있습니다(#8810).

내부적으로 Management API는 GET /api/logsGET /api/hooks/{id}/recent-logsstart_timeend_time 쿼리 파라미터(unix 밀리초, exclusive bounds)를 추가하여, 프로그래밍적으로도 로그 쿼리 범위를 지정할 수 있게 되었습니다(#8806). 대규모 테넌트의 경우, 새로운 enableCap=true 파라미터를 사용하면 쿼리를 약 10,000행에서 단축하고 Total-Number-Is-Capped: true 헤더를 반환하여 정확한 총계 대신 과부하 없는 응답을 제공합니다. (이 때 Console은 Prev/Next 형태로 조회합니다. #8796, #8802). 파라미터 없이 기본 동작은 변경되지 않습니다.

조직 멤버십 웹훅에서 이제 무엇이 변경됐는지 알 수 있습니다

Organization.Membership.Updated 웹훅은 그동안 멤버십이 변경됐다는 정보만 제공했을 뿐, 무엇이 변경됐는지는 알리지 않았습니다. 이제는 명시적으로 addedUserIds / removedUserIds, addedApplicationIds / removedApplicationIds 등 변화된 항목이 페이로드에 포함됩니다. 초대 수락 및 JIT 프로비저닝(이메일 도메인·엔터프라이즈 SSO JIT)에서는 addedUserIds 필드가 추가됩니다(#8840).

이 업데이트는 이전과 호환성을 유지하며 완전히 추가적입니다. 빈 변화값은 생략되고, 각 배열은 대용량 작업 시 5,000개로 제한됩니다(초과 시 GET /organizations/:id/users 또는 .../applications로 동기화하세요). 전체 규약은 웹훅 문서를 참고하시기 바랍니다. 이 변경은 이전 커뮤니티 제안을 대체합니다 — @chiche84에 감사드립니다(#8752).

세션 코드 개선 중, GET /api/my-account/sessions 응답에도 각 세션마다 isCurrent 플래그가 추가되어, 세션 관리 UI에서 "이 기기" 행을 구분 표시 및 현재 세션을 실수로 만료시키지 않게 되었습니다(#8731).

성장해도 빠른 조직

아래 변경사항들은 대규모 조직을 가진 테넌트에 초점을 맞추고 있습니다:

  • GET /organizations/:id/users는 이제 LATERAL 서브쿼리를 사용해, LIMIT으로 유저 집합을 먼저 추린 뒤 역할을 조회하기 때문에 각 페이지네이션마다 전체 members × roles 조인이 필요하지 않습니다(#8826).
  • 두 개의 새로운 보조 인덱스가 역방향 조회 속도를 높입니다: organization_user_relations (tenant_id, user_id)는 모든 로그인 및 멤버십 미들웨어에서 사용되고(#8818), organization_role_user_relations (tenant_id, organization_id, user_id)getUserScopes 및 사용자별 역할 조인에 활용됩니다(#8819).
  • PUT /organizations/:id/users 엔드포인트는 변경된 행만 쓰는 델타 기반 쿼리로 교체되어, 호출 시마다 전체 멤버십 행을 재작성하지 않고 실제 변경된 행만 반영하며, 변경되지 않은 멤버의 역할도 유지합니다(#8820).

계정 센터 및 로그인 개선사항

  • 로그인→가입 시 약관 동의. 약관 정책이 "가입 시 체크박스 동의만 요구"로 설정되어 있을 때, 등록되지 않은 이메일·전화번호로 로그인 후 "새 계정 만들기"를 선택하는 경우에도 약관 동의를 반드시 진행하게 되어, 별도 회원가입·소셜/SSO 플로우와 일치합니다(#8835).
  • 최초 비밀번호 설정. 이메일, 전화번호, 비밀번호가 없는 사용자도 인증 기록 없이 Account API로 최초 비밀번호를 설정할 수 있습니다(#8746).
  • 조용한 재인증. 사용자 정보 오류(예: 동일 브라우저에서 사용자 전환 후 만료 토큰 등) 시에는 로그인 화면으로 이동하지 않고 prompt=none을 적용해 자동 재로그인하도록 변경되었습니다. @taka-guevara에 감사드립니다(#8785).
  • 더 깔끔해진 세션 만료 및 소셜 콜백. 계정 센터 세션 만료 시 수동 로그인 오류를 깜빡이지 않고 리다이렉트하며(#8830), 소셜 연동 콜백에서 이제 connectorId를 올바르게 인식합니다(#8758). 2단계 인증 토글 라벨도 명확해졌습니다(#8792).
  • 다국어(i18n). MFA 문구에서 "Passkey"의 중국어 번역을 바로잡았습니다. @rotempasharel1에 감사드립니다(#8870).

새롭고 개선된 커넥터들

이번 릴리스에서는 커뮤니티에서 기여해주신 것을 포함해 커넥터 3종을 새롭게 추가했고, 다수 커넥터의 기능도 향상되었습니다:

  • MailJunky 이메일 커넥터: 인증용 트랜잭션 메일 발송용, @devadarshh 기여(#8638).
  • SMSBao SMS 커넥터: 국내 SMS 인증용, @wintbiit 기여(#8871).
  • 알리윈 SMS 인증 서비스 커넥터, @CertStone 기여(#8385).
  • 알리윈 다이렉트 메일: Direct Mail 지역 설정 기능 지원(#8892).
  • 위챗 기업(WeCom): 추가 API 호출로 더 상세한 프로필 정보 획득, @liyujun-dev 기여(#8191).
  • SMTP: auth에서 userpass 생략 가능해져, 송신자 기반 인증(IP/VLAN 등) 릴레이에서 크리덴셜 위조 없이 사용 가능(#8888).
  • 커넥터 키트: 이메일 브랜딩 URL 판별이 점을 포함한 약어에서 잘못 동작하는 현상 개선, @aayushbaluni 기여(#8747).

자체 호스팅 사용자를 위한 개선사항

OSS 배포 환경을 위한 특별 개선사항입니다:

폐쇄망(air-gap) 관리자 설정. installdb seed 명령어에 --dapc 플래그(또는 --disable-admin-pwned-password-check) 추가. 기본적으로 admin 테넌트 비밀번호 정책은 Have I Been Pwned 침해 체크를 활성화하며, 모든 관리자 비밀번호 입력마다 api.pwnedpasswords.com을 호출합니다. 이 엔드포인트에 접근 불가할 경우 최초 관리자 가입이 멈추는 문제가 있었습니다. --dapc 사용 시 침해 체크가 비활성화된 정책으로 시딩되어 외부 네트워크 의존성이 사라집니다. (@darcyYe 기여, #8859)

관리자 서명 키를 DB에서 직접 읽음. OSS 배포는 이제 별도의 호스트/DNS 맵핑 없이, DB에서 바로 admin 테넌트 서명 키를 읽어옵니다. 이전에는 Logto 컨테이너가 별도 엔드포인트를 통해 OIDC 구성을 자체 조회해야 했습니다(#8869).

마이그레이션 필요. v1.40.0에서는 데이터베이스 스키마 변경(새 조직 관계 인덱스 및 내부 컬럼 추가)이 포함되어 있습니다. 새 버전 반영 후 서버 기동 전 데이터베이스 스키마 변경 단계를 반드시 진행하세요. 업그레이드 가이드를 참고하세요.

시작하기

업그레이드를 준비하셨나요? 단계별 절차는 업그레이드 가이드에서 확인하세요.

전체 변경 내역은 GitHub 릴리스 페이지에서 확인할 수 있습니다.

질문·피드백이 있다면 DiscordGitHub 이슈에 참여해주세요.