Spring Framework란?
- Java 기반의 오픈소스 Backend 프레임워크
- 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션
→ 엔터프라이즈 : 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 환경
Spring Framework의 특징
DI(Dependency Injection)
- 개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것
- 객체 간 결합이 느슨하면 코드의 재사용성 증가, 단위 테스트가 용이
IoC(Invesion of Control)
- 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것을 의미
- Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고 프레임워크가 대신 수행
- 제어의 역전이라는 말이 어려울 수 있는데 기존에는 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만 프레임워크가 대신 해준다는 의미
AOP(Aspect Oriented Programming)
- AOP는 핵심 기능을 제외한 부수적인 기능을 프레임워크가 제공하는 특징
- 예를 들어 Spring 프로젝트에 security를 적용하거나 logging 등을 추가하고 싶을 때 기존 비즈니스 로직을 건들지 않고 AOP로 추가 가능
중복 코드 제거
- 예를 들어 JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡한데 이를 모두 제거
다른 프레임워크와의 통합
- JUnit, Mockito와 같은 유닛 테스트 프레임워크와 통합이 간단
- 이를 통해 개발하는 프로그램의 품질이 향상
Spring Framework vs Spring Boot Framework
1. Dependency
- Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해줘야 함
- 버전이 호환되지 않을 경우 에러가 발생하기도 함
- Spring Framework에서 web에 대한 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>
- Spring Boot Framework에서 web에 대한 dependency를 추가하는 코드
implementation 'org.springframework.boot:spring-boot-starter-web'
- 빌드 툴을 Gradle로 사용하는 경우 위와 같이 build.gradle파일에 dependency를 추가해주면 Spring Boot로 웹 개발을 할 때 필요한 모든 dependency를 자동으로 추가하고 관리
- 또 다른 예시로는 Spring Framework에서 test 프레임워크를 사용하고자 하는 경우 Spring Test, JUnit, Hamcrest, Mockito 등 모든 라이브러리를 추가해줘야 하지만, Spring Boot에서는 spring-boot-starter-test 만 추가
2. Configuration
- Spring Framework의 경우 configuration 설정을 할 때도 매우 길고 모든 어노테이션 및 빈 등록 등을 설정
- Spring Boot Framework의 경우 application.properties파일이나 application.yml파일에 설정
- Spring Framework에서 Thymeleaf 템플릿을 사용하려면 다음과 같은 코드를 작성
@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);
}
}
- Spring Boot Framework에서 Thymeleaf를 사용하려면 다음과 같은 코드를 작성
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf
3. Spring Boot의 강력한 AutoConfiguration
- Spring Framework와 달리 Spring Boot에는 AutoConfiguration이라는 것이 존재
- Spring Boot로 실행할 수 있는 애플리케이션을 만들기 시작하면 클래스에 @SpringBootApplication 어노테이션을 확인 가능
- 이 어노테이션을 제거하고 프로그램을 실행하면 일반적인 자바 프로그램과 동일하게 실행
- 해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행 가능
- 어노테이션 : 주석, 추후 특정 어노테이션을 처리하는 컴파일러가 어노테이션을 읽으면 알맞은 처리를 진행
- 기능이 포함된 건 아니고 프로그램 곳곳에 분산된 기능을 한 곳에 모아서 처리하고 싶을 때 사용하기도 함
- @SpringBootApplication 상세 내용
@ComponentScan
- @Component, @Controller, @Repository, @Service라는 어노테이션이 붙어있는 객체들을 스캔해 자동으로 Bean에 등록
@EnableAutoConfiguration
- @ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록
- 사전에 정의한 라이브러리들은 다음 경로에서 확인 가능
경로 : External Libraries → spring-boot-autoconfigure → META_INF → spring.factories
단, 사전에 정의한 라이브러리라고 전부 Bean에 등록되지는 않음
- spring.factories파일을 보면 다음을 확인 가능
- EnableAutoConfiguration을 키로 하는 외부 의존성들을 확인 가능
- 이 의존성들을 모두 스캔하며 조건에 따라 의존성을 주입
4. 편리한 배포
- Spring Framework의 경우 war파일을 Web Application Server에 담아 배포
- Spring Boot Framework의 경우 Tomcat 이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포 가능
- Spring Framework로 WAS를 정하고 모든 설정을 마치고 배포를 하는 것보다 훨씬 간단한 배포 방법
결론
- Spring Framework는 기존에 EJB(Enterprise Java Bean)를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있음
- Spring Boot Framework는 Spring Framework보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임워크
'Language > Spring' 카테고리의 다른 글
[Spring Boot] 이메일 인증 코드를 이용한 회원 가입 (0) | 2024.08.13 |
---|---|
[Spring Boot] 구글 이메일 인증 코드 발급 구현 (0) | 2024.08.13 |
JpaAuditing 사용 방법 및 예제 (0) | 2024.08.12 |
BeanFactory, ApplicationContext (0) | 2024.08.10 |
의존성 주입(DI), 제어의 역전(IoC) (0) | 2024.08.10 |