프로젝트 포함 구조에서의 확장(Extends) 처리

A 프로젝트와 B 프로젝트의 보안 설정 클래스 확장 전략을 살펴봅니다.

요약

  • A 프로젝트에서 보안 설정을 위한 추상 클래스를 정의하고, 하위 프로젝트에서 이를 상속함으로써 확장이 용이합니다.
  • B 프로젝트는 A 프로젝트의 클래스를 상속하고 @Configuration을 추가하여 스프링 빈으로 등록합니다.
  • 오버라이드를 통해 설정 값을 변경하고, 커스터마이즈된 기능을 추가할 수 있습니다.

배경/문제

A 프로젝트에서는 보안 관련 설정을 담당하는 추상 클래스를 정의하고, 이를 B 프로젝트에서 상속하여 특정 보안 설정을 적용하는 구조를 취합니다. 이러한 방법은 코드의 중복을 줄이고, 일관성 있는 보안 설정을 유지하는 데 유리합니다.

접근/해결 전략

  1. A 프로젝트에서 추상 클래스인 StandardSecurityConfig를 만듭니다. 보안 관련 설정들을 메서드나 프로퍼티로 정의하고 open 키워드를 사용하여 오버라이드가 가능하도록 합니다.
  2. 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;
    }
}

주의사항/트레이드오프

  1. 중복 등록 방지: A 프로젝트의 클래스가 @Configuration으로 등록되면 B 프로젝트에서 중복 등록될 수 있습니다. 이를 피하기 위해서 A 프로젝트의 클래스를 추상 클래스로 정의하거나 @Configuration을 제거해야 합니다.
  2. 오버라이드 방식: Kotlin에서 open var로 정의한 변수는 Java에서 getter/setter로 접근 가능합니다. 접근 제한자에 따라 오버라이드하거나 super를 이용해 상위 클래스를 호출하여 변경해야 합니다.

마무리

  • A 프로젝트는 추상 보안 설정 클래스를 사용하여 보안 로직을 정의합니다.
  • B 프로젝트는 이를 상속받아 특정 설정을 추가하고 @Configuration을 통해 스프링 빈으로 등록하여 사용합니다.
  • 이러한 구조를 통해 코드를 재사용하면서도 프로젝트에 따라 유연한 맞춤 설정이 가능합니다.

© 2024. Chiptune93 All rights reserved.