본문 바로가기
Spring

Spring & Spring Boot 노트

by SuldenLion 2022. 10. 25.
반응형

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

댓글