자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로써 간단히 스프링이라고 한다.
SW개발에서 재사용 가능한 설계 패턴과 구성 요소를 제공하여 개발자의 작업을 단순화하고 생산성을 높이는 구조이다.
스프링 프레임워크는 이러한 프레임워크 중 하나로, 웹 개발 전반에 대한 작업 단순화 및 부가 기능을 제공해주는 도구이다.
제어의 역전
코드는 개발자가 제어하는 영역이었는데, 이것이 역전되어 개발자가 관리하지 않고 프레임워크가 대신 코드를 제어해준다.
(일부 코드가 개발자가 아닌 프레임워크에 의해 관리되고 실행된다)
의존성 주입
객체를 직접 생성하여 다른곳에 넘겨주어 사용하면서 의존성을 개발자가 직접 주입했는데, 스프링에서는 개발자가 직접 생성하지 않아도 스프링이 생성해줘서 넘겨주는 경우가 많이 생긴다.
클래스와 메소드가 많아지게 되면 관리의 편의를 위해 특정 코드들을 모듈화 하여 관리하고 런타임에 동적으로 부가기능을 주입한다.
일반적인 백엔드 프로그램을 만드는 방식 중 하나. 최근에는 MSA로 넘어가는 추세
DB작업을 위한 각종 기능을 프레임워크에서 편리하게 지원해 준다.
메인함수만 실행시켰고 메인함수에 Controller 객체를 생성하여 메소드를 사용한다고 명시하지 않았는데도 코드가 정상 작동한다.
Spring Boot가 @어노테이션을 감지하여 위와 같이 기본적으로 이루어져야하는 작업을 자동으로 실행해주는데 이는 위에서 설명한 의존성 주입 및 제어 역전의 대표적 예시이다.
스프링의 여러가지 프로젝트 중 하나.
스프링에서 설정이 필요했던 여러 사항을 기본값으로 설정하여 복잡함을 최소화 하고 생산성을 향상 시키기 위해 개발되어짐.
어노테이션을 명시하여 해당 어노테이션이 가지고 있는 다양한 기능들을 사용할 수 있음
(기존에는 상속을 받아 사용했어야 했는데, 더 간편해짐)
내장 서버
WAR파일을 배포할 필요 없이 내장된 Tomcat, Jetty, Unertow를 이용해 실행할 수 있다.
간단한 라이브러리 관리
사용 빈도가 잦은 라이브러리를 모아놓은 스타터 POM파일로 메이븐 설정이 쉬워진다.
자동 설정
더 이상 XML을 통한 기타 설정이 필요하지 않다.
Ultimate 버전이라면 Intellij 안에서 생성가능
Community 버전이라면 Spring Initializer를 검색하여 생성하고 다운로드
프로젝트 이름 및 언어, 빌드 도구등 설정 다양한 라이브러리에 대한 의존성 추가
Spring-Web에 Tomcat이 내장되어 있기 때문에,해당 의존성을 추가하고 프로젝트를 실행하면 자동으로 Tomcat이 실행된다.
src/main/java
클래스 파일을 모아 둔 곳
src/main/resources
xml, properties를 저장하는 곳
(1) static
css , js , 그림 등의 파일을 저장하는 곳
(2) templates
타임리프(thymeleaf) 형식 템플릿 파일(jsp 아님)을 저장하는 곳
스프링 부트에서는 jsp 파일이 아닌 thymeleaf 템플릿 엔진 사용을 권장한다.
물론 jsp를 이용할 수는 있지만, 따로 설정을 해 주어야 한다.
(3) application.properties
application.properties 파일은 스프링 부트 전체 프로젝트의 설정을 저장하는 곳
이 파일에 설정되어져 있는 정보를 최우선적으로 따른다.
(자바 파일에 설정되어져 있어도 이 application.properties 파일에 다른 설정이 저장되어져 있으면 의미가 없다)
3) src/test/java
JUnit 등 테스트 케이스의 자바 클래스 파일들을 저장하는 곳
빌드 도구로서, 프로젝트에서 사용하는 다양한 라이브러리들을 관리해주고(의존성 관리) 다양한 빌드 작업을 단순화 하여 프로젝트를 자동화 해준다.
Spring Boot는 위와같이 자동으로 의존성이 추가되는데, 프로젝트 최초 빌드시 해당 URL에 있는 라이브러리들을 다운받아 오기 때문에 인터넷 연결이 안되어 있으면 실행되지 않을 수 있다.
Maven은 상대적으로 예전 빌드 도구로, XML을 기반으로 작동하기 때문에(태그 기반) 문서의 길이가 길다.