프로젝트 소개

Redacted는 `case classes` 내부에 정의된 민감한 필드(자격 증명, 개인 데이터 및 기타 기밀 정보 등)의 부주의한 유출을 방지하기 위해 설계된 Scala 라이브러리이자 컴파일러 플러그인입니다. 컴파일 시점에 기본 `toString` 메서드를 재작성하여 어노테이션이 지정된 필드를 자리 표시자(예: `***`)로 대체하며, 필드에 대한 직접 접근에는 영향을 주지 않습니다. **주요 기능:** - **어노테이션 기반**: 민감한 필드에 `@redacted`를 어노테이션하기만 하면 `toString` 출력에서 제외됩니다. - **컴파일 시점 변환**: 컴파일러 플러그인이 컴파일 중에 `toString`을 재작성하므로 런타임 오버헤드가 없고 최종 바이너리에 플러그인 의존성이 남지 않습니다. - **크로스 플랫폼**: JVM, Scala.js, Scala Native를 지원합니다. - **간편한 통합**: 원활한 설정을 위한 sbt 플러그인(`sbt-redacted`)을 제공합니다. **사용 예시:** ```scala import io.github.polentino.redacted.redacted case class HttpHeaders(userId: UUID, @redacted apiKey: String, languages: Seq[Locale], correlationId: String) case class User(id: UUID, nickname: String, @redacted email: String) ``` 설정 후 객체를 덤프하거나 `toString`을 호출하면 어노테이션이 지정된 필드에 대해 `***`가 출력되며, 직접 접근(예: `headers.apiKey`)은 여전히 실제 값을 반환합니다. **지원되는 Scala 버전:** - Scala 3 (3.1.3 ~ 3.9.0, LTS 버전 포함) - Scala 2.13 및 2.12 **플랫폼:** - JVM - Scala.js (1.x) - Scala Native (0.5) **작동 방식:** 컴파일러 플러그인은 각 타입 정의를 검사하여 `@redacted` 어노테이션이 지정된 필드가 하나 이상 있는 `case class`인지 확인한 다음, 기본 `toString` 구현을 재작성하여 해당 필드에 대해 선택적으로 `***`를 출력합니다. **요구 사항:** - Java 17+ (모든 구성 요소는 Java 17에서 컴파일됨) **추가 자료:** - 프로젝트 웹사이트: https://polentino.github.io/redacted/ - sbt 플러그인 저장소: https://github.com/polentino/sbt-redacted **도입 사례:** - InvestSuite (B2B, 확장 가능하고 AI 기반의 WealthTech) Redacted는 로그나 콘솔 출력에서 민감한 데이터가 실수로 노출되지 않도록 해야 하는 Scala 개발자, 특히 사용자 자격 증명, API 키 또는 PII/GDPR 관련 데이터를 다루는 애플리케이션에 이상적입니다.