프로그래밍 노트/SPRING

핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능이라 함은 객체가 가지고 있는 비즈니스로직으로 볼 수 있다. 만약 계산을 해주는 Calculator 라는 객체가 있다고 가정하면, Calcualtor의 핵심 기능은 사칙연산 등을 의미한다. 부가 기능은 핵심 기능을 보조하기 위한 기능이다. 단독으로 사용되지 않으며 핵심기능과 함께 사용된다. 예를 들면 메소드 실행 속도를 나타내는 로그, 트랜잭션 기능, 보안 기능 등등이 된다. 핵심 기능에 부가 기능을 추가해보자 @Slf4j public class Calcualtor { public int add(int x, int y) { // 핵심 기능 return x + y; } public int sub(int x,..
2022.10.11 - [프로그래밍 노트/SPRING] - [Spring] 빈 후처리기 (feat. proxy, advisor) Advisor를 bean으로 등록하면, AnnotationAwaareAspectJAutoProxyCreator 빈 후처리기가 Advisor 에 지정된 pointcut 기반으로 proxy를 만들어 줬다. Advisor 를 bean 으로 등록하기 위해 어드바이저를 직접 만들었는데, 스프링은 @Aspect 애노테이션으로 매우 편리하게 어드바이저(포인트 컷 + 어드바이스)생성 기능을 지원한다. Advisor 를 직접 생성하여 bean 으로 등록 @Bean public Advisor advisor() { AspectJExpressionPointcut pointcut = new Aspec..
2022.09.30 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_2 (feat. Advisor) 2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 프록시 팩토리는 스프링에서 제공해주는 강력한 기술이지만, 부가기능이 필요할때 마다 프록시팩토리를 사용하여 프록시 객체를 만들기에는 한계가 있다. if, 100개의 프록시 빈을 생성해야한다면? .. 설정파일에 빈들을 하나씩 추가해줘야 한다. 빈 후처리기를 활용하면 컴포넌트 스캔을 통하여 일괄로 빈을 등록할 수 있게 되는데 일단 빈 후처리기에 대해 알아보자. 빈 후처리 - BeanPostProcessor 스프링은 bean 으로 등록될 대상 객체를 찾아서(@Bean 또는 컴포..
2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 2018.07.01 - [프로그래밍 노트/SPRING] - [Spring] Spring AOP(Aspect Oriented Programming)1 AOP 하면 빠질 수 없는 용어들이 있다. 블로그를 찾아보니 2018년도에 AOP 관련 용어를 정리한 글이 존재하는데… 프록시 팩토리에서 찍먹으로 사용되니 몇 개만 속성으로 알아보자 포인트 컷(Pointcut) 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것 어디에 부가기능(Advice)을 적용할지 판단하는 필터링 로직 어드바이스(Advice) 실제로 기능을 구현한 객체 프록시가 호출하는 부가 기능 어드바이..
2022.09.27 - [프로그래밍 노트/SPRING] - [Spring] 동적 프록시 기술(feat. 리플렉션) 바로 직전 포스팅에서 동적 프록시 기술에 대해 알아보았는데, 이런 의문점을 가질 수 있다. 인터페이스가 있는 클래스는 Jdk Dynmic Proxy를 사용하고, 존재하지 않는 경우에는 CGLib 를 사용해야하니 InvocationHandler 와 MethodInterceptor 를 모두 구현해놔야하는 것인가? 물론.. 그래도 되지만 스프링에서는 프록시 생성을 추상화하여 프록시 팩토리(ProxyFactory)라는 것을 제공해준다. 우리는 타겟 객체가 인터페이스를 구현했는지 안했는지 알필요가 없다. 프록시 팩토리에서 인터페이스가 있으면 자동으로 Jdk Dynamic Proxy를 사용하고, 구체 ..
2022.09.26 - [프로그래밍 노트/SPRING] - [Spring] 프록시 활용 - 프록시 패턴, 데코레이터 패턴 앞 전에서 프록시 관련 내용을 살펴보았다. 프록시를 사용하면 대상 클래스에 부가 기능이나 접근제어를 적용할 수 있는 장점이 있었다. 부가 기능을 추가해야하는 클래스의 수가 많지 않으면 프록시를 구현하여 적용하면 되지만, 문제는 부가 기능을 추가해야하는 클래수가 많다면 그 수 만큼 프록시 클래스를 만들어야하는 단점이 존재한다. (클래스 수 만큼 프록시 클래스를 만드는 것은 역시 미친짓이다..) 이러한 단점을 해결하기 위해 프록시를 적용할 코드를 하나만 만들고 프록시 객체를 만드는(찍어내는?) 동적 프록시 기술이 존재한다. JDK Dynamic Proxy - JAVA 에서 제공 CGLIB..
이 글의 내용은 김영한님의 스프링 핵심 원리 - 고급편 내용을 정리하였다. AOP들어가기 전 프록시에 대한 정리 프록시의 주요 기능 접근 제어 권한에 따른 접근 차단 캐싱 지연 로딩 부가 기능 추가 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행 요청 값이나, 응답 값을 중간에 변형한다. 실행시간을 측정해서 추가 로그를 남긴다. 클라이언트와 서버라고 하면 보통 서버 컴퓨터를 생각하게 된다. 하지만 클라이언트와 서버의 개념은 상당히 넓게 사용된다. 클라이언트는 의뢰인, 서버는 서비스나 상품을 제공하는 사람이나 물건을 뜻한다. 이 개념을 객체에 도입하면, 요청하는 객체는 클라이언트가 되고, 요청을 처리하는 객체는 서버가 된다. 클라이언트가 요청한 결과를 서버에 직접 요청한는 것이 아니라 어떤 대리자(P..
트랜잭션은 가장 작은 작업의 단위로, 우리는 여러개의 SQL이 사용되는 작업을 하나의 트랜잭션으로 취급해야하는 경우가 존재한다. 대표적인 예가 우리가 모두 알고 있는 계좌이체 같은 경우이다. 스프링에서 트랜잭션을 위해 여러가지 기술들을 제공하고 있는데 관련해서 알아보자. 트랜잭션 경계설정 JDBC를 이용하게되면 아래와 같이 트랜잭션 경계를 설정하여 2개의 작업을 한 트랜잭션으로 묶을 수 있게 된다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 (자동 커밋 옵션 false) try { // 하나의 트랜잭션으로 묶인 단위 작업 ProparedStatement st1 = c.prepareStatement("출금계좌에..
2022.03.23 - [데이터베이스 노트/데이터베이스] - Database의 레플리케이션(Replication) (Master/Slave DB) 앞에서 Master/Slave DB 환경을 구축하였을 때의 이점을 살펴보았으니 애플리케이션단에서 구현하는 방법을 살펴보자. 개발환경 : MyBatis 일단 각 DB 별 DataSource가 필요하므로 DataSoruce를 정의해 준다. ... // Master DataSource @Bean(name = MASTER_DATASOURCE) public HikariDataSource masterDataSource() throws SQLException { return new HikariDataSource(getHikariConfig(getOracleDataSourc..
JobParameter는 Spring Batch를 실행할 때 내/외부에서 받는 파라미터를 뜻하며, JobParameter를 사용하기 위해선 @StepScope, @JobScope 를 선언해야 한다. @JobScope Step 선언문에서 사용 @Bean public Job simpleJobExample() { return jobBuilderFactory.get("simpleJobExample") .start(simpleStep1(null)) .next(simpleStep2()) .build(); } @Bean @JobScope public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) { return stepBuil..
깡냉쓰
'프로그래밍 노트/SPRING' 카테고리의 글 목록