스프링은 순수 객체 지향 언어의 강력한 특징을 살려내는 프레임워크다.
프레임워크는 제어의 역전(IOC=Inversion Of Control) 개념이 적용되어야 한다. 라이브러리 형태로 적용되나, 동작 방식이 좀 다르다.
여전히 입문자들에게는 Spring은 겨울이었다. 서버 세팅, JSP 세팅 등 개발을 위해 할 게 너무 많았다. 그래서 만들어진 Spring Boot,
번잡한 설정을 줄이자.
스프링부트는 가동하게 되면 Tomcat이라는 server가 가동이 되고, starter dependency가 기본적으로 세팅되어있다.
또한, 더이상 XML이 꼭 필요하진 않게 만들어준다.
스프링 부트는 스프링 프레임워크 기반 위에 돌아간다. 세팅이 기본적으로 되어있어 좀 더 간단할 뿐이다.
이 모든 걸 합쳐서 빌드, 라고 하고, 이를 효율적으로 개발할 수 있게 해주는 것이 빌드툴.
자바의 빌드툴로는 메이븐, Gradle 등이 있다.
이클립스, 인텔리제이는 IDE다. 빌드툴보다도 편집기, 디버깅, 협업 등 더 많은 기능이 있는 Integrated Development Environment다.
근데 인텔리제이에서 만든 빌드툴이 다른 IDE에서 안 돌아갈 수도 있다. Maven, Gradle에서 만들면 어떤 개발환경이어도 작업할 수가 있다.
Spring Boot는 Maven, Gradle을 기본적으로 지원한다.
Maven: 빌드하는데 꽤 많은 시간이 걸린다. 하나만 수정해도 처음부터 끝까지 다 컴파일함.
Gradle: 변경된 내역만 추적해서 빌드해줌 (대형 프로젝트이며, 잦은 변경이 있을 시 사용)
Main Class를 한 줄도 바꾸지 않고도 새로운 메세지 객체를 받아 동작하는 것이 가능하다. 의존하는 객체를 Spring Container가 자동 주입해주고 있는 것이다. 그래서 이 걸 사용한다. 직접 Main Class 아무것도 바꾸지 않아도 새로운 메세지 객체(Bean)를 받아 동작한다.
특정 타입의 Bean을 주입할 땐 하나의 Bean이 있어야 한다.
Bean의 이름을 특별히 지정해주지 않았을 땐, class의 이름을 사용해 그 이름이 설정된다.
@Configuration과 @Bean을 사용하면 Spring이 자동으로 Bean을 생성하고 관리하여 의존성 주입을 할 수 있게 해준다.
SpringApplication.run(DIMain03.class, args);
@Configuration
public class Config03 {
@Bean
public Score score1() {
return new Score(100, 80, 75, "Good job!");
}
@Bean
public Student stu1() {
return new Student("Donghee", 34, score1());
}
}
@Autowired
Score scoreA; // Config03에서 생성된 "score1" Bean이 주입됨
@Autowired
Student stuA; // Config03에서 생성된 "stu1" Bean이 주입됨