스프링

2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 2018.07.01 - [프로그래밍 노트/SPRING] - [Spring] Spring AOP(Aspect Oriented Programming)1 AOP 하면 빠질 수 없는 용어들이 있다. 블로그를 찾아보니 2018년도에 AOP 관련 용어를 정리한 글이 존재하는데… 프록시 팩토리에서 찍먹으로 사용되니 몇 개만 속성으로 알아보자 포인트 컷(Pointcut) 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것 어디에 부가기능(Advice)을 적용할지 판단하는 필터링 로직 어드바이스(Advice) 실제로 기능을 구현한 객체 프록시가 호출하는 부가 기능 어드바이..
2022.09.27 - [프로그래밍 노트/SPRING] - [Spring] 동적 프록시 기술(feat. 리플렉션) 바로 직전 포스팅에서 동적 프록시 기술에 대해 알아보았는데, 이런 의문점을 가질 수 있다. 인터페이스가 있는 클래스는 Jdk Dynmic Proxy를 사용하고, 존재하지 않는 경우에는 CGLib 를 사용해야하니 InvocationHandler 와 MethodInterceptor 를 모두 구현해놔야하는 것인가? 물론.. 그래도 되지만 스프링에서는 프록시 생성을 추상화하여 프록시 팩토리(ProxyFactory)라는 것을 제공해준다. 우리는 타겟 객체가 인터페이스를 구현했는지 안했는지 알필요가 없다. 프록시 팩토리에서 인터페이스가 있으면 자동으로 Jdk Dynamic Proxy를 사용하고, 구체 ..
트랜잭션은 가장 작은 작업의 단위로, 우리는 여러개의 SQL이 사용되는 작업을 하나의 트랜잭션으로 취급해야하는 경우가 존재한다. 대표적인 예가 우리가 모두 알고 있는 계좌이체 같은 경우이다. 스프링에서 트랜잭션을 위해 여러가지 기술들을 제공하고 있는데 관련해서 알아보자. 트랜잭션 경계설정 JDBC를 이용하게되면 아래와 같이 트랜잭션 경계를 설정하여 2개의 작업을 한 트랜잭션으로 묶을 수 있게 된다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 (자동 커밋 옵션 false) try { // 하나의 트랜잭션으로 묶인 단위 작업 ProparedStatement st1 = c.prepareStatement("출금계좌에..
org.springframework.validation.DataBinder 기술적인 관점 : 프로퍼티 값을 타겟 객체에 설정하는 기능 사용자 관점 : 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능 입력값은 대부분 "문자열"인데, 그 값을 객체가 가지고 있는 int, long, Boolean, Date 등 심지어 Event, Block 같은 도메인 타입으로도 변환해서 넣어주는 기능 PropertyEditor 스프링 3.0 이전까지 DataBinder가 변환 작업 사용하던 인터페이스 쓰레드-세이프 하지 않음(상태 정보 저장 하고 있음, 따라서 싱글톤 빈으로 등록해서 쓰면... gg) Object와 String간의 변환만 할 수 있어, 사용 범위가 제한적 임 고전적인 데이터 바인딩 ..
프로젝트 준비 pom.xml 설정 스프링을 손쉽게 테스트할 수 있도록 spring-test를 추가한다. 스프링은 기본적으로 JCL을 사용하는데, 이 프로젝트는 SLF4J를 사용하므로 commons-logging 라이브러리를 exclusions 시킨다. org.springframework spring-test ${version.spring} test commons-logging commons-logging library 설정 spring-webmvc(core, beans, aop, context), slf4j, junit 추가 Servlet API도 추가한다. 실제 실행할 때는 서블릿 컨테이너가 Servlet API를 제공하지만, 컴파일할 때 라이브러리가 필요하므로 추가해야 한다. (의존범위 : provi..
팩토리빈과 팩토리 메소드 팩토리메소드를 통한 인스턴스 생성은 XML에서 어떻게 표현할 수 있을까? (spring xml factory) 생성자 대신 오브젝트를 생성해주는 코드의 도움을 받아서 빈 오브젝트를 생성하는 것을 팩토리 빈이라고 부른다. 빈 팩토리와 비슷하지만 전혀 다르니 혼돈 ㄴㄴ 팩토리 빈 자신은 빈 오브젝트로 사용되지 않는다. 대신 빈 오브젝트를 만들어주는 기능만 제공해줄 뿐이다. 팩토리 기능을 가진 빈을 통째로 사용하는 방법도 있지만, 특정 빈이나 클래스의 팩토리 메소드를 사용해서 빈을 등록하는 방법도 있다. 1. FactoryBean 인터페이스 new 키워드나 리플렉션 API를 이용해 생성자를 호출하는 방식으로는 만들 수 없는 JDK 다이내믹 프록시를 빈으로 등록하기 위해 FactoryB..
초기화 메소드(initialization method) 초기화 메소드(initialization method)는 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다. 오브젝트의 기본적인 초기화 작업은 생성자에서 진행하면 된다. 하지만 DI를 통해 모든 프로퍼티가 주입된 후에야 가능한 작업도 있다. 이런 경우 사용할 수 있는것이 초기화 메소드다. 초기화 메소드를 지정하는 방법은 네 가지가 있다. 1. 초기화 콜백 인터페이스InitializingBean 인터페이스를 구현해서 빈을 작성하는 방법이다. InitializingBean의 afterPropertiesSet() 메소드는 이름 그대로 프로퍼티 설정까지 마친 뒤에 호출된다.하지만 권장되지 않는다. 빈 코드에 스프링 인터페이스를 노출..
스프링 컨테이너는 초기화 과정에서 몇 가지 빈을 기본적으로 등록해준다. ApplicationContext, BeanFactory스프링에서는 컨테이너 자신을 빈으로 등록해두고 필요하면 일반 빈에서 DI 받아서 사용할 수 있다.스프링 컨테이너인 애플리케이션 컨텍스트는 ApplicationContext 인터페이스를 구현한 것이기 때문에 일반 빈에서 사용하고 싶다면 ApplicationContext 타입의 빈을 DI받도록 해주면 된다. (또한 ApplicationContext는 BeanFactory 인터페이스의 구현체)123456@AutowiredApplicationContext context; public void do(){ this.context.getBean(...); // 애플리케이션 컨텍스트를 직접 사..
스프링 프로퍼티 값 설정 방법 DI를 통해 빈에 주입되는 것은 두가지가 존재한다. (다른 빈 오브젝트의 레퍼런스, 단순 값) 단순 값은 스프링이 관리하는 빈이 아닌 모든것을 의미한다. @Value 애노테이션의 주요 용도는 자바 코드 외부의 리소스나 환경정보에 담긴 값을 사용하도록 지정해주는 데 있다. @Value("#") String username; 이 때는 database.username 속성이 정의된 database.properties파일을 XML에 지정해둬야 한다. 스프링 프로퍼티 파일을 이용한 값 설정 설정정보를 XML로 분리해두면 빈 클래스나 의존관계 정보를 소스코드 수정 없이도 간단히 조작할 수 있다. 때로는 XML에서 다시 일부 설정정보를 별도의 파일로 분리해두면 유용할 때가 있다. 서버환..
빈 등록 메타정보 구성 전략(빈 설정방법)앞에서 대표적인 빈 등록방법을 살펴보 았다. 그렇다면 자주 사용되는 설정방법을 살펴보자. XML설정 단독 사용장점 : 컨텍스트에서 생성되는 모든 빈을 XML에서 확인할 수 있음단점 : 빈의 개수가 많아지면 XML 파일을 관리하기 번거로울 수 있음XML과 빈스캐닝(어노테이션기반)의 혼용XML과 빈 스캐너에 의한 자동인식 방법을 함께 사용할 수 있다.애플리케이션 3계층의 핵심 로직을 담고 있는 빈 클래스는 그다지 복잡한 빈 메타정보를 필요하지 않고 대부분 싱글톤이며 클래스당 하나만 만들어지므로 빈 스캐닝에 의한 자동인식 대상으로 적절하다.반면에 자동인식 방식으로 등록하기는 불편한 기술 서비스, 기반 서비스, 컨테이너 설정 등의 빈은 XML로 사용하면 된다. (자동인식..
깡냉쓰
'스프링' 태그의 글 목록