분류 전체보기
-
6장) 6.4 스프링의 프록시 팩토리 빈Java & Spring/토비의 스프링 3.1 2021. 7. 16. 18:22
6장 AOP 6.4 스프링의 프록시 팩토리 빈 ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 프록시를 만들도록 지원하는 다양한 기술 존재 스프링은 일관된 방법으로 프록시를 만들 수 있게 도와주는 추상 레이어 제공 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈 제공 프록시를 생성하는 작업만 담당 부가기능은 MethodInterceptor 인터페이스를 구현해서 사용 InvocationHandler의 invoke() 는 타깃 오브젝트 정보를 제공하지 않아서, 자체적으로 타깃을 알고 있어야함 MethodInterceptor의 invoke()는 ProxyFactoryBean으로 부터 타깃 오브젝트 정보를 제공받음 타깃 오브젝트에 상관없이 독립적으로 만들어 질 수 있고, 다..
-
6장) 6.3 다이내믹 프록시와 팩토리 빈Java & Spring/토비의 스프링 3.1 2021. 7. 16. 18:06
6장 AOP 6.3 다이내믹 프록시와 팩토리 빈 프록시와 프록시 패턴, 데코레이터 패턴 프록시 트랜잭션은 비즈니스 로직과는 성격이 다르기 때문에 분리, 독립 UserServiceTx, UserServiceImpl 핵심 기능(비즈니스 로직)을 담은 클래스를 부가 기능을 가진 트랜잭션 클래스에서 이용 클라이언트가 핵심 기능을 가진 클래스를 직접 사용하지 않도록, 부가 기능을 담은 클래스가 핵심 기능인 것 처럼 위장 ~> 핵심 기능 클래스를 이용 실제 대상인 것 처럼 위장해서 요청을 받아주는 대리자 역할을 한다고 해서 프록시라고 부름 요청을 위임받아 실제 처리하는 오브젝트를 타깃 or 실체(real subject) 라고 부름 클라이언트 --> 프록시 --> 타깃 사용 목적 클라이언트가 타깃에 접근하는 것을 제..
-
HandlerMethodArgumentResolverJava & Spring/기본 개념 정리 2021. 7. 13. 12:25
HandlerMethodArgumentResolver 컨트롤러에서 파라미터를 바인딩 해주는 역할 요청 파라미터를 수정하거나 클래스 파라미터를 조작, 공통으로 쓸 파라미터를 바인딩 공통으로 수행할 작업을 수행한 후, Object를 반환해서 코드의 중복을 줄임 HandlerMethodArgumentResolver 인터페이스를 구현한 구현체를 WebMvcConfigurer 인터페이스 구현체의 addArgmuentResolver에 등록해서 사용 supportsParameter와 resolveArgument 2개의 메서드를 오버라이딩하여 구현 supportsParameter boolean 값으로 반환하는 메소드 요청으로 들어온 MethodParameter가 resolveArgument 수행이 필요한 경우 true..
-
Spring boot actuatorJava & Spring/기본 개념 정리 2021. 7. 13. 11:29
Spring boot actuator 엔드포인트로 HTTP나 JMX를 통해서 Application을 모니터링하고 관리하는 기능 제공 health, Auditing, beans, ... 종속성 추가 org.springframework.boot spring-boot-starter-actuator 제공하는 엔트포인트 ID Description auditevents 현재 실행중인 Applicaition의 audit Event를 보여준다. AuditEventRepository bean이 필요 beans 애플리케이션의 모든 Spring 빈 목록을 보여준다. caches 사용 가능한 캐시를 보여준다. conditions Configuration과 Auto-Configuration의 매칭 여부와 이유를 보여준다. co..
-
6장) 6.1 트랜잭션 코드의 분리 ~ 6.2 고립된 단위 테스트Java & Spring/토비의 스프링 3.1 2021. 7. 11. 17:32
6장 AOP 스프링에 적용된 가장 인기있는 AOP 적용 대상은 선언적 트랜잭션 기능 6.1 트랜잭션 코드의 분리 메소드 분리 기존에 작성했던 UserService는 트랜잭션 경계설정 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보가 없음 비즈니스 로직 코드에서 직접 DB를 사용하지 않기 때문 upgradeLevels 메소드에서 시작된 트랜잭션 정보는 트랜잭션 동기화 방법을 통해 DAO가 알아서 활용 완벽하게 독립된 코드 DI를 이용한 클래스의 분리 DI 적용을 이용한 트랜잭션 분리 DI는 실제 사용할 오브젝트 클래스 정체를 감추고 인터페이스로 간접 접근하도록 사용 구현 클래스를 외부에서 변경 가능 UserService를 인터페이스로 만들고 기존 코드를 구현 클래스로 수정 클라이언트와 결합이 약해지고 ..
-
5장) 5.3 서비스 추상화와 단일 책임 원칙 ~ 5.5 정리Java & Spring/토비의 스프링 3.1 2021. 7. 2. 14:11
5장 서비스 추상화 5.3 서비스 추상화와 단일 책임 원칙 수직, 수평 계층구조와 의존관계 기술과 서비스에 대해 추상화 기법 적용 UserDao와 UserService가 각각 담당하는 코드의 기능적인 관심에 따라 분리, 독자적으로 확장이 가능하도록 작업 같은 계층에서 수평적인 분리 트랜잭션 추상화 비즈니스 로직과 그 하위에서 동작하는 로우레벨의 트랜잭션 기술이라는 아예 다른 계층의 특성을 갖는 코드를 분리 단일 책임 원칙 하나의 모듈은 한가지 책임을 가져야함 == 하나의 모듈이 바뀌는 이유는 한 가지여야함 UserService 예시 JDBC Connection 메소드를 직접 사용하는 트랜잭션 코드가 있던 경우 두 가지의 책임을 가짐 사용자 레벨을 어떻게 관리할 것인가 트랜잭션을 어떻게 관리할 것인가 단일..
-
5장) 5.2 트랜잭션 서비스 추상화Java & Spring/토비의 스프링 3.1 2021. 6. 26. 18:12
5장 서비스 추상화 5.2 트랜잭션 서비스 추상화 트랜잭션 더 이상 나눌 수 없는 단위 작업 트랜잭션 커밋 모든 SQL 수행 작업이 다 성공적으로 마무리됐다고 DB에 알려줘서 작업을 확정시키는 작업 변경 내용이 DB에 반영되도록 설정하는 작업 트랜잭션 롤백 SQL 수행 작업 중 뒤 차례의 수행에 문제가 발생한 경우에 앞에서 처리한 SQL 수행 작업도 취소시키는 작업 DB에 변경 내용을 변경 이전으로 되돌리는 작업 트랜잭션 경계 설정 트랜잭션 경계 트랜잭션이 시작되고 끝나는 위치 transaction 시작 선언 이후, commit() or rollback() 으로 트랜잭션을 종료하는 작업 JDBC 트랜잭션의 트랜잭션 경계 설정 하나의 Connection을 사용하다가 닫는 사이에 일어남 트랜잭션의 시작과 종..
-
5장) 5.1 사용자 레벨 관리 기능 추가Java & Spring/토비의 스프링 3.1 2021. 6. 26. 18:11
5장 서비스 추상화 지금까지 만든 DAO에 트랜잭션을 적용하면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용하도록 지원하는지 살펴보기 5.1 사용자 레벨 관리 기능 추가 지금까지 만든 UserDao는 비즈니스 로직을 가지고 있지 않다. 사용자 관리 기능을 넣어 활동 내역을 참고한 레벨 조정 기능을 추가 사용자 레벨 BASIC, SILVER, GOLD 처음 가입 시, BASIC 등급, 활동에 따라 한 단계씩 업그레이드 가입 후 50회 이상 로그인 ~> SILVER SILVER 레벨이면서 30번 이상 추천 ~> GOLD 사용자 레벨은 일정한 주기를 가지고 일괄 진행 변경 작업 전에는 조건을 충족해도 변경이 일어나지 않음 필드 추가 LEVEL 이늄 3 단계기 때문에 DB에..