스프링은 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로 가능하도록 제작되어 있다.
일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에 사용할 수 있다.
이것이 중요한 이유는 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않다는 것 이다.
생산성에도 유리하며, 테스트 작업도 좀 더 유연하게 할 수 있다는 장점이 있다.
의존성(Dependency)란?
하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다.
스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해준다.
따라서 스프링을 이용하면 개발자들은 객체와 객체를 분리해서 생성하고, 이러한 객체를 엮는 작업을 하는 형태이다.
ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라는 용어로 부르고, 빈과 빈 사이의 의존관계를 처리하는
방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있다.
좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다' 이다.
가장 쉽게 생각할 수 있는 것은 '반복적인 코드의 제거'이다.
반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'이라고 한다.
스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하다.
AOP(Aspect Oriented Programming)은 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.
개발자는 AOP를 통해 3가지가 가능하게 되었다.
- 핵심 비즈니스 로직에만 집중해서 코드 개발 가능
- 각 프로젝트마다 다른 관심사를 적용할 때
코드의 수정을 최소화- 원하는 관심사의 유지보수가 수월한 코드 구성 가능
Model, View, Controller의 약자로 세가지의 역할로 구분된 개발 방법론이다.
사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달한다.
사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후 그 요청에 맞는 데이터를 Model에 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다. Model과 View의 중재자 역할을 한다.
어플리케이션의 정보,데이터를 나타낸다. Data/정보의 가공을 책임지는 컴포넌트이다. Model은 DTO와 DAO로 분류할수있다.
Controller에서 전달받은 데이터 등을 이용하여 client가 보는 화면을 만드는 부분이다.