애플리케이션 개발 시 필요한 기본 구조와 뼈대를 제공하는 틀 (집)
제공되는 구조에 맞게 코딩을 진행하면 되기 때문에 개발 시간이 줄고, 효율적인 개발을
할 수 있음. 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나
뼈대, 틀을 라이브러리 형태로 제공함
자주 사용 되는 기능을 모아둔 코드의 집합 (집에 들어가는 가구)
개발자 또는 회사에서 개발한 기능 (코드)를 라이브러리로 만들어서 배포
→ 해당 기능이 필요한 개발자가 라이브러리를 자신의 코드에 추가해서 사용
서로 다른 소프트웨어 구성 요소 간의 상호 작용을 정의하는 규약
API를 통해 서로 다른 프로그램들이 데이터를 주고받거나 기능을 호출하여 통신할 수 있음
자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로
간단하게 스프링(Spring)이라고도 불림
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공함
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는
전자정부 표준 프레임워크(Spring MVC Project 기반 프레임워크)의 기반 기술로서 사용
▹ Spring 공식 페이지 : https://spring.io/
| IOC (Inversion of Control) 제어 반전 | 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는 뜻으로 객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도함. 개발자가 객체를 생성하고, 직접 호출하지 않고, Spring Container가 만들어둔 객체를 필요할 때 얻어와서 사용. 클래스간의 결합도를 낮추고 유지보수성을 향상시킬 수 있음. |
| DI (Dependency Injection) 의존성 주입 | 설정 파일(XML)이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 객체를 생성하지 않고 Spring Container가 만들어둔 객체를 필요한 위치에서 주입함. (직접 객체를 만들지 않고 Spring이 만든 객체를 얻어와 사용 == 의존) |
| POJO (Plain Old Java Object) | Spring은 J2EE, EJB와 같은 특정 기술이나 라이브러리의 내용을 상속 받아 클래스를 구현하지 않고, 일반적인 자바 객체(POJO)를 사용할 수 있도록 지원함. 이를 통해 개발자는 프레임워크 학습 곡선을 낮추고 코드의 가독성을 높일 수 있음. - J2EE(Java2 Enterprise Edition) : Servlet, JSP 레벨의 서버 프로그래밍 인터페이스 - EJB(Enterprise Java Bean) : 쉽게 웹 개발이 가능한 기술, 객체지향 장점을 포기해야 하는 문제점 발생 |
| AOP (Aspect Oriented Programming) 관점 지향 프로그래밍 | 로깅, 보안, 트랜잭션 관리 등 공통적인 관심사를 분리하여 코드 중복을 줄이고 유지보수성을 향상 시키는 기능을 지원함. |
| Spring MVC | MVC(Model, View, Controller) 디자인 패턴을 적용할 수 있는 어노테이션을 지원하고, IOC / DI를 이용해 의존 관계를 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축 할 수 있음. |
| PSA (Portable Service Abstraction) | 스프링은 다른 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공하여 특정 기술에 종속되지 않으면서 다양한 기술 스택을 쉽게 사용할 수 있음 (외부 라이브러리, API 등 외부 기술을 쉽게 이용할 수 있도록 여러 인터페이스, 추상 클래스를 제공) |



Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View와 서비스를 수행하기 위한 개발 로직 부분을 나누는 MVC2 패턴을 지원함.



ViewResolver -> 스프링부트에서 자동 설정이 되어있음
Controller -> 받은 리턴값 -> 뷰 결정
Controller 메서드 여러 개..
메서드 반환형(String) -> 응답 페이지 경로