profile image

L o a d i n g . . .

결론

1. 스프링은 자바 기반 어플리케이션을 만드는데 사용, 스프링 부트는 주로 REST API 개발할 때 사용

2. 특정 프로젝트에서 필수적인 종속성 구성 필요 시 Spring

3. 일반적인 종속성 구성으로 구현이 가능한 프로젝트라면 Spring Boot


스프링 (Spring) 이란?

- 정확한 표현으로는 스프링 프레임워크 (Spring Framework)

- 의존성 주입 (DI, Dependeny Injection)과 제어 역전 (IOC, Inversion of Control), 관점 지향 프로그래밍 (AOP)이 가장 중요한 요소

- 위 요소들을 통해 느슨한 결합 (Loose Coupling)을 달성할 수 있음

- 위와 같이 느슨한 결합으로 개발한 어플리케이션은 단위 테스트를 수행하기 용이함


의존성 주입

의존성 사용 X, 예제 코드

- 위 코드는 DI를 사용하지 않은 코드

- Controller는 'MyService' 객체에 의존하게 됨

// new 라는 키워드를 통해서 객체를 초기화해준게 특징적

// 서비스를 사용하기 위해서 객체를 초기화 해준거라서 이 객체가 없으면 이후의 코드들이 제대로 동작하지 않게 되는데 이것이 의존하게 된다는 뜻

- 예제 코드처럼 객체의 인스턴스를 얻게 되면 객체 간의 결합도가 올라감

// Controller가 직접 객체를 생성한 것이라서 결합도가 올라갈 수 밖에 없음

- 이런 코드 작성은 단위 테스트를 위해 Mock 객체를 사용할 수 없게 됨

 

의존성 사용 O, 예제 코드

- 위 코드는 DI를 사용하는 코드

- @Service, @Autowired 어노테이션을 통해서 MyService의 인스턴스를 획득

// myService 객체를 생성하고 @Autowired 어노테이션을 통해서 의존성 주입함

- 위와 같이 코드를 작성하면 단위테스트 상황에서 Service 객체를 Mock 객체로 대체하여 쉽게 테스트 가능

// new 키워드를 사용하지 않고, 스프링 컨테이너를 통해서 의존성을 주입함


관점 지행 프로그래밍 (AOP, Aspect Oriented Programming)

- 스프링 프레임워크에서 제공하는 강력한 기능 중 하나

- OOP를 보완하는 수단으로, 여러 곳에 쓰이는 공통 기능을 모듈화하여 필요한 곳에 연결함으로써 유지보수 또는 재사용에 용이하도록 하는 것을 의미

- AOP를 통해 기존 프로젝트에 다양한 기능을 로직 수정 없이 추가할 수 있음

- 이런 개발 방식을 통해 결합도를 낮춘 개발이 가능함

// 알아보면 좋은 것: 프록시 디자인 패턴, 핵심적인 관점, 부가적인 관점, 흩어진 관심사 (Crosscutting Concerns)


스프링 프레임 워크의 대표적 모듈

- 스프링 프레임워크는 다양한 기능이 존재

- 그 기능들은 약 20개의 모듈로 구성되어 있음

- 많이 사용되는 대표적인 모듈

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring Test
  • Spring Expression Language (SpEL)

스프링 부트가 나오게 된 이유

- 스프링 부트는 단지 실행만 하면 되는 스프링 기반의 어플리케이션을 쉽게 만들 수 있음

- 스프링은 다양한 기능을 제공하고 있지만, 그 기능을 사용하기 위한 설정에 많은 시간이 걸림

- 예) Transcation Manager, Hibernate Datasource, Entity Manager, Session Factory 등


스프링 부트가 제공하는 기능

- 스프링 부트는 자동설정 (AutoConfiguration)을 이용

  • 어플리케이션 개발에 필요한 모든 의존성(Dependency)를 프레임워크에서 관리
  • jar 파일이 클래스 패스에 있는 경우, 스프링 부트는 Dispatcher Servlet으로 자동 구성 됨
  • 스프링 부트는 미리 설정되어 있는 Starter 프로젝트를 제공
  • xml 설정 없이 자바 코드를 통해 설정 가능

- 어플리케이션을 개발하면서 사용되는 의존성들은 호환되는 버전으로 관리해줘야 함

  • 이런 복잡도를 줄이기 위해 스프링 부트는 SpringBoot-Starter를 제공하여 자동으로 호환되는 버전을 관리

- 모니터링 관리를 위한 스프링 액추에이터 (Spring Actuator) 제공

  • 서비스가 정상적으로 동작하는지 상태 모니터링 기능 제공
  • 스프링 액추에이터는 스프링 부트에서 제공하는 상태 정보를 보다 쉽게 모니터링 할 수 있게 기능을 제공

스프링 부트 프로젝트의 의존성 관리

- spring boot starter dependency 를 통해 다양한 패지키를 수용하고 있음

- 이를 통해 개발자는 dependency 관리 (호환성 체크 등)에 대해 고려할 필요가 없어짐


스프링 부트 프로젝트의 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: 캐시


참고

1. https://www.youtube.com/watch?v=YSsl5-q2BR4&t=150s - 어라운드 허브 스튜디오

2. https://incomeplus.tistory.com/344

3. https://yamyam-spaghetti.tistory.com/56

복사했습니다!