[c#] 데코레이터를 이용한 보안 정책 구현

이번 글에서는 C#에서 데코레이터 패턴을 사용하여 보안 정책을 구현하는 방법에 대해 살펴보겠습니다.

데코레이터 패턴 소개

데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 구조적 디자인 패턴입니다. 이 패턴을 사용하면 객체에 추가적인 기능을 동적으로 적용할 수 있어 유연한 구조를 만들 수 있습니다.

보안 정책 구현

먼저, 보안 정책을 구현하기 위해 인터페이스를 정의합니다.

public interface ISecurityPolicy
{
    bool IsAuthorized(User user);
}

위 인터페이스를 구현한 구체적인 보안 정책 클래스를 작성합니다.

public class RoleBasedSecurityPolicy : ISecurityPolicy
{
    public bool IsAuthorized(User user)
    {
        // 역할 기반 보안 로직 구현
    }
}

보안 정책에 데코레이터를 추가하여 기존의 보안 정책에 새로운 기능을 동적으로 적용할 수 있습니다. 이를 위해 데코레이터 클래스를 작성합니다.

public abstract class SecurityPolicyDecorator : ISecurityPolicy
{
    protected ISecurityPolicy _securityPolicy;

    public SecurityPolicyDecorator(ISecurityPolicy securityPolicy)
    {
        _securityPolicy = securityPolicy;
    }

    public virtual bool IsAuthorized(User user)
    {
        return _securityPolicy.IsAuthorized(user);
    }
}

위의 데코레이터 클래스를 상속하여 구체적인 데코레이터 클래스를 만들고 원하는 기능을 추가합니다.

public class LoggingDecorator : SecurityPolicyDecorator
{
    public LoggingDecorator(ISecurityPolicy securityPolicy) : base(securityPolicy)
    {
    }

    public override bool IsAuthorized(User user)
    {
        // 로깅 기능 추가
        bool result = base.IsAuthorized(user);
        // 로깅 코드 추가
        return result;
    }
}

이제 클라이언트 코드에서 보안 정책을 적용할 때, 데코레이터를 사용하여 필요한 기능을 동적으로 추가할 수 있습니다.

ISecurityPolicy securityPolicy = new RoleBasedSecurityPolicy();
securityPolicy = new LoggingDecorator(securityPolicy);
bool authorized = securityPolicy.IsAuthorized(currentUser);

데코레이터 패턴을 사용하면 기존의 코드를 수정하지 않고도 보안 정책에 새로운 기능을 추가할 수 있어 유연하고 확장 가능한 구조를 만들 수 있습니다.

결론

C#에서 데코레이터 패턴을 사용하여 보안 정책을 구현하는 방법에 대해 살펴보았습니다. 이를 통해 기존의 객체에 동적으로 기능을 추가할 수 있는 유연한 구조를 만들 수 있으며, 코드의 재사용성과 확장성을 높일 수 있습니다.

참고문헌: