반응형

토비 스프링 8

[토비의 스프링 3.1 Vol 1] 7장. 스프링 핵심 기술의 응용 (~7.5 DI를 이용해 다양한 구현 방법 적용하기)

7.3 서비스 추상화 적용 자바에는 JAXB 외에도 다양한 XML과 자바오브젝트를 매핑하는 기술이 있다. 해당 기술에 대해서도 손쉽게 변경이 가능해야 한다. XML파일을 다양한 소스에서 가져오게 만들어야 한다. 임의의 클래스패스나 파일 시스템 상의 절대위치 또는 http 프로토콜 통해 원격에서 가져오도록 확장해야 한다. 7.3.1 OXM 서비스 추상화XML과 자바오브젝트를 매핑해서 상호 변환해주는 기술을 OXM Object-XML Mapping 이라고 한다. 스프링이 제공하는 OXM 추상화 서비스 인터페이스에는 자바 오브젝트를 XML로 변환하는 Marshaller와 반대로 XML을 자바오브젝트로 변환하는 Unmarshaller가 있다. OXM 기술에 따라 Unmarshaller 인터페이스 구현한 다섯 ..

[토비의 스프링 3.1 Vol 1] 6장. AOP (6.5 스프링 AOP)

6.5 스프링 AOP 6.5.1 자동 프록시 생성 분리해낸 트랜잭션 코드는 투명한 부가기능 형태로 제공돼야 한다. 투명하다는 건 부가기능을 적용한 후에도 기존 설계와 코드에 영향을 주지 않아야 한다는 것이다. 투명한 부가기능을 적용하는 과정에서 발견했던 거의 대부분의 문제는 해결했다. 타깃 코드는 여전히 깔끔한 채로 남아 있고 부가기능은 한 번만 만들어 모든 타깃과 메소드에 재사용 가능하고 타깃의 적용 메소드를 선정하는 방식도 독립적으로 작성할 수 있도록 분리되어 있다. 프록시 팩토리 빈 방식의 접근 방법의 두 가지 문제중 부가기능이 타깃 오브젝트마다 새로 만들어지는 문제는 ProxyFactoryBean의 어드바이스 통해 해결했다. 남은 것은 부가기능의 적용이 필요한 타깃 오브젝트마다 거의 비슷한 내용의..

[토비의 스프링 3.1 Vol 1] 6장. AOP (6.4장 스프링의 프록시 팩토리 빈) + spring boot @Transactional

6.4 스프링의 프록시 팩토리 빈6.4.1 ProxyFactoryBean 스프링은 일관된 방법으로 프록시 만들 수 있게 도와주는 추상 레이어 제공 생성된 프록시는 스프링의 빈으로 등록돼야 한다. 스프링의 ProxyFactoryBean은 프록시를 생성해서 빈 오브젝트로 등록하게 해주는 팩토리 빈이다. 기존에 만들었던 TxProxyFactoryBean과 달리, ProxyFactoryBean은 순수하게 프록시를 생성하는 작업만을 담당하고 프록시 통해 제공해줄 부가기능은 별도의 빈에 둘 수 있다 .ProxyFactoryBean이 생성하는 프록시에서 사용할 부가기능은 MethodInterceptor인터페이스를 구현해서 만든다. 기존에 만들었던 TxProxyFactoryBean 스프링의 ProxyFactoryBe..

[토비의 스프링 3.1 Vol 1] 6장. AOP (~6.3)

6장 AOP 스프링에 적용된 가장 인기 있는 AOP의 적용 대상은 바로 선언적 트랜잭션 기능이다. 6.1 트랜잭션 코드의 분리 6.1.1 메소드 분리 비즈니스 로직 코드 사이에 두고 트랜잭션 시작과 종료를 담당하는 코드가 앞뒤에 위치하고 있다. 트랜잭션 경계설정의 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보 없이 독립적인 코드다. 비즈니스 로직을 담당하는 코드를 메소드로 추출해서 독립시킨다. 6.1.2 DI를 이용한 클래스의 분리 여전히 트랜잭션을 담당하는 기술적인 코드가 UserService 안에 있다. 간단하게 트랜잭션 코드를 클래스 밖으로 뽑아내면 된다. DI의 기본 아이디어를 이용하면 된다. 실제 사용할 오브젝트의 클래스 정체는 감춘 채 인터페이스 통해 간접으로 접근하는 것이다. 그 ..

[토비의 스프링 3.1 Vol 1] 5장. 서비스 추상화 (~5.2.2)

5장. 서비스 추상화 DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용할 수 있는지 살펴본다.  5.1 사용자 레벨 관리 기능 추가다수의 회원이 가입할 수 있는 인터넷 서비스외 사용자 관리 모듈에 적용한다고 가정 사용자 관리 기능에는 단지 정보를 넣고 검색하는 것 외에도 정기적으로 사용자의 활동내역을 참고해서 레벨 조정해주는 기능이 필요  구현해야 하는 비즈니스 로직 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나다.사용자가 처음 가입하면 BASIC 레벨이 되며, 이후 활동에 따라서 한 단계씩 업그레이드 될 수 있다. 가입 후 50회 이상 로그인 하면 BASIC에서 SILVER 레벨이 된다. SIVER 레벨이면서 30회..

[토비의 스프링 3.1 Vol 1] 4장. 예외 처리

4.1 사라진 SQLException JdbcTemplate 적용 이전에 있던 throws SQLException 선언이 적용 후에는 사라졌다.  4.1.1 초난감 예외처리예외 블랙홀 예외를 잡고는 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어간다.try { ...}catch (Exception e) {} 콘솔 로그를 누군가 계속 모니터링 하지 않는 한 심각한 문제로 남아있게 된다. } catch (SQLException e) { System.out.println(e);}} catch (SQLException e) { e.printStackTrace();} 무의미하고 무책임한 throws위의 케이스보다는 조금 낫긴 하지만 메소드 선언에서 의미 있는 정보를 얻을..

[토비의 스프링 3.1 Vol 1] 2장. 테스트

2장. 테스트 2.1 UserDaoTest 다시 보기 public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class); UserDao dao = context.getBean("userDao", UserDao.class); User user = new User(); user.setId("whiteship"); user.setName("백기선"); user.setPassword("married"); dao...

[토비의 스프링 3.1 Vol 1] 1장. 오브젝트와 의존관계

들어가며 : 스프링이란 무엇인가 ?자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크기본 틀 - 스프링 컨테이너스프링은 스프링 컨테이너 (또는 애플리케이션 컨텍스트) 라고 불리는 스프링 런타임 엔진을 제공스프링 컨테이너는 설정 정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리 스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP1) IoC/DI : 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델으로 스프링 프레임워크에 동작하는 코드는 IoC/DI 방식을 따라서 작성돼야 스프링이 제공하는 가치를 제대로 누릴 수 있다.2) 서비스 추상화 : 스프링을 ..

반응형