
스프링 프레임워크란?
자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다.
스프링 프레임워크의 기초
프레임워크 vs 라이브러리 => 흐름의 결정권자 차이
프레임워크 => 정해진 흐름에 따라 개발
라이브러리 => 개발자가 직접 흐름을 결정
스프링 프레임워크의 기초
EJB와 POJO의 비교
- EJB (Enterprise Java Beans): 초기 자바 엔터프라이즈 애플리케이션 개발에서 널리 사용되었으나, 작은 기능에도 EJB의 상속이나 구현이 필요했기 때문에 가벼운 서비스 구현에는 비효율적이었습니다. 또한, 확장성 측면에서도 복잡성이 증가하는 문제가 있었습니다.
- POJO (Plain Old Java Object): 순수 자바 객체를 이용한 프로그래밍으로, 클래스나 라이브러리에 종속되지 않습니다. 이는 개발의 단순성과 유연성을 높이는 데 중점을 두고 있습니다.
스프링 특징
- POJO (Plain Old Java Object): EJB와 같은 무거운 프레임워크에 종속되지 않는 순수한 자바 객체. 이는 확장성과 유지 보수성을 향상시키기 위한 Java의 간단하고 가벼운 모델을 나타냅니다.
- DI (Dependency Injection): 의존성 주입은 객체가 직접 의존 객체를 생성하는 대신, 외부에서 의존 객체를 주입받는 패턴을 말합니다. 이를 통해 코드의 결합도를 낮추고, 유연성 및 재사용성을 향상시킵니다.
- IOC (Inversion of Control): 제어의 역전이라고도 하며, 프로그램의 흐름을 사용자가 아닌 프레임워크가 관리합니다. DI는 IOC의 한 형태로 볼 수 있습니다.
- AOP (Aspect-Oriented Programming): 관심사의 분리를 통해 횡단 관심사를 모듈화하는 프로그래밍 패러다임입니다. 이를 통해 코드의 중복을 줄이고 유지 보수를 쉽게 할 수 있습니다.
- SRP (Single Responsibility Principle): 한 클래스는 하나의 책임만 가져야 한다는 원칙입니다.
- DIP (Dependency Inversion Principle): 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 두 모듈 모두 추상화에 의존해야 한다는 원칙입니다.
- OCP (Open/Closed Principle): 소프트웨어 엔티티는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 원칙입니다.
스프링의 핵심 개념
- DI (Dependency Injection): 의존성 주입은 객체를 직접 생성하는 대신 외부에서 객체를 주입하는 방식을 사용하여, 클래스 간의 의존성을 관리합니다. 이는 의존 관계를 동적으로 변경할 수 있게 하여 유연성과 재사용성을 향상시킵니다.
- IOC (Inversion of Control): 제어의 역전 원칙으로, 객체의 생명 주기와 의존성 관리를 개발자가 아닌 프레임워크가 담당합니다.
- AOP (Aspect-Oriented Programming): 관심사를 분리하여 공통 기능을 여러 컴포넌트에 걸쳐 재사용할 수 있게 합니다. 예를 들어, 로깅이나 보안과 같은 기능을 중앙에서 관리하고, 애플리케이션의 다른 부분들에 적용할 수 있습니다.
객체 지향 프로그래밍 원칙
- SRP (Single Responsibility Principle): 각 클래스는 하나의 책임만 가져야 합니다.
- DIP (Dependency Inversion Principle): 고수준 모듈은 저수준 모듈의 구현이 아닌 추상화에 의존해야 합니다.
- OCP (Open/Closed Principle): 소프트웨어 엔티티는 확장에는 열려 있어야 하지만, 변경에는 닫혀 있어야 합니다.
생각
일반적으로 자바에서 A 클래스에서 B 클래스를 사용할 때
A 클래스에서 new를 사용하여 B 클래스의 새로운 객체를 생성한다.
이후 프로젝트를 완성한 후 B 클래스에 대한 수정이 있다면 어떻게 될까?
B클래스를 통해서 생성되고 사용된 객체를 모두 수정해야한다.
B클래스의 구조가 바뀌었기 때문에
이러한 방식은 객체 지향 방식에 크게 어긋난다.
이러한 클래스간의 강한 결합은 유지 보수 및 확장성에서 많은 문제를 야기시킬 수 있다.
이를 해결하기 위한 고민과 고민에 대한 결과가 DI, AOP이며 이를 POJO를 통해서 구현한 것이다.
이를 통해서 우리는 SRP, DIP, OCP 같은 객체 지향을 위한 원리를 지킬 수 있었고, 확장성과 안정성을 높힌 프로젝트를 진행할 수 있을 것이다.
결론
스프링은 이러한 원칙들을 기반으로 구축된 프레임워크로, 객체 지향 프로그래밍의 유연성과 확장성을 실제 애플리케이션 개발에 적용할 수 있게 한다. 이를 통해 개발자는 더 간단하고 관리하기 쉬운 코드를 작성할 수 있으며, 시스템 유지 보수 및 확장이 용이해질 수 있을 것이다.
'backend > Spring' 카테고리의 다른 글
Spring 프로젝트 파일 기본 구조 (0) | 2024.04.19 |
---|