Spring
스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링이라고 불린다.
동적 웹사이트 개발하기 위해 여러 서비스를 제공한다.
대표적인 특징
1. DI ( Dependency Injection)
-> 개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 한다.
객체 간 결합이 느슨해지면 코드의 재사용성이 증가하고, 단위 테스트가 용이해짐!
2. IoC ( Inversion of Control )
-> 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것
Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행!
기존에는 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만,
프레임워크가 대신해준다는 의미이다. (제어의 역전)
3. AOP ( Aspect Oriented Programming )
-> 핵심 기능 제외한 부수적 기능을 프레임워크가 제공해준다.
ex) Spring 프로젝트에 security 적용하거나 logging 등을 추가..
기존 비즈니스 로직 건들지 않고 AOP로 추가 가능
4. 중복 코드 제거
JDBC와 같은 템플릿 사용시 중복되는 코드도 많고 복잡하다. 이를 모두 제거한다!
5. 다른 프레임워크와의 통합
JUnit, Mockito와 같은 유닛 테스트 프레임워크와 통합이 간단하다. => 개발하는 프로그램 품질 향상
Spring과 Spring Boot의 차이점
스프링 부트는 단독적이고 상용화 수준의 스픠링 기반 애플리케이션을 단지 실행할 수 있을 정도로 쉽게 만들었다
Spring, Spring Boot Framework 차이점
1. Dependency
Spring의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고,
모든 dependency에 대해 버전 관리도 하나하나 해줘야 한다
ex) Spring dependency 추가 코드
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.5</version>
</dependency>
(출처 https://www.baeldung.com/spring-vs-spring-boot)
Spring Boot는 보다 더 쉽게 설정하고, 버전 관리도 자동으로 해준다.
ex) Spring Boot web dependency 추가 코드
implementation 'org.springframework.boot:spring-boot-starter-web'
2. Configuration
Spring의 경우 Configuration 설정 매우 길고, 모든 어노테이션 및 빈 등록을 설정해줘야 한다.
Spring Boot의 경우 application.properties 파일이나 application.yml 파일에 설정하면 된다.
ex) Spring Thymeleaft 사용 예시 코드
@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver =
new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
}
(출처 https://www.baeldung.com/spring-vs-spring-boot)
ex) Spring Boot Thymeleaft 추가 코드
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf
3. AutoConfiguration
Spring Boot로 실행할 수 있는 애플리케이션을 만들기 시작하면 클래스에 @SpringBootApplication이라는 어노테이션을 확인할 수 있다.
이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행되며
해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행될 수 있다!
@Annotation: 주석, 추후 특정 어노테이션을 처리하는 컴파일러가 어노테이션을 읽으면 알맞은 처리 진행
기능이 포함된 건 아니고 프로그램 곳곳에 분산된 기능을 한 곳에 모아서 처리하고 싶을 때 사용
4. 편리한 배포
Spring로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포
Spring Boot의 경우, Tomcat, Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포 가능
Spring으로 WAS를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법이다!
결론
Spring은 기존에 EJB (Enterprise Java Bean) 를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해주고,
Spring Boot는 Spring보다 개발자가 개발에만 더욱 더 집중할 수 있도록 도와주는 프레임워크다!
Spring Boot 짱
'Backend > springboot' 카테고리의 다른 글
[Spring Boot] JPA & DB 설정 및 동작 확인 (0) | 2022.10.02 |
---|---|
[Spring Boot] H2 Database (0) | 2022.10.02 |
[Spring Boot] View 템플릿 Thymeleaf (0) | 2022.10.02 |
[Spring Boot] 라이브러리 살펴보기 (0) | 2022.10.02 |
[Spring Boot] 프로젝트 생성 및 환경설정 (1) | 2022.10.02 |