프로그래밍 노트/SPRING

스프링 프로퍼티 값 설정 방법 DI를 통해 빈에 주입되는 것은 두가지가 존재한다. (다른 빈 오브젝트의 레퍼런스, 단순 값) 단순 값은 스프링이 관리하는 빈이 아닌 모든것을 의미한다. @Value 애노테이션의 주요 용도는 자바 코드 외부의 리소스나 환경정보에 담긴 값을 사용하도록 지정해주는 데 있다. @Value("#") String username; 이 때는 database.username 속성이 정의된 database.properties파일을 XML에 지정해둬야 한다. 스프링 프로퍼티 파일을 이용한 값 설정 설정정보를 XML로 분리해두면 빈 클래스나 의존관계 정보를 소스코드 수정 없이도 간단히 조작할 수 있다. 때로는 XML에서 다시 일부 설정정보를 별도의 파일로 분리해두면 유용할 때가 있다. 서버환..
빈 등록 메타정보 구성 전략(빈 설정방법)앞에서 대표적인 빈 등록방법을 살펴보 았다. 그렇다면 자주 사용되는 설정방법을 살펴보자. XML설정 단독 사용장점 : 컨텍스트에서 생성되는 모든 빈을 XML에서 확인할 수 있음단점 : 빈의 개수가 많아지면 XML 파일을 관리하기 번거로울 수 있음XML과 빈스캐닝(어노테이션기반)의 혼용XML과 빈 스캐너에 의한 자동인식 방법을 함께 사용할 수 있다.애플리케이션 3계층의 핵심 로직을 담고 있는 빈 클래스는 그다지 복잡한 빈 메타정보를 필요하지 않고 대부분 싱글톤이며 클래스당 하나만 만들어지므로 빈 스캐닝에 의한 자동인식 대상으로 적절하다.반면에 자동인식 방식으로 등록하기는 불편한 기술 서비스, 기반 서비스, 컨테이너 설정 등의 빈은 XML로 사용하면 된다. (자동인식..
IoC/DI를 위한 빈 설정 메타정보 작성IoC컨테이너의 기본적인 역할은 코드를 대신해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리하는 것이다.(POJO로 만들어진 애플리케이션 클래스와 서비스 오브젝트들이 그 대상) 빈을 만들기 위한 설정 메타정보는 파일이나 애노테이션 같은 리소스로부터 전용 리더를 통해 BeanDefinition 타입의 오브젝트로 변환된다. 이 BeanDefinition정보를 IoC컨테이너가 활용하게 된다.빈 등록은 빈 메타정보를 작성해서 컨테이너에게 건네주면 된다. => XML 문서, 프로퍼티 파일, 소스코드 애노테이션과 같은 외부 리소스로 빈 메타정보를 작성하고 이를 적절한 리더나 변환기를 통해 애플리케이션 컨텍스트가 사용할 수 있는 정보로 변환해주는 방법을 사용 빈 메타정보 ..
웹 애플리케이션의 컨텍스트 구성방법 가장 많이 사용하는 방법 => 서블릿 컨텍스트(dispatcher-context.xml)와 루트 애플리케이션 컨텍스트(root-context.xml) 계층구조 스프링 웹 기술을 사용하는 경우 웹 관련 빈들은 서블릿 컨텍스트에 두고, 나머지는 루트 애플리케이션 컨텍스트에 등록한다. 루트 컨텍스트는 모든 서블릿 레벨 컨텍스트의 부모 컨텍스트가 된다. 루트 애플리케이션 컨텍스트 등록 => 가장 간단한 방법은 서블릿의 이벤트 리스너를 이용하는 것이다. => 웹 애플리케이션의 시작과 종료시 발생하는 이벤트를 처리하는 리스너 ServlerContextListener를 이용 (ServletContextListener 인터페이스를 구현한 리스너는 웹 애플리케이션 전체에 적용 가능한 ..
IoC컨테이너 계층구조빈의 개수가 많아져서 설정파일이 커지는게 문제라면 파일을 여러개로 쪼개서 만들고 하나의 애플리케이션 컨텍스트가 여러 개의 설정파일을 사용하게하면 그만이다. 하지만 한 개 이상의 IoC컨테이너를 만들어두고 사용해야 할 경우가 있다. 바로 트리 모양의 계층구조를 만들때다. 부모컨텍스트를 이용한 계층구조 효과모든 애플리케이션 컨텍스트는 부모 애플리케이션 컨텍스트를 가질 수 있다.모든 컨텍스트는 각자 독립적인 설정정보를 이용해 빈 오브젝트를 만들고 관리독립적으로 자신이 관리하는 빈을 갖고 있지만, DI를 위해 빈을 찾을 때는 부모 애플리케이션 컨텍스트의 빈까지 모두 검색(필요한 빈을 찾고 없으면 부모 컨텍스트에게 빈을 찾아달라고 요청. 없으면 부모의 부모.. 루트 컨텍스트까지 전달) 중요한..
IoC 컨테이너컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.(IoC 컨테이너)실제로 스프링 컨테이너 또는 IoC컨테이너라고 말하는 것은 바로 이 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트이다. (BeanFactory 인퍼에스 상속)IoC 컨테이너가 사용하는 빈(bean) 메타정보는 대략 다음과 같다.빈 아이디, 이름, 별칭 : 빈 오브젝트를 구분할 수 있는 식별자클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름생성자 파라미터 값 또는 참조 : DI에 사용할 생성..
스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈(bean)이라고 부른다.(자바빈 또는 엔터프라이즈 자바빈EJB에서 말하는 빈과 비슷한 오브젝트 단위의 어플리케이션 컴포넌트) 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC오브젝트를 빈 팩토리(bean factory)라고 부른다. 빈 팩토리보다는 이를 좀 더 확장한 애플리케이션 컨텍스트(application context)를 주로 사용한다. 스프링 IoC의 용어 정리빈(bean)스프링이 IoC방식으로 관리하는 오브젝트라는 뜻(스프링이 직접 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.)빈 팩토리(bean factory)IoC를 담당하는 핵심 컨테이너를 가리킨다. 빈을 등록하고, 생성하고, 조회하고 돌려주..
1. POJO 기반의 구성스프링은 다른 프레임워크들과 달리 관계를 구성할 때 별도의 API을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어있음 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미함개발자는 가장 일반적인 형태로 코드를 작성하고, 실행할 수 있기 때문에 생산성에서도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수있다는 장점이 생김 2. 의존성 주입(DI)를 통한 객체 간의 관계 구성"제어의 역행"메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미 개발자는 필요한 부분을 개발해서 '끼워 넣기'의 형태로 개발하고, 실행하면 됨제어의 역전은 스프링에서만 있는 개념일까?=> 제..
AOP(Asepect Oriented Programming) 기능기존의 비즈니스로직 외 작성해야 하는 코드를 별도로 분리함으로써 개발자가 좀 더 비즈니스 로직에만 집중해서 처리할 수 있는 방법을 제공=> 비즈니스로직이 아닌 공통적이고 반족적인 코드를 처리하기 위한 방법 AOP와 트랜잭션 처리를 통해서 다음과 같은 기능을 완성 할 수 있음개발자가 원하는 코드를 실행하는데 얼마나 시간이 소모되는지 쉽게 알 수 있다.개발자는 메소드에 전달되는 파라미터나 리턴 값에 대해서 로그를 기록할 수 있다.데이터베이스 상에서 트랜잭션 처리를 설정하여, 성공하는 경우에만 모든 데이터가 완전하게 처리되는 방법 적용할 수 있다. AOP에서 'Aspect'란=> '비즈니스 로직은 아니지만, 반드시 해야하는 작업', '반드시 해야..
Controller에 요청이 들어오기전에 무엇인가를 수행한다는 기능만 보면 interceptor와 filter는 무척 비슷해 보인다. (전, 후처리기 역할을 수행한다.)위의 사진을 보면 차이점을 쉽게 알 수 있는데, 둘다 컨트롤러 전에 작업을 처리하는 용도로 사용되지만 호출되는 시점이 다르다.필터(Filter)는 dispatcherServlet으로 요청이 가기전에 실행되고인터셉터(Interceptor)는 Controller로 요청이 가기전에 실행이된다. FilterDispatcherServlet 앞단에서 정보 처리J2EE 표준스펙에 정의되어 있는 기능InterceptorDispatcherServlet에서 Handler(Controller)로 가기전에 정보 처리SpringFramework에서 자체적으로 제..
깡냉쓰
'프로그래밍 노트/SPRING' 카테고리의 글 목록 (4 Page)