Spring
-
다이나믹 프록시 (3)Spring/Spring AOP 2020. 2. 26. 23:16
다이내믹 프록시를 이용한 트랜잭션 부가기능 public class TransactionHandler implements InvocationHandler { private Object target; // 부가기능을 제공할 타깃오브젝트, 어떤타입의 오브젝트에도 적용가능 private PlatformTransactionManager transactionManager; //트랜잭션 기능을 제공하는데 필요한 트랜잭션 매니저 private String pattern;//트랜잭션을 적용할 메소드 이름 패턴 public void setTarget(Object target) { this.target = target; } public void setTransactionManager(PlatformTransactionMan..
-
다이나믹 프록시 (2)Spring/Spring AOP 2020. 2. 19. 21:12
다이내믹 프록시 적용 AOP - 다이나믹 프록시 (1)에 포함되어있는 HelloUppercase의 동작방식은 위와 같다. 다이나믹 프록시는 프록시 팩토리에 의해 런타임 시 다이내믹하게 만들어지는 오브젝트다. 다이내믹 프록시 오브젝트는 타깃의 인터페이스와 같은 타입으로 만들어진다. 클라이언트는 다이내믹 프록시 오브젝트를 타깃 인터페이스를 통해 사용할 수 있다. 이렇게 됨으로써 프록시 적용 문제점 중 하나인 인터페이스의 모든 메소드를 구현해 위임하는 단점을 제고해 준다. 즉 프록시 팩토리에게 인터페이스 정보만 제공해주면 해당 인터페이스 구현한 클래스의 오브젝트를 자동으로 만들어 주기 때문이다. 다이내믹 프록시가 인터페이스 구현클래스의 오브젝트는 만들어주지만 프록시로서 필요한 부가기능 제공 코드는 직접 작성해..
-
다이나믹 프록시 (1)Spring/Spring AOP 2020. 2. 18. 21:30
이거 보기 전 패턴 메뉴에 있는 프록시 패턴과 데코레이터 패턴 보기! 2020/02/17 - [Java/패턴] - 데코레이터 패턴 2020/02/17 - [Java/패턴] - 프록시 패턴 다이나믹 프록시 프록시는 기존 코드에 영향을 주지 않으면서 타깃의 기능을 확장하거나 접근 방법을 제어할 수 있는 유용한 방법이다. 하지만 프록시를 만드는 거는 번거롭다. 매번 새로운 클래스를 정의해야 하고, 인터페이스의 구현해야 할 메소드는 많으면 모든 메소드를 일일이 구현해서 위임하는 코드를 작성해야 되기 때문이다. 비슷한 사호아으로는 단위 테스트를 위해 목이나 스텁을 일일이 클래스로 정의하고 인터페이스의 모의 메소드를 구현하는 일이 불편했던 것이기 때문이다. 그러나 목 프레임워크를 사용해 편리하게 바꿨던 것처럼 프록..
-
AOP - 트랜잭션Spring/Spring AOP 2020. 2. 12. 20:07
1. 메소드 분리 위 코드의 특징은 트랜잭션 경계설정의 코드와 비지니스 로직 코드 간에 서로 주고받는 정보가 없는 완벽하게 독립적인 코드 순수하게 사용자 레벨 업그레이드를 담당하는 비지니스 로직코드만 독립적인 메소드에 담겨있기 때문에 이해도 쉽고 수정도 부담이 없다.실수로 트랜잭션 코드를 건드릴 염려도 없어졌다. 위와같이 책에 적혀있는 메소드를 분리하는 로직을 직접 이해하고 사용해보니 회사에서 분리시켜야되는 메소드들이 생각나기 시작했다.... 내일 점심시간에 이 부분좀 수정해야겠다. 2. DI를 이용한 클래스의 분리 그림 1-2 구조는 2-1 그림과 같이 강한 결합도로 고정되어 있다. 그래서 위의 결합도를 약하게 만들기 위하여 UserSerice를 인터페이스로 만들고 기존 코드는 UserService인터..
-
spring IoC의 용어 정리Spring/Spring 기본 지식 2020. 2. 11. 20:53
1. 빈(Bean) 빈 또는 빈 오브젝트는 스프링이 IoC방식으로 관리하는 오브젝트(관리되는 오브젝트 - managed object) 스프링이 직접 그 생성과 제어를 담당하는 오트젝트만 빈이라고 부른다. 2. 빈 팩토리(bean factory) 스프링의 IoC를 담당하는 핵심 컨테이너를 가르킨다. 빈을 등록하고, 생성하고, 조회하고 돌려주고 그 외에 부가적인 빈을 관리하는 기능을 담당 빈팩토리를 바로 사용하지 않고 이를 확장한 애플리케이션 컨텍스트 이용 BeanFactory라로 붙여 쓰면 빈 팩토리가 구현하고 있는 가장 기본적인 인터페이스의 이름이 됨(getBean()과 같은 메소드 정의) 3. 애플리케이션 컨텍스트(Application context) 빈 팩토리를 확장한 IoC 컨테이너 빈을 등록하고 ..
-
Spring AOPSpring/Spring AOP 2020. 2. 9. 18:56
1. AOP(Aspect Oriented Programming)란? 관점지향 프로그래밍 AOP를 구현하는 다양한 방법이 존재하지만, 기본적인 개념은 아래 그림과 같이 공통 관심 사항 코드를 비즈니스 로직을 구현한 코드안에 삽입 자체적인 언어라기보다는 기존의 OOP언어를 보완하는 확장 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 AOP의 구현체를 제공하며, 자바에 만들어 있는 AOP구현체(AspectJ)와 연동할 수 잇는 기능 제공 위의 내용을 기반으로 트랜잭션, 캐쉬 등 여러가지 기능이 제공되고 있다. 2. 사용 목적 인터넷 및 책에서 찾아보니까 ‘관심의 분리(Separation Of concerns)‘라고 나오는데 말이 어렵다. 그렇기 때문에 내뜻대로 정의해 보았다 핵심관점(업무로직 - 모..
-
1. spring 사용 이유Spring/Spring 기본 지식 2020. 2. 6. 13:17
스프링 사용이유 객체의 생성은 Spring Container에 맡기고, DI(Dependency Injection)을 통해 객체를 주입받아서 사용하여 '생성'과 '사용'을 분리해서 이용하기 때문에 객체지향 5개원칙 중 단일책임 원칙, 개방-폐쇄의 원칙 준수 가능 단일책임 준수 원칙을 지키는 이유 클래스가 수행하는 기능들이 많아지면 클래스 내부의 함수끼리 강한 결합이 될 가능성이 높아지기 때문에 개방-폐쇄의 원칙 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계 AOP(AspectOriented Programming)를 사용 다양한 모듈에서 공통적으로 이용되는 기능들을 분리시켜 사용하여 핵심기능 외의 기능을 해당 모듈에 응집되지 않도록 하는 기술 PoJo 지원 가능사용 (Plan Old Jav..