[Spring]

[Spring] 스프링이란?

Jarvis2304 2025. 2. 11. 22:41

 

▶스프링(Spring) 이란?

- 스프링은 자바 프레임워크이다.

- 프레임워크란 "뼈대나 근간을 이루는 코드들의 묶음"

 

▷프레임 워크(Framework)를 사용하는 이유는?

-개발자는 각 개개인의 능력 차이가 큰 직종이고, 개발자 구성에 따라 프로젝트의 결과 역시 큰 차이를 낳는다.

-프레임워크는 이런 상황을 극복하기 위한 코드의 결과물이다.

-프레임워크를 이용한다는 의미는 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 된다.

 

 

 

▷왜 스프링 프레임 워크를 사용할까?

1) 경량 프레임워크(light-weight Framework)

-기존 엔터프라이즈급 프레임워크들의 가장 큰 문제점은 복잡성이다.

-다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다 보니 하나의 기능을 위해서 너무 많은 구조가 필요한 상태가 되었다.

-이러한 복잡성을 해결하기 위해서 나온 경량화된 프레임워크가 스프링이다.

-일반적인 Java의 클래스와 인터페이스를 이용하는 구조이기 때문에 진입장벽이 높지 않았고, EJB로 대표되는 복잡한 프레임워크에 비해 가볍기 때문에 빠르게 엔터프라이즈급의 시스템을 작성할 수 있었다.

 

2) 프로젝트의 전체 구조를 설계할때 유용한 프레임워크

3) 다른 프레임워크들의 포용

4) 개발 생산성과 개발도구의 지원

 

▶Spring의 핵심 기술

1) 의존성 주입(DI; Dependency Injection), Spring DI 컨테이너

-의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미

-의존성은 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것.

-흔히 A 객체가 B 객체 없이 동작이 불가능한 상황을 "A가 B에 의존적이다"라고 표현

-주입(Injection)을 직역하자면 외부에서 "밀어 넣는 것"을 의미

 

-의존성과 주입을 결합해서 생각해보면 의존성 주입(DI)이란 "어떤 객체가 필요한 객체를 외부에서 밀어 넣는다"라는 의미가 됨

 

▷첫번째 그림은 스프링을 사용하지 않으며, A객체가 필요한 B, C 객체를 직접 생성하는 방법이다.

두번째 그림은 스프링을 사용하며, A객체가 필요한 B, C 객체를 Setter()또는 생성자를 통해 의존성을 주입 받는 방법이다.

-이 두 가지 방법의 차이는 필요한 객체를 얻기 위해서 주체가 능동적인지 수동적인지에 대한 문제이다.

-의존성 주입 방식을 사용하려면, 의존성이 필요한 객체에 필요한 객체를 찾아서 "주입"하는 역할을 하는 "Spring DI 컨테이너"라는 존재가 필요함

 

 

 

▷그렇다면 왜 "외부에서 객체를 주입하는 방식"을 사용할까?

-"주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없다", "어떤 객체 의존하든 자신의 역할은 변하지 않는다"와 같은 의미로 볼 수 있음

-결국 Spring의 의존성 주입(DI)과 DI 컨테이너 기술은 객체 지향의 "다형성"과  좋은 객체 지향 설계의 5가지 원칙 중"OCP", "DIP" 를 가능하게 지원해준다.

 

 

 

 

 

2) 관점 지향 프로그래밍(AOP; Aspect Oriented Programming)

-좋은 개발환경의 중요 원칙 중 하나는 "개발자가 비즈니스 로직에만 집중할 수 있게 한다"이다.

-이 목표를 이루기 위해서는 몇 가지 중요한 원칙이 있지만, 가장 쉽게 생각할 수 있는 것은 "반복적인 코드의 제거"이다

-스프링은 프레임워크를 이용한 개발에도 이러한 반복적인 코드르 줄이고, 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공한다.

 

-대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같은 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 "횡단 관심사(cross-concern)"라고 한다.

-스프링은 이런 횡단 관심사를 분리해서 제작하는 것이 가능하다.

-AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.

 

● AOP의 장점

1) 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있다.

2) 각 프로젝트마다 다른 관심사를 적용할 때, 코드의 수정을 최소화할 수 있다.

3) 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다.

 

 

 

▷물론 이외에도 Spring은 스프링 MVC, 스프링 WebFlux, 스프링 시큐리티, 트랜잭션, JDBC, ORM 지원, XML 지원, 스프링 기반 테스트 지원 등 다양한 기술을 지원한다

 

 

 

 

 

▶Spring의 진짜 핵심은?

- 스프링은 바로 자바 언어 기반 프레임워크이다. 자바 언어의 가장 큰 특징은 "객체 지향 언어"이다.

- 즉, Spring은 객체 지향 언어가 가진 가장 강력한 특징을 살려내는 프레임워크이며, 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 것이 "스프링 프레임워크(Spring Framework)" 이다.

 

 

 

참고자료