본문 바로가기

Spring

(49)
[Spring] 빈 후처리기 목차빈 후처리기 - 소개빈 후처리기 - 예제 코드1빈 후처리기 - 예제 코드2빈 후처리기 - 적용스프링이 제공하는 빈 후처리기1스프링이 제공하는 빈 후처리기2하나의 프록시, 여러 Advisor 적용 빈 후처리기 - 소개 @Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다.빈 후처리기 - BeanPostProcessor 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다. 빈 포스트 프로세서( BeanPostProcessor )는 번역하면 빈 후처리기인데, 이름 그대로 빈..
[Spring] 스프링이 지원하는 프록시(ProxyFactory) 목차프록시 팩토리 - 소개프록시 팩토리 - 예제 코드1프록시 팩토리 - 예제 코드2포인트컷, 어드바이스, 어드바이저 - 소개예제 코드1 - 어드바이저예제 코드2 - 직접 만든 포인트컷예제 코드3 - 스프링이 제공하는 포인트컷예제 코드4 - 여러 어드바이저 함께 적용프록시 팩토리 - 적용 프록시 팩토리 - 소개앞서 마지막에 설명했던 동적 프록시를 사용할 때 문제점을 다시 확인해보자.문제점인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?두 기술을 함께 사용할 때 부가 기능을 제공하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor 를 각각 중복으로 만들어서 관리..
[Spring] 동적 프록시 기술(JDK 동적 프록시, CGLIB) 목차리플렉션JDK 동적 프록시 - 소개JDK 동적 프록시 - 예제 코드JDK 동적 프록시 - 적용1JDK 동적 프록시 - 적용2CGLIB - 소개CGLIB - 예제 코드 리플렉션지금까지 프록시를 사용해서 기존 코드를 변경하지 않고, 로그 추적기라는 부가 기능을 적용할 수 있었다. 그런데 문제는 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점이다. 로그 추적을 위한 프록시 클래스들의 소스코드는 거의 같은 모양을 하고 있다.자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다. 쉽게 이야기해서 프록시 클래스를 지금처럼 계속 만들지 않아도 된다는 것이다. 프록시를 적용할 코드를 하나만 만들..
[Spring] Thread Local - 쓰레드 로컬 목차필드 동기화 - 개발필드 동기화 - 적용필드 동기화 - 동시성 문제동시성 문제 - 예제 코드ThreadLocal - 소개ThreadLocal - 예제 코드쓰레드 로컬 동기화 - 개발쓰레드 로컬 동기화 - 적용쓰레드 로컬 - 주의사항 필드 동기화 - 개발앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID 와 level 을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId 를 파라미터로 넘기도록 구현했다. 이렇게 해서 동기화는 성공했지만, 로그를 출력하는 모든 메서드에 TraceId 파라미터를 추가해야 하는 문제가 발생했다.TraceId 를 파라미터로 넘기지 않고 이 문제를 해결할 수 있는 방법은 없을까?이런 문제를 해결할 목적으로 새로운 로그 추적기를 만들어보자.이제 프로..
[Spring DB] 스프링 트랜잭션 전파 - 활용 목차트랜잭션 전파 활용1 - 예제 프로젝트트랜잭션 전파 활용2 - 커밋, 롤백 트랜잭션 전파 활용3 - 단일 트랜잭션 트랜잭션 전파 활용4 - 전파 커밋 트랜잭션 전파 활용5 - 전파 롤백 트랜잭션 전파 활용6 - 복구 REQUIRED 트랜잭션 전파 활용7 - 복구 REQUIRES_NEW 트랜잭션 전파 활용1 - 예제 프로젝트 시작비즈니스 요구사항회원을 등록하고 조회한다. 회원에 대한 변경 이력을 추적할 수 있도록 회원 데이터가 변경될 때 변경 이력을 DB LOG 테이블에 남겨야 한다. 여기서는 예제를 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다. Member@Entity@Setter@Getterpublic class Member { @Id @GeneratedValue pri..
[Spring DB] 스프링 트랜잭션 전파 목차스프링 트랜잭션 전파1 - 커밋, 롤백 스프링 트랜잭션 전파2 - 트랜잭션 두 번 사용 스프링 트랜잭션 전파3 - 전파 기본 스프링 트랜잭션 전파4 - 전파 예제 스프링 트랜잭션 전파5 - 외부 롤백 스프링 트랜잭션 전파6 - 내부 롤백 스프링 트랜잭션 전파7 - REQUIRES_NEW 스프링 트랜잭션 전파8 - 다양한 전파 옵션  스프링 트랜잭션 전파1 - 커밋, 롤백트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파(propagation)라는 개념도 알아보자. BasicTxTest@Slf4j@SpringBootTestpublic class BasicTxTest { @Autowired PlatformTransactionManager txMana..
[Spring DB] 스프링 트랜잭션 목차스프링 트랜잭션 소개트랜잭션 적용 확인트랜잭션 적용 위치트랜잭션 AOP 주의 사항 - 프록시 내부 호출트랜잭션 AOP 주의 사항 - 초기화 시점트랜잭션 옵션 소개예외와 트랜잭션 커밋, 롤백 스프링 트랜잭션 소개스프링 트랜잭션 추상화각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를 들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다. 따라서 JDBC 기술을 사용하다가 JPA 기술로 변경하게 되면 트랜잭션을 사용하는 코드도 모두 함께 변경해야 한다. 스프링은 이런 문제를 해결하기 위해 트랜잭션 추상화를 제공한다. 트랜잭션을 사용하는 입장에서는 스프링 트랜잭션 추상화를 통해 둘을 동일한 방식으로 사용할 수 있게 되는 것이다. 스프링은 PlatformTrans..
[Spring DB] 데이터 접근 기술 - Querydsl 목차Querydsl 소개Querydsl 설정Querydsl 적용 Querydsl 소개Query의 문제점String sql = "select * from member" +"where name like ?" +"and age between ? and ?"[문자를 합치면]"select * from memberwhere name like ?and age between ? and ?"Query는 문자, Type-check 불가능 실행하기 전까지 작동여부 확인 불가SQL 문법 오류 발생 에러는 크게 2가지로 분류컴파일 에러(좋은 에러)런타임 에러(나쁜 에러) Querydsl만약 SQL이 클래스 처럼 타입이 있고 자바 코드로 작성할 수 있다면?쿼리를 자바로 type-safe 하게 개발할 수 있게 지원하는 프레임워크주..
[Spring DB] 데이터 접근 기술 - 스프링 데이터 JPA 목차스프링 데이터 JPA 주요 기능스프링 데이터 JPA 적용1스프링 데이터 JPA 적용2 스프링 데이터 JPA 주요 기능공통 인터페이스 기능쿼리 메서드 기능 1️⃣ 공통 인터페이스 기능JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다.공통화 가능한 기능이 거의 모두 포함되어 있다.CrudRepository 에서 fineOne() ➔ findById() 로 변경되었다. JpaRepository 사용법public interface ItemRepository extends JpaRepository {}JpaRepository 인터페이스를 인터페이스 상속 받고, 제네릭에 관리할  를 주면 된다.그러면 JpaRepository 가 제공하는 기본 CRUD 기능을 모두 사용할 수 있다. 스..
[Spring DB] 데이터 접근 기술 - JPA 목차JPA 시작JPA 설정JPA 적용1 - 개발JPA 적용2 - 리포지토리 분석JPA 적용3 - 예외 변환 JPA 시작스프링과 JPA는 자바 엔터프라이즈(기업) 시장의 주력 기술이다. 스프링이 DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공한다면, JPA는 ORM 데이터 접근 기술을 제공한다. 실무에서는 JPA를 더욱 편리하게 사용하기 위해 스프링 데이터 JPA와 Querydsl이라는 기술을 함께 사용한다. 중요한 것은 JPA이다. 스프링 데이터 JPA, Querydsl은 JPA를 편리하게 사용하도록 도와주는 도구라 생각하면 된다.  JPA 설정spring-boot-starter-data-jpa 라이브러리를 사용하면 JPA와 스프링 데이터 JPA를 스프링 부트와 통합하고, 설정도 아주 간단..