안녕하세요, 하다 뉴스 여러분, Neosync를 출시하게 되어 기쁩니다!

Neosync는 개발자들이 개인정보 보호나 보안 위험 없이 로컬 테스트, 디버깅 및 개발자 경험을 개선하기 위해 생산 데이터의 익명화된 버전 및 합성 버전을 생성할 수 있도록 돕는 오픈 소스 플랫폼입니다.

대부분의 개발자 및 팀은 로컬 및 스테이지 데이터베이스를 위한 몇 가지 모의 데이터를 생성하는 데이터베이스 시드 스크립트를 가지고 있습니다. 개발자들에게서 들은 문제는 로컬에서는 기능이 잘 작동하는 것처럼 보이지만, 생산 데이터를 대표하지 않는 시드 데이터 때문에 생산에서 버그와 예외 사례가 발생한다는 것입니다. 두 번째 문제는 생산에서 오류를 디버깅할 때 생산에 가까운 데이터를 얻는 좋은 방법이 없다는 것이었습니다.

생산 데이터를 직접 사용하면 이러한 문제를 해결할 수 있지만, 대부분의 팀은 1. 개인정보 보호/보안 문제와 2. 규모 때문에 사용할 수 없습니다.

그래서 우리는 Neosync로 이 두 가지 문제를 해결하기 위해 나섰습니다.

우리는 익명화와 합성 데이터를 사용하여 개인정보 보호 및 보안 문제를 해결합니다. 40개 이상의 사전 구축된 트랜스포머(또는 코드로 직접 작성)를 사용하여 PII 또는 민감한 데이터를 익명화하여 로컬에서 안전하게 사용할 수 있습니다. 또한, 데이터를 익명화하는 대신 처음부터 생산 데이터처럼 보이는 합성 데이터를 생성할 수 있으며, 데이터베이스의 기존 스키마에 맞게 조정됩니다.

두 번째 문제는 규모입니다. 일부 생산 데이터베이스는 로컬에 맞지 않을 정도로 크거나 필요한 것보다 더 많은 데이터를 가지고 있습니다. 또한, 특정 고객의 데이터를 디버깅하고 싶은 경우가 있으며 그들의 데이터만 필터링하는 방법이 필요합니다. 우리는 이를 서브셋팅으로 해결합니다. 테이블을 필터링하기 위한 SQL 쿼리를 전달하면 Neosync가 모든 복잡한 작업을 처리합니다.

Neosync의 핵심은 참조 무결성을 다룰 수 있는 능력입니다. 관계형 데이터베이스를 다룰 때, 주요 키, 외래 키, 고유 제약조건, 테이블 내 및 테이블 간 순환 종속성, 시퀀스 등이 있습니다.

따라서 데이터를 익명화하든 합성 데이터를 생성하든, 그 제약조건과 관계를 보존하는 방법이 필요하며, 그렇지 않으면 스키마가 깨집니다.

Neosync는 이를 투명하게 처리합니다. 외래 키가 깨지거나 매핑이 필요한 새로운 열, null이 아닌 외래 키 등 제약조건에 문제가 발생하면 알려드려 조치를 취하고 수정할 수 있습니다.

작동 방식은 다음과 같습니다.

  1. 소스 및 대상 데이터베이스를 연결합니다.

  2. 작업 유형을 정의하고 일정에 따라 실행할지 여부를 결정합니다. 동기화 작업은 소스에서 대상으로 데이터를 동기화하고 데이터 생성 작업은 처음부터 합성 데이터를 생성하여 대상으로 스트리밍합니다.

  3. 동기화 및 변환할 스키마와 테이블을 정의합니다. 열 수준에서 데이터를 익명화하거나 합성 데이터를 생성하는 방법을 정의하는 트랜스포머를 선택하거나, AI 생성 합성 데이터를 사용하여 대상 데이터베이스의 데이터를 생성할 수 있습니다.

  4. 마지막으로, 서브셋을 정의할 수 있습니다. 이는 대상에 전송되는 데이터를 필터링하는 방법입니다. 이를 위해 사용자 지정 SQL 쿼리나 필터를 제공할 수 있습니다.

그게 전부입니다! 설정한 일정에 따라 작업이 실행됩니다. 우리는 전체 데이터베이스에 걸친 재시도, 백오프 및 참조 무결성을 처리합니다. 또한 API, CLI 및 Github 작업을 제공하여 CI 파이프라인에서 CI 데이터베이스를 채우는 데 Neosync를 사용할 수 있습니다.

Neosync는 Go와 Typescript로 작성된 오픈 소스 프로젝트이며 Helm이나 Docker compose로 실행할 수 있습니다. 또한 호스팅 플랫폼을 제공하며 넉넉한 무료 계층을 이용할 수 있습니다.

피드백을 기다리고 있으며 언제든지 기여를 환영합니다.