Spring Framework의 특징(AOP, PSA)

김병수·2022년 10월 12일
0
post-thumbnail

AOP(Aspect Oriented Programming)

직역하면 관점 지향 프로그래밍으로 해석할 수 있다. 여기서 관점이란 애플리케이션에서 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심과 관련이 있다.

커피 주문을 위한 애플리케이션의 경우, 커피 종류의 등록과 커피를 주문하는 기능이 핵심 관점 사항에 해당되고, 애플리케이션 보안에 대한 부분은 공통 관점 사항에 해당된다. AOP는 이런 핵심 로직과 공통 로직을 분리하는 것이라고 할 수 있다.

AOP가 필요한 이유

  • 코드의 간결성 유지
  • 객체 지향 설계 원칙에 맞는 코드 구현
  • 코드의 재사용
@Component
@Transactional // (1)
public class Example2_12 {
    private Connection connection;

    public void registerMember(Member member, Point point) throws SQLException {
        saveMember(member);
        savePoint(point);
    }

    private void saveMember(Member member) throws SQLException {
        // Spring JDBC를 이용한 회원 정보 저장
    }

    private void savePoint(Point point) throws SQLException {
        // Spring JDBC를 이용한 포인트 정보 저장
    }
}

트랜잭션 처리를 위해 중복된 코드를 공통화하여 재사용하게 하는것이 AOP의 핵심이다. @Transactoinal 어노테이션을 사용하면 이러한 기능을 적용하게 된다.

AOP 용어

애스팩트

  • 여러 객체에 공통으로 적용되는 기능
  • 여러 어드바이스와 포인트컷이 함께 존재

조인 포인트

  • 애플리케이션 실행 흐름에서의 특정 포인트를 의미
  • AOP를 적용할 수 있는 모든 지점
  • 메소드 실생 지점으로 제한

어드바이스

  • 조인포인트에서 수행되는 코드를 의미

포인트컷

  • 조인포인트에서 어드바이스가 적용될 위치를 선별
  • AspectJ 표현식을 사용해서 지정

PSA(Portable Service Abstaction)

추상 클래스를 통해 추상화의 개념과 필요한 이유에 대해서는 익히 알 것 이다. 이를 서비스에 적용하여 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념이다.

JdbcConnector.java

public interface JdbcConnector {
    Connection getConnection();
}

MariaDBJdbcConnector.java

public class MariaDBJdbcConnector implements JdbcConnector {
    @Override
    public Connection getConnection() {
        return null;
    }
}

OracleJdbcConnector.java

public class OracleJdbcConnector implements JdbcConnector {
    @Override
    public Connection getConnection() {
        return null;
    }
}

SQLiteJdbcConnector.java

public class SQLiteJdbcConnector implements JdbcConnector {
    @Override
    public Connection getConnection() {
        return null;
    }
}

위 코드의 예시를 봤을 때, MariaDB, Oracle, SQLite 모두 JdbcConnector라는 인터페이스를 구현하는 구현체이다. 세 구현체는 인터페이스를 통해 간접적으로 연결(Loose Coupling)되어 있고, 각자 일관된 방식으로 해당 서비스의 기능을 사용할 수 있다. 이렇게 서비스 기능을 접근하는 방식 자체는 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것이다.
그렇기에 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구사항을 반영하고 유연하게 대처할 수 있다.

profile
BE 개발자를 꿈꾸는 대학생

0개의 댓글