IoC란 Inversion of Control의 약자로 해석하자면 제어의 역전이다. 즉 제어권이 역전되었다는 뜻인데 제어권이 뒤 바뀌었다는 뜻이다. 이말은 기존의 제어방식을 뒤집었다는 말이 된다. 그렇다면 기존의 방식은 어떠했는가 살펴보자. 자바가 등장하고 자바 기반의 어플리케이션이 개발되던 초기에는 자바 객체를 생성하고 객체간의 의존관계를 연결하는 등의 제어권을 개발자가 직접 가지고 있었다고 한다. 그러나 서블릿, EJB가 등장하면서 개발자가 독점적으로 가지고 있던 제어권이 서블릿과 EJB를 관리하는 외부의 컨테이너로 넘어갔고 객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 IoC, 제어의 역전이라 하는것이다. Spring (IoC) container 모든 작업을 사용하는 쪽에..
Spring AOP는 JDK 동적 프록시 또는 CGLIB를 사용하여 지정된 대상 객체에 대한 프록시를 만듭니다. JDK 동적 프록시 java의 리플렉션을 이용해서 객체를 만든다. CGLIB 경우에는 바이트코드를 조작해 프록시 객체를 만든다. Spring boot 는 기본적으로 transaction 대상의 aop를 동작시킬 프록시를 cglib 프록시를 사용하게 설정 해놨다. 그리고 성능 또한 jdk 프록시보다는 cglib가 빠르다. 우리가 느낄정도? 아니지만 일반적으로 cglib가 예외를 발생시킬 가능성이 낮다고 한다. 프록시 할 대상 객체가 하나 이상의 인터페이스를 구현하는 경우 JDK 동적 프록시가 사용됩니다.타겟 타입에 의해 구현 된 모든 인터페이스는 프록시 화됩니다.대상 객체가 인터페이스를 구현하지..
Mybatis oracle proedure xmlType 처리필자가 알기엔 oracle 11g부터인가 xmlType형식을 지원한다. 그리고 mybatis로 oracle procedure 함수를 호출해서 쿼리 대신 데이터를 받을 수 있다.굳이 왜 이렇게 하는가....근데 그렇게 해야 할 일이 생겨서 삽질을 좀 많이 했다. 프로젝트는 spring-boot 2.1.2, Java 8, maven, intellij 기반으로 했다. 근데 여기서 또 하나 문제가 발생한다. 아래에 설명할 테지만 spring-boot를 사용하는데 어쩔 수 없이 배포를 war로 해야 했다. war 배포 설정은 여기에 아주 잘 나왔다. 참고하도록 하자. 참고로 intellij 프로젝트 생성시 packaging war바꿔주면 알아서 다 해준..