Spring

스프링이 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 웹을 통한 DAO 테스트의 문제점DAO뿐만 아니라 서비스 클래스, 컨트롤러, JSP 뷰 등 모든 레이어의 기능을 만들고 나서야 테스트가 가능하다는 점이 가장 큰 문제였다.사실 테스트하고 싶었떤 건 UserDao 였는데 다른 계층의 코드와 컴포넌트, 심지어 서버의 설정 상태까지 모두 테스트에 영향을 줄 수 있기 때문에 이러한 방식으로 테스트하는 것은 번거롭고, 오류가 있을 때 빠르고 정확하게 대응하기가 힘들다는 문제가 있다. 테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직하다.(단위 테스트)=> 안하게되면 이유를 찾기위해서 디버거를 돌려가며 스텝별로 확인해야하는 수고를 하게될지도 모른다. 테스트를 위한 ..
스프링 컨테이너는 초기화 과정에서 몇 가지 빈을 기본적으로 등록해준다. 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에서 다시 일부 설정정보를 별도의 파일로 분리해두면 유용할 때가 있다. 서버환..
IoC/DI를 위한 빈 설정 메타정보 작성IoC컨테이너의 기본적인 역할은 코드를 대신해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리하는 것이다.(POJO로 만들어진 애플리케이션 클래스와 서비스 오브젝트들이 그 대상) 빈을 만들기 위한 설정 메타정보는 파일이나 애노테이션 같은 리소스로부터 전용 리더를 통해 BeanDefinition 타입의 오브젝트로 변환된다. 이 BeanDefinition정보를 IoC컨테이너가 활용하게 된다.빈 등록은 빈 메타정보를 작성해서 컨테이너에게 건네주면 된다. => XML 문서, 프로퍼티 파일, 소스코드 애노테이션과 같은 외부 리소스로 빈 메타정보를 작성하고 이를 적절한 리더나 변환기를 통해 애플리케이션 컨텍스트가 사용할 수 있는 정보로 변환해주는 방법을 사용 빈 메타정보 ..
1. POJO 기반의 구성스프링은 다른 프레임워크들과 달리 관계를 구성할 때 별도의 API을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어있음 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미함개발자는 가장 일반적인 형태로 코드를 작성하고, 실행할 수 있기 때문에 생산성에서도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수있다는 장점이 생김 2. 의존성 주입(DI)를 통한 객체 간의 관계 구성"제어의 역행"메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미 개발자는 필요한 부분을 개발해서 '끼워 넣기'의 형태로 개발하고, 실행하면 됨제어의 역전은 스프링에서만 있는 개념일까?=> 제..
스프링을 이용한 파일업로드 프로젝트=> https://github.com/ksh901016/file-upload 웹에서 파일 업로드는 일반적으로 "multipart/form-data"라는 방식으로 데이터를 전송하며,스프링MVC에서는 multipart형식으로 전송된 데이터를 핸들링할 수 있는 기능을 지원해준다.=> 스프링 MultipartResolver 사용 우선 사용할, multipartResolver를 빈으로 등록해 준다.(dispatcher-context.xml에 등록)123 Colored by Color Scriptercs스프링이 기본으로 제공하는 MultipartResolver는 CommonsMultipartResolver 이다.CommonsMultipartResolver는 CommonsFileU..
AOP(Asepect Oriented Programming) 기능기존의 비즈니스로직 외 작성해야 하는 코드를 별도로 분리함으로써 개발자가 좀 더 비즈니스 로직에만 집중해서 처리할 수 있는 방법을 제공=> 비즈니스로직이 아닌 공통적이고 반족적인 코드를 처리하기 위한 방법 AOP와 트랜잭션 처리를 통해서 다음과 같은 기능을 완성 할 수 있음개발자가 원하는 코드를 실행하는데 얼마나 시간이 소모되는지 쉽게 알 수 있다.개발자는 메소드에 전달되는 파라미터나 리턴 값에 대해서 로그를 기록할 수 있다.데이터베이스 상에서 트랜잭션 처리를 설정하여, 성공하는 경우에만 모든 데이터가 완전하게 처리되는 방법 적용할 수 있다. AOP에서 'Aspect'란=> '비즈니스 로직은 아니지만, 반드시 해야하는 작업', '반드시 해야..
Controller에 요청이 들어오기전에 무엇인가를 수행한다는 기능만 보면 interceptor와 filter는 무척 비슷해 보인다. (전, 후처리기 역할을 수행한다.)위의 사진을 보면 차이점을 쉽게 알 수 있는데, 둘다 컨트롤러 전에 작업을 처리하는 용도로 사용되지만 호출되는 시점이 다르다.필터(Filter)는 dispatcherServlet으로 요청이 가기전에 실행되고인터셉터(Interceptor)는 Controller로 요청이 가기전에 실행이된다. FilterDispatcherServlet 앞단에서 정보 처리J2EE 표준스펙에 정의되어 있는 기능InterceptorDispatcherServlet에서 Handler(Controller)로 가기전에 정보 처리SpringFramework에서 자체적으로 제..
Spring framework Annotation 개념 XML : 분리- 결합도를 낮추고 유지보수성을 높이기 위해 xml로 설정하였으나 xml이 너무 많아지면 오히려 유지보수성이 낮아지는 아이러니한 상황 발생- 유지보수성에 방점- 시스템 전체에 영향을 주고 이후에 변경 가능성이 있는 것은 xml로 설정.https://medium.com/@2xel/spring-framework-annotation-%EA%B0%9C%EB%85%90-c26c15716538 @Component 태그를 추가하면 어노테이션이 적용된 클래스를 빈으로 등록하게된다. 태그는 어노테이션과 관련해서 BeanPostProcessor를 함께 등록한다.@Required(RequiredAnnotationPostProcessor)@Autowired..
깡냉쓰
'Spring' 태그의 글 목록 (3 Page)