스프링(Spring) 정의
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
Spring은 Java 기반의 오픈소스 애플리케이션 프레임워크입니다. Spring은 경량화되어 있어서 프레임워크 자체의 부하가 적습니다. 또한 다양한 모듈로 구성되어 있으며 각각의 모듈은 어플리케이션 개발에 필요한 다양한 기능을 제공합니다. 모듈화되어 있기 때문에 필요한 모듈만 선택해서 사용할 수 있습니다. 또한, 다양한 환경에서 사용할 수 있도록 지원하며, 다양한 개발 도구와 통합이 가능합니다.
Spring은 주요 기능으로는 IoC/DI, AOP, MVC, JDBC, ORM, 트랜잭션 처리, RESTful 웹 서비스를 지원 등이 있습니다. 이러한 기능을 활용하여 개발자는 애플리케이션 개발에 집중할 수 있습니다. 또한, Spring은 대규모 애플리케이션 개발에 필요한 여러가지 기능을 제공하며, 보안, 트랜잭션, 메시징, 배치처리 등의 다양한 기능도 제공합니다.
스프링이 나온 목적
Spring Framework가 등장하기 전에 EJB(Enterprise Java Beans)가 사용되었습니다. EJB는 자바 표준으로 나와 많은 이들이 사용하고 기능도 좋았지만, 사용이 복잡하고 너무 느린 문제 등이 있었습니다. 2002년 Rod Johnson은 EJB의 복잡성과 비효율성에 대한 문제를 지적하고 새로운 개발 방법론을 제시하고 Spring Framework가 탄생하였습니다.
Spring Framework가 EJB와 달리 복잡성을 해결한 방법 전략은 바로 자바라는 객체지향 기술 그 자체입니다. 스프링는 EJB 등과 같이 자바 언어의 객체지향 프로그래밍의 장점을 취하지 못하는 방식이 아닌 기본인 객체 지향에 충실한 설계 방식을 따르려하였습니다.
스프링은 기술적인 복잡함을 효과적으로 다루게 해주는 기법으로 DI를 사용하였습니다. 서비스 추상화, AOP와 같은 스프링의 기술은 DI를 바탕으로 두고 있고, DI 역시 객체지향 설계 기술이 없이는 의미가 없습니다.
DI란 기술이라기보다는 유연하게 확장하기 위해 오브젝트 설계를 하다 보면 자연스럽게 적용하게 되는 객체지향 프로그래밍 기법입니다. 스프링은 단지 이것을 더욱 편하고 쉽게 사용하도록 도와줍니다.
객체지향 언어를 쓴다고 해서 자연스럽게 객체지향 설계 및 프로그래밍을 할 수 있는 것이 아닙니다. 많은 사람들이 객체지향적 방식을 놓치는 경우가 많은데 EJB 역시 이 부분을 간과한 것이 문제였습니다. DI는 자연스럽게 객체지향적 설계와 개발을 하도록 이끌어주는 역할을 합니다. DI를 의식하여 설계를 하다보면 오브젝트를 설계할 때 DI를 적용할 후보가 없는지, 바뀔만한 것이 없는지 등을 생각하면서 객체 지향적 사고를 하게되고, DI를 적용하면서 오브젝트를 분리하고, 인터페이스를 도입하면서 자연스레 객체지향 원칙을 지키게 될 것입니다.
모든 스프링의 기술과 전략은 객체지향이라는 자바 언어가 가진 강력함을 잘 이용할 수 있게 하는 도구 입니다. 따라서 단순히 스프링을 이해하고 잘 활용하기 위해서는 객체지향에 대한 이해가 더욱 중요합니다.
POJO: Plain Old Java Object
POJO(Plain Old Java Object)는 간단한 자바 객체를 의미합니다.
굳이 일반적인 자바 객체를 POJO라는 명칭을 붙인 이유는 다음과 같습니다. 마틴 파울러라는 사람은 왜 개발자들은 단순한 자바 객체 그 자체를 이용하여 어플리케이션의 비즈니스 로직을 구현할 수 있는데 복잡하고 제한이 많은 기술인 EJB를 사용하는 것일까에 대한 의문을 가졌습니다. 일반적인 자바 객체는 EJB와 같은 그럴싸한 이름이 없기 때문이라 생각하고 일반적인 자바 객체에 POJO라는 명칭을 붙여주었습니다.
POJO의 가장 큰 장점은 자바 기술에 종속되지 않아 다른 프레임워크나 라이브러리에서도 쉽게 재사용할 수 있다는 것입니다. 또한 POJO는 테스트하기 쉽고, 유지보수가 용이하며, 불필요한 기능이나 의존성이 없기 때문에 가볍고 빠릅니다. 스프링 프레임워크는 POJO를 기반으로 하여 만들어졌으며, POJO를 이용한 개발을 권장합니다.
스프링에서 POJO는 스프링의 핵심 기술 중 하나인 DI(Dependency Injection)를 구현하는 데 사용됩니다.
DI는 객체 간의 의존 관계를 설정하고, 이를 런타임 시에 관리하는 것을 의미합니다. DI를 사용하면 객체 간의 결합도를 낮출 수 있으며, 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다. POJO는 DI를 구현하는 데 필요한 setter 메서드나 생성자를 가지고 있기 때문에, DI를 사용하기에 적합한 객체입니다.
스프링에서 POJO를 사용하면 객체의 생명주기와 의존 관계를 스프링 컨테이너에게 위임할 수 있습니다. 이를 통해 개발자는 객체 생성과 소멸, 의존 객체의 주입 등의 작업을 직접 수행하지 않아도 되며, 스프링 컨테이너가 객체의 라이프사이클과 의존 관계를 관리하게 됩니다. 이를 통해 개발자는 코드의 복잡성을 낮출 수 있고, 스프링의 다양한 기능을 쉽게 활용할 수 있습니다.
'Spring Framework' 카테고리의 다른 글
Spring IoC 컨테이너 계층구조 및 구성(웹 어플리케이션) (0) | 2022.08.20 |
---|---|
Spring 스프링 컨테이너(IoC 컨테이너)와 빈(Bean) (0) | 2022.08.20 |
Spring 스프링의 핵심 이해: IoC/DI, AOP, PSA (0) | 2022.08.17 |
Spring 스프링(Spring) 설치하기 (feat. Eclipse) (0) | 2022.07.27 |
Spring AOP(Aspect Oriented Programming) (+AOP 실습) (0) | 2022.07.26 |