스프링 프레임워크(Spring Framework)
자바에서 가장 많이 사용되는 프레임워크
의존성 주입(DI, Dependency Injection)과 제어역전(IOC, Inversion of Control), 관점 지향 프로그래밍(AOP)이 가장 중요한 요소이다.
위 요소들을 통해 느슨한 결합(Loose Coupling)을 달성할 수 있음
느슨한 결합으로 개발한 어플리케이션은 단위 테스트를 수행하기 용이함
의존성 주입(DI, Dependency Injection)
DI를 사용하지 않은 코드의 경우
- Controller는 'MyService'객체에 의존하게 됨
- 예제 코드 처럼 객체의 인스턴스를 얻게 되면 객체 간의 결합도가 올라감
- 이런 코드 작성은 단위테스트를 위해 Mock 객체를 사용할 수 없게 됨
DI를 사용하는 코드의 경우
- @Service, @Autowired 어노테이션을 통해 MyService의 인스턴스를 획득
- 위와 같이 코드를 작성하면 단위테스트 상황에서 Service 객체를 Mock객체로 대체하여 쉽게 테스트할 수 있음
관점 지향 프로그래밍(AOP, Aspect Oriented Programming)
스프링 프레임워크에서 제공하는 강력한 기능 중 하나
AOP는 OOP를 보완하는 수단으로 여러 곳에 쓰이는 공통 기능을 모듈화하여 필요한 곳에 연결함으로써 유지보수 또는 재사용에 용이하도록 하는 것을 의미
AOP를 통해 기존 프로젝트에 다양한 기능을 로직 수정 없이 추가할 수 있음
이런 개발 방식을 통해 결합도를 낮춘 개발이 가능함
- 추가로 알아보면 좋은 것
- 프록시 디자인 패턴
- 핵심적인 관점
- 부가적인 관점
- 흩어진 관심사 (Crosscutting Concerns)
스프링 부트가 나오게 된 이유
공식 사이트에 나와있는 글 인용
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
스프링 부트는 단지 실행만 하면 되는 스프링 기반의 어플리케이션을 쉽게 만들 수 있다.
스프링은 다양한 기능을 제공하고 있지만, 그 기능을 사용하기 위한 설정에 많은 시간이 걸림
스프링에서는 개발자가 직접 설정파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 함
그리고 특정한 구성을 위해 추가적인 라이브러리와 설정이 필요
예) Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory 등
Spring Boot는 개발자가 보다 쉽게 Spring 애플리케이션을 개발하고자 하는 경우 빠르고 간단하게 사용할 수 있음
스프링 부트가 제공하는 기능
스프링 부트는 자동 설정(Auto Configuration)을 이용
- 어플리케이션 개발에 필요한 모든 디펜던시(Dependency)를 프레임워에서 관리
- jar파일이 클래스 패스에 있는 경우 스프링 부트는 Dispatcher Servlet으로 자동 구성됨
- 스프링 부트는 미리 설정되어 있는 Starter 프로젝트를 제공
- xml 설정 없이 자바 코드를 통해 설정할 수 있음
어플리케이션을 개발하면서 사용되는 디펜던시들은 호환되는 버전으로 관리해줘야 함
- 이런 복잡도를 줄이기 위해 스프링 부트는 SpringBoot-Starter를 제공하여 자동으로 호환되는 버전을 관리
스프링 부트 프로젝트의 의존성 관리
spring boot starter dependency를 통해 다양한 패키지를 수용하고 있음
이를 통해 개발자는 dependency 관리 (호환성 체크 등)에 대해 고려할 필요가 없어짐
모니터링 관리를 위한 스프링 액추에이터 (Spring Actuator) 제공
- 서비스가 정상적으로 동작하는지 상태 모니터링 제공
- 스프링 액추에이터는 스프링 부트에서 제공하는 상태 정보를 보다 쉽게 모니터링 할 수 있게 기능을 제공
스프링 부트에는 톰캣 서버가 내장되어 있어서 WAS가 따로 필요 없음
스프링 부트 프로젝트의 starter 디펜던시
spring-boot-starter-web-service : SOAP 웹 서비스
spring-boot-starter-web : RESTful 응용 프로그램
spring-boot-starter-test : 단위 테스트. 통합 테스트
spring-boot-starter-jdbc : 기본적인 JDBC
spring-boot-starter-security : 스프링 시큐리티 (인증, 권한)
spring-boot-starter-data-jpa : Spring Data JPA(Hibernate)
spring-boot-starter-cache : 캐시
'프레임워크 > Spring' 카테고리의 다른 글
lombok Getter Setter Undefined 어노테이션 인식 안될때 (1) | 2023.12.31 |
---|---|
Spring error Web server failed to start. Port 8080 was already in use. (0) | 2023.11.14 |