프로젝트 포함 구조에서의 확장(Extends) 처리
in Development / Spring on Security, Configuration, Inheritance, Kotlin, Java
A 프로젝트와 B 프로젝트의 보안 설정 클래스 확장 전략을 살펴봅니다.
요약
- A 프로젝트에서 보안 설정을 위한 추상 클래스를 정의하고, 하위 프로젝트에서 이를 상속함으로써 확장이 용이합니다.
- B 프로젝트는 A 프로젝트의 클래스를 상속하고
@Configuration을 추가하여 스프링 빈으로 등록합니다. - 오버라이드를 통해 설정 값을 변경하고, 커스터마이즈된 기능을 추가할 수 있습니다.
배경/문제
A 프로젝트에서는 보안 관련 설정을 담당하는 추상 클래스를 정의하고, 이를 B 프로젝트에서 상속하여 특정 보안 설정을 적용하는 구조를 취합니다. 이러한 방법은 코드의 중복을 줄이고, 일관성 있는 보안 설정을 유지하는 데 유리합니다.
접근/해결 전략
- A 프로젝트에서 추상 클래스인
StandardSecurityConfig를 만듭니다. 보안 관련 설정들을 메서드나 프로퍼티로 정의하고open키워드를 사용하여 오버라이드가 가능하도록 합니다. - B 프로젝트에서는 A 프로젝트의 클래스를 상속하고
@Configuration을 통해 스프링에서 인식할 수 있도록 설정합니다.
구현 포인트
다음은 A 프로젝트와 B 프로젝트의 클래스를 설정하는 예시입니다.
A 프로젝트
abstract class StandardSecurityConfig {
protected open var loginUrl: String = "/login"
// 기타 보안 관련 메서드
protected abstract fun configureXXX()
}
B 프로젝트
@Configuration
public class CustomSecurityConfig extends StandardSecurityConfig {
@Override
public void configureXXX() {
// 커스터마이즈 된 메서드 구현
}
// 추가적으로 필요한 설정
public void setLoginUrl(String url) {
super.loginUrl = url;
}
}
주의사항/트레이드오프
- 중복 등록 방지: A 프로젝트의 클래스가
@Configuration으로 등록되면 B 프로젝트에서 중복 등록될 수 있습니다. 이를 피하기 위해서 A 프로젝트의 클래스를 추상 클래스로 정의하거나@Configuration을 제거해야 합니다. - 오버라이드 방식: Kotlin에서
open var로 정의한 변수는 Java에서 getter/setter로 접근 가능합니다. 접근 제한자에 따라 오버라이드하거나super를 이용해 상위 클래스를 호출하여 변경해야 합니다.
마무리
- A 프로젝트는 추상 보안 설정 클래스를 사용하여 보안 로직을 정의합니다.
- B 프로젝트는 이를 상속받아 특정 설정을 추가하고
@Configuration을 통해 스프링 빈으로 등록하여 사용합니다. - 이러한 구조를 통해 코드를 재사용하면서도 프로젝트에 따라 유연한 맞춤 설정이 가능합니다.