Spring 이란?
- 정확한 표현은 Spring Framework. Java에서 가장 많이 사용되는 Framework임.
- 의존성 주입(DI, Dependency Injection)과 제어 역전(IOC, Inversion of Control), 관점 지향 프로그래밍(AOP)이 가장 중요한 요소 => 이 요소들을 통해 느슨한 결합(Loose Coupling)을 달성할 수 있음. => Loose Coupling으로 개발한 Application들은 단위 테스트를 수행하기 용이함.
▷의존성 주입 (DI, Dependency Injection)
DI를 사용하지 않은 코드를 보자면
public class NoDIController {
private MyService service = new MyServiceImpl();
public String getHello() {
return service.getHello();
}
}
- Controller가 MyService 객체에 의존하게 됨. (객체가 없다면 이후의 logic들이 제대로 동작하지 않음)
- 위와 같이 객체의 Instance를 얻게되면 객체간의 결합도가 올라감.
- 따라서 단위테스트를 위한 Mock 객체를 사용할 수 없게 됨.
(Mock이란? 실제 객체를 다양한 조건때문에 제대로 구현하기 어려울 때 가짜 객체를 만들어 사용하는데 이것이 Mock 객체 / 테스트 작성을 위한 환경 구축이 어려운 경우나 테스트가 특정 경우 혹은 순간에 의존적인 경우, 시간이 걸리는 경우 등에 Mock 객체가 필요함. / Mock 객체 사용시 Test case 유지에 복잡성이 더해지기 때문에, 의존성이 적은 구조로 프로그래밍 해야함, 실제 객체로 작동을 해보았을 때 예상한 것처럼 정상 동작하지 않을 수 있음 => Mock은 실제 객체가 아닌 흉내내는 객체이기 떄문)
DI를 사용하는 코드
@Service
public class MyServiceImpl implements MyService {
@Override
public String getHello() {
return "Hello";
}
}
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService) {
this.myService = myService;
}
@GetMapping
public String getHello() {
return myService getHello();
}
}
- @Service, @Autowired annotation을 통해 MyService의 Instance를 얻음.
- 위와 같이 코드를 작성하면 단위테스트 상황에서 Service 객체를 Mock 객체로 대체하여 쉽게 테스트 할 수 있음.
▷관점 지향 프로그래밍 (AOP, Aspect of Oriented Programming)
- Spring Framework에서 제공하는 강력한 기능 중 하나임.
- AOP는 쉽게 말하자면, OOP를 보완하는 수단으로, 여러 곳에 쓰이는 공통 기능을 모듈화하여 필요한 곳에 연결함으로써 유지보수 또는 재사용에 용이하도록 하는 것을 의미함.
- AOP를 통해 기존 프로젝트에 다양한 기능을 logic 수정없이 추가 할 수 있음. -> 이런 개발 방식으로 결합도를 낮춘 개발이 가능
(Proxy Design Pattern, Crosscutting Concerns, 핵심적-부가적인 관점 등이 관련 있다 함)
Spring Framework의 대표적인 모듈
- 스프링 프레임워크는 다양한 기능을 갖고있고 그 기능들은 20개 가량의 모듈로 구성되어 있음
많이 사용되는 대표적인 모듈 : Spring JDBC, Spring MVC, Spring AOP, Spring ORM, Spring Test, Spring Expression Language
▷ Spring Boot
String Boot가 나오게 된 이유 :
- Spring Boot makes it easy to create stand-alone(자립), production-grade(상품으로 내놓을 수 있을 수준의) Spring based applications that you can "just run".
- Spring은 다양한 기능을 제공해주지만, 그 기능들을 사용하기 위한 설정에 많은 시간이 걸림. (Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory 등)
Spring Boot가 제공하는 기능 :
- 자동 설정 기능 (AutoConfiguration) 이용. / Application 개발에 필요한 모든 Dependency를 프레임워크에서 관리. / jar 파일이 클래스 패스에 있는 경우 Spring Boot는 Dispatcher Servlet으로 자동 구성됨. / Spring Boot는 미리 설정되어 있는 Starter 프로젝트를 제공. (어플리케이션을 개발하면서 사용되는 dependency들은 호환되는 버전으로 관리해줘야 하는데 이런 복잡도를 줄이기 위해 Spring Boot는 Starter로 호환되는 버전을 자동으로 관리) / xml 설정 없이 자바 코드를 통해 설정할 수 있음. / 모니터링 관리를 위한 Spring Actuator 제공. 서비스가 정상적으로 동작하는지 상태 모니터링 기능 제공. Spring Actuator는 Spring Boot에서 제공하는 상태 정보를 보다 쉽게 모니터링 할 수 있게 기능을 제공함.
'Spring' 카테고리의 다른 글
Get API 만드는 방법 노트 (0) | 2022.10.30 |
---|---|
MVC Pattern 노트 (0) | 2022.10.29 |
Maven - pom.xml 파일 노트 (0) | 2022.10.28 |
REST API 노트 (0) | 2022.10.27 |
Maven & Gradle 노트 (0) | 2022.10.26 |
댓글