EJB라는 기술을 통해 웹 애플리케이션을 개발하였습니다. 하지만, 개발자들에게 있어서 이 기술은 여러 가지 복잡성으로 인해 사용하기 꽤나 까다로웠다. 그래서 이러한 단점을 보완하기 위한 기술로 나온 것이 스프링입니다.
전통적인 EJB라는 겨울을 넘어 새로운 시작이라는 뜻으로 스프링이라고 명칭을 짓게 되었습니다.
라이브러리와 혼동될수 도 있습니다. 프레임워크는 뼈대나 기반 구조를 뜻하고, IOC 개념이 적용된 대표적인 기술입니다. 소프트웨어에서는 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합이라 할 수 있으며, 프로그래머가 완성시키는 작업을 해야된다.
라이브러리는 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미합니다. 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있습니다.
애플리케이션의 주도권(?)을 누가 가지고 있냐라는 차이가 있습니다. 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣지만, 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다가 쓰는 도구라고 할 수 있습니다.
자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
애플리케이션 프레임워크
라이브러리나 프레임워크는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어진다. 손쉽게 MVC 구조로 만들 수 있게 해준다. 이와 달리 애플리케이션 프레임워크는 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크
5가지의 특징을 가집니다.
경량 컨테이너로서 자바 객체를 직접 관리합니다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다.
Plain Old Java Object로, 평범한 자바 객체 를 뜻합니다. 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미한다. Java 코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다.
-> 자유롭게 객체지향적 설계를 구현 가능, 높은 생산성과 유연한 테스트
DI는 객체지향 프로그래밍의 강력한 지원군이다.
의존성 주입은 제어의 역전이 일어나는 것을 전제로 스프링 내부의 객체들 간의 관계를 관리할 때 사용한다. 의존성 중비은 특정 개체에 필요한 객체를 외부에서 결정하여 연결시키는 것을 말한다. 자바에서는 인터페이스를 사용하려 의존적인 관계를 처리한다.
주입의 방법
1. 필드 주입
2. setter 주입
3. 생성자 주입
관심사의 분리를 아주 스마트하고 깔끔하게 처리해준다.
AOP를 이용해서 반복적인 코드(보안, 로그, 트랜잭션)를 줄이고 개발자가 비즈니스 로직에 집중하도록 만들어준다.
공통 관심사항 : 비즈니스 로직은 아니지만 보안, 로그, 트랜잭션과 같이 반드시 처리가 필요한 부분
핵심 관심사항 : 시스템의 핵심 가치와 목적이 그대로 드러난 관심영역

@Aspect 어노테이션을 붙여주어 AOP로 활용할 객체를 알린다.
웹서버는 정적인 데이터를 처리하는 서버로 단순 이미지 HTML을 처리하는 서버이며, WAS는 동적인 데이터를 처리하는 서버로 DB 연동 데이터 조작등과 같은 처리를 WAS에서 한다.
스프링 Boot 기본 내장 WAS는 Tomcat이다.
스프링 Boot의 내장 WAS를 꼭사용해야 하는 것은 아니고, 자유롭게 변경해 사용 가능하다.
참고
https://steady-coding.tistory.com/457
https://joychae.tistory.com/27