그 해답을 스프링 공식사이트에서 찾아보았다.

🗯️ “We use a lot of the tools that come with the Spring framework and reap the benefits of having a lot of the out of the box solutions, and not having to worry about writing a ton of additional code—so that really saves us some time and energy.”
“우리는 Spring 프레임워크에 포함된 많은 도구를 사용하여, 기본 제공 솔루션의 이점을 누리고 있습니다. 덕분에 많은 추가 코드를 작성할 필요가 없어 시간과 에너지를 절약할 수 있습니다.”
스프링을 통해 더 빠르고, 쉽고, 안전하게 Java 프로그래밍을 할 수 있다 👩🏻💻
그렇다면 이제 스프링의 주요 특징 5가지를 알아보자 🧐
1️⃣ 제어의 역전 | IoC (Inverse of Control)
제어의 역전은 스프링 프레임워크에서 객체 생성과 의존성 관리를 프레임워크가 담당하여 개발자가 직접 제어하지 않게 하는 디자인 패턴이다.
스프링 프레임워크에서는 이를 위해 스프링 컨테이너라는 것을 사용한다.
개발자는 스프링 컨테이너에게 필요한 객체를 직접 생성하지 않고, 설정 파일(XML 또는 Java Config)이나 어노테이션을 통해 객체의 생성 방식과 의존성을 정의한다.
👍🏻 이로 인해 개발자는 객체 생성과 의존성 관리에 직접 신경쓰지 않아도 되며, 코드의 유지보수성과 테스트 용이성이 높아진다!
2️⃣ 의존성 주입 | DI (Dependency Injection)
의존성 주입은 마치 자동차 공장에서 자동차를 만들 때 필요한 부품들을 공장에서 제공해주는 것과 비슷한 개념이다. 자동차를 만들 때 엔진, 바퀴, 시트 등의 부품이 필요할텐데, 이 부품들을 직접 만들거나 조립하지 않고, 공장에서 필요한 부품들을 제공받을 것이다.
마찬가지로 프로그램에서 객체들도 서로 의존 관계가 있다. 예를 들어, 서비스 객체가 데이터베이스와 연결할 때 데이터베이스 접속 객체가 필요한 경우가 있다.
👍🏻 의존성 주입을 사용하면 우리는 직접 데이터베이스 접속 객체를 만들거나 설정하지 않고, 스프링 프레임워크에게 필요한 객체를 요청하여 주입받는다. 스프링은 설정 파일이나 어노테이션을 통해 필요한 객체들을 관리하고, 필요한 시점에 객체를 생성하고 주입해준다.
3️⃣ 관점 지향 프로그래밍 | AOP (Aspect-Oriented Programming)
AOP는 코드의 특정 지점(예: 메서드 실행 전 후)에서 추가적인 기능을 모듈화하는 프로그래밍 기법으로, 여러 메서드에서 반복되는 로깅이나 트랜잭션 관리를 한 곳에서 관리할 수 있다.
여러 개의 서비스 클래스가 있고 각각의 메서드에서 특정 작업 이전과 이후에 추가적인 기능을 실행하고 싶다고 가정해 보자.
일반적으로는 각 서비스 클래스의 메서드에 로깅 코드를 반복해서 추가해야 하지만, AOP를 사용하면 이 로깅 코드를 별도의 공통 모듈로 분리할 수 있다.
이 모듈을 Aspect라고 부르며, 모든 서비스 메서드에 자동으로 적용된다.
👍🏻 따라서 각 서비스 클래스를 수정하지 않고도 로깅과 같은 공통 기능을 효율적으로 관리할 수 있다.
💥 스프링의 중요한 특징 중 하나라고 생각하는 것이 있는데, 바로 스프링이 웹 어플리케이션 개발을 위해 MVC 디자인 패턴을 지원한다는 것이다.
MVC 패턴을 통해 개발자는 코드를 모델, 뷰, 컨트롤러로 구분하여 관리할 수 있으며, 각 부분을 독립적으로 테스트하고 유지보수할 수 있다.
MVC 패턴의 자세한 내용은 다음 포스팅에서 다루도록 하겠다! 👏🏻