일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 머신러닝야학
- 생활코딩 머신러닝야학
- 데이터베이스 개론
- CNN
- 야학
- 생활코딩 데이터베이스
- 생활코딩
- pandas
- 이것이 자바다
- 딥러닝
- JavaScript
- MySQL
- 파이썬
- Python
- 판다스
- 데이터베이스
- reshape
- Database
- 머신러닝(딥러닝)
- 개발자
- LeNet
- flatten
- 머신러닝
- 데이터베이서
- 연산자
- tensorflow
- Java
- 카카오클라우드스쿨2기
- Today
- Total
IT's 우
[Spring] Spring 이란? 본문
1. 스프링 정의
Spring 이란?
👉 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
- 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공
- POJO 기반의 구성으로 자바 코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다.
- DI(의존성 주입)을 통한 객체 관계 구성을 지원한다.
- AOP(횡단 관심사 분리) 지원
- MVC 구조로 계층이 분리되어 관리하기 수월하다.
- 배치 애플리케이션 스프링 배치가 있다.
2. 프레임워크(Framework)
👉 응용 프로그램이나 소프트웨어 솔루션 개발을 수월하기 위해 구조, 틀이 제공된 소프트웨어 환경
- 소프트웨어 개발에 하나의 뼈대 역할
- 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음이다.
- 기본적인 설계나 필요한 라이브러리는 알아서(의존성 주입 해주면) 할 테니 개발자는 개발 역량에 집중할 수 있다.
라이브러리와 프레임워크의 차이점
- 라이브러리
- 소프트웨어를 개발 할 때 사용되는 자원의 모임, 필요할 때 자유롭게 사용하는 도구
- 프레임워크
- 응용 프로그램이나 소프트웨어 솔루션 개발을 수월하기 위해 구조, 틀이 제공된 소프트웨어 환경
- 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는다. 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있다.
3. 스프링 프레임워크의 특징
1) IoC(Inversion of Control, 제어 반전)
👉 객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 의미
- 개발자는 JAVA 코딩 시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성, 소멸시킨다.
- 여기서 IoC란 객체의 생성부터 소멸까지 개발자가 아닌 스프링 컨테이너가 대신 해주는 것.
2) DI(Dependency Injection, 의존성 주입)
👉 스프링 프레임워크에서 지원하는 IoC의 형태
클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것
- 프로그램에서 구성 요소의 의존 관계가 소스코드 내부가 아닌
- 외부의 설정 파일을 통해 정의 되는 방식
- 장점
- 스프링 자체에서 설정을 통해 연관 관계를 맺어줌으로써 객체 간 결합도를 낮춰준다.
- 클래스의 재사용성을 높이고, 유지보수가 편리해진다.
- 의존성 주입으로 인해 stub, mock 객체를 사용해 unit 테스트의 이점이 생긴다.
- 단점
- 의존성 주입을 위한 선행 작업이 필요해 간단한 프로그램에서는 번거롭다.
- 코드 추적이 어렵다.
2023.07.18 - [분류 전체보기] - [Spring] IoC, DI
[Spring] IoC, DI
주입방식 을 먼저 알고 가보자! 수정자 주입 @Service public class UserService { private UserRepository userRepository; private MemberService memberService; @Autowired public void setUserRepository(UserRepository userRepository) { this.userRe
kjk04021.tistory.com
3) AOP(Aspect Object Programming, 관점 지향 프로그래밍)
👉 관점 지향 프로그래밍으로 공통 관심 사항과 핵심 관리 사항을 분리하는 것을 의미
- 소스 코드에서 여러 번 반복해서 사용하는 코드(흩어진 관심사)를 Aspect로 모듈화 하여 핵심 로직에서 분리해 재사용하는 것이라고 볼 수 있다.
- 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법.
- 특정 로직(로그, 성능테스트, 권한)을 모든 메서드에 적용하고 싶을 때, 일일이 추가하는 것이 아니라 로직을 만들어 적용할 수 있다.
- 따라서, 비즈니스 로직 앞/뒤에 공통 관심 사항을 수행해 중복 코드를 줄인다.
AOP 적용 방식
- 컴파일 시점
- .java 파일을 컴파일러를 통해 .class를 만드는 시점에 부가 기능 로직을 추가
- 모든 시점에 적용 가능
- AspectJ가 제공하는 특별한 컴파이럴를 사용해야 하기 때문에 특별한 컴파일러가 필요한 점과 복잡하다는 단점이 있다.
- 클래스 로딩 시점
- .class 파일을 JVM 내부의 클래스 로더에 보관하기 전에 조작하여 부가 기능 로직 추가
- 모든 지점에 적용 가능
- 특별한 옵션과 클래스 로더 조작기를 지정해야 하므로 운영하기 어렵다.
- 런타임 시점
- 스프링이 사용하는 방식
- 컴파일이 끝나고 클래스 로더에 이미 다 올라가 자바가 실행된 다음에 동작하는 런타임 방식
- 실제 대상 코드는 그대로 유지되고 프록시를 통해 부가 기능이 적용
- 프록시는 메서드 오버라이딩 개념으로 동작하기 때문에 메서드에만 적용 가능 → 스프링 빈에만 AOP를 적용 가능
- 특별한 컴파일러나, 복잡한 옵션, 클래스 로더 조작기를 사용하지 않아도 스프링만 있으면 AOP를 적용할 수 있기 때문에 스프링 AOP는 런타임 방식을 사용 가능.
4) POJO(Plain Old Java Object) 방식
- POJO는 JAVA EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.
- 평범한 구식 자바 객체로, 프레임워크 인터페이스나 클래스를 구현하거나 확장하지 않는 단순 클래스를 의미.
- JAVA에서 제공하는 API 외에는 종속되지 않아 코드가 간결하고 테스트 자동화에 유리하다.
- Spring에서는 도메인과 비즈니스 로직을 수행하는 대상이 POJO 대상이 될 수 있다.
- 별도의 프레임워크 없이 JAVA EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기본 라이브러리를 지원하기 용이하고, 객체가 가볍다.
- 즉, getter.setter를 가진 단순한 자바 오브젝트를 말한다.
Spring Boot Framework와 Spring Framework의 차이점
👉 Spring Framework는 기존에 EJB를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해 주고, Spring Boot Framework는 Spring Framework보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임워크입니다.
Spring Framework
자바 EE 어플리케이션을 빌드할 수 있는 오픈소스 경량 프레임워크이다.
Spring Boot
spring + boot(strap). 스프링 부트는 기존 스프링 프레임워크 위에 구축되었다. 스프링 부트를 사용하면 독립 실행형(stand-alone) 프로덕션 등급(production-grade) 스프링 기반 애플리케이션을 쉽게 만들 수 있다.
스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 돕는다.
첫 번째 차이점, Dependency
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의 경우 dependency를 Spring Framework보다 쉽게 설정해 줄 수 있습니다. 버전 관리도 자동으로 해줍니다.
다음 예시는 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 만 추가해 주면 됩니다.
두 번째 차이점, Configuration
Spring Framework의 경우 configuration 설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등록을 설정해줘야 합니다.
@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는 application.properties파일이나 application.yml파일에 설정하면 됩니다.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf
세 번째 차이점, 편리한 배포
Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포했습니다.
Spring Boot Framework의 경우, Tomcat이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포할 수 있습니다.
Spring Framework로 WAS를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법입니다.
출처
https://velog.io/@alghrksl/Spring-Spring-이란-무엇인가
https://webclub.tistory.com/458
https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/Spring %26 JPA.md
https://yamyam-spaghetti.tistory.com/56#spring framework-1
'CS > Spring & JPA' 카테고리의 다른 글
[Spring] Annotation (0) | 2023.07.24 |
---|---|
[Spring] 람다식(Lambda Expression) (0) | 2023.07.19 |
[Spring] IoC, DI (0) | 2023.07.18 |
[Spring] 스프링 컨테이너(Spring Container) (0) | 2023.07.18 |
[Spring] MVC 패턴 (0) | 2023.06.27 |