FrameWork란?
사전적 의미로는 틀 + 일 => 간단히 말해서 일을 잘하기 위한 틀을 제공합니다.
프레임워크(Framework)는 소프트웨어 개발을 위한 구조적인 틀이나 플랫폼을 제공하는 도구 또는 환경입니다.
소프트웨어 개발을 더 효율적이고 표준화된 방식으로 수행할 수 있도록 도와주는 일련의 라이브러리, 컴포넌트, API, 규칙 등의 집합입니다.
프레임워크는 애플리케이션의 구조와 흐름을 제어하고, 개발자에게 필요한 기본 기능과 추상화된 인터페이스를 제공합니다.
이를 통해 개발자는 핵심 비즈니스 로직에 집중할 수 있으며, 반복적이고 일상적인 작업을 자동화하거나 단순화할 수 있습니다.
또한, 프레임워크는 개발자 간의 일관된 개발 방식과 코드 구조를 유지하고, 협업을 용이하게 합니다.
Java는 Spring Framework를 대표적으로 사용하고 있습니다.
Spring Framework란?
Java 애플리케이션 개발을 위한 오픈 소스 애플리케이션 프레임워크입니다.
기업급 애플리케이션을 개발하기 위한 다양한 기능과 추상화 계층을 제공하여 개발자가 보다 효율적이고 유연한 방식으로 애플리케이션을 구축할 수 있도록 지원합니다.
Spring Framework의 주요 특징과 기능
- 제어의 역전 (IOC)
- 관점 지향 프로그래밍 (AOP)
- 웹 개발 지원
- 데이터 액세스 지원
- 보안과 인증 (Spring Security)
Spring IOC/DI, AOP, MVC, SpringBoot, SpringSecurity, SpringCloud 등의 기술 지원과 jUnit, MyBatis, Hibernate 등과 같은 프레임워크와의 통합을 지원합니다.
Spring Framework는 모듈화된 아키텍처로 구성되어 있으며, 필요한 기능을 선택적으로 사용할 수 있습니다.
이러한 모듈성은 개발자에게 유연성과 확장성을 제공하며, 다른 프레임워크나 라이브러리와의 통합도 용이합니다. 또한, 많은 개발자 커뮤니티와 자료가 존재하여 학습과 지원이 용이하며, 기업에서 널리 사용되는 Java 기반 애플리케이션 개발을 위한 강력한 도구로 평가받고 있습니다.
간단한 용어 정리
- library : 라이브러리 , 재사용 가능한 프로그램들의 모음
- jar : 자바프로그램 압축 확장자 (springboot application을 deploy 하기 위해 압축 )
- war : 자바 웹어플리케이션 확장자
- component : 독립적 기능단위로 부품화 되는 요소 Bean => 자바 컴포넌트, 스프링 컨테이너에서 관리하는 객체
- API : Application Programming Interface 응용 프로그램을 개발하기 위해 제공하는 인터페이스
IOC / DI
IOC란? (Inversion of Control 제어의 역전)
자신이 자동차를 운전하는데 자율주행 기능이 차를 제어하게 하는 것이 제어의 역전입니다. 자율 주행 기능이 운전을 도와주게 되면 자신은 차 안에서 다른 일을 또 할 수 있게 됩니다. (자율주행이 보급되면 아주 좋겠군요.)
제어의 역전 (Inversion of Control, IoC)은 소프트웨어 개발에서 객체의 생명주기와 의존성 관리에 대한 제어 권한을 프레임워크나 컨테이너에게 넘기는 개념입니다.
일반적으로 객체의 생성과 관리는 개발자에게 달려 있지만, IoC는 이를 역전시켜 프레임워크가 객체를 생성하고 관리하며 필요한 시점에 개발자에게 제어를 넘겨주는 방식입니다.
IoC의 핵심은 객체의 의존성을 직접 관리하지 않고, 객체 간의 의존성 주입(Dependency Injection, DI)을 통해 의존성을 해결하는 것입니다. 객체는 필요한 의존성을 직접 생성하지 않고, 외부에서 주입받아 사용합니다. 이를 통해 객체 간의 결합도를 낮추고, 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.
Spring에서 제어 역전
제어 역전에서 DI(의존성 주입)가 빠지면 조금 설명하기 애매하지만 뒤에 같이 설명하겠습니다.
Spring 컨테이너가 필요에 따라 개발자 대신 Bean들을 관리(제어)해주는 행위입니다.
저희가 이제 Java 개발할 때 새로운 객체를 new 메서드를 이용해서 생성하고 그러지 않았습니까?
Animal animal = new Animal();
이런 식으로 말이죠.
하지만 Spring에서는 xml 파일 또는 어노테이션 방식으로 스프링 컨테이너에 Bean(객체)를 등록하기만 하면, 스프링 컨테이너에서 Bean의 생명주기 (생성 -> 의존성 설정 -> 초기화 -> 소멸)를 전부 관리해 줍니다.
객체에 대한 제어권이 컨테이너로 역전되기 때문에 제어의 역전이라고 합니다.
장점
- 개발자는 객체 관리에 덜 신경 쓸 수 있게 되어 다른 부분에 더 집중할 수 있습니다.
- 느슨한 결합을 이용하여 객체 간 의존 관계를 쉽게 변경 가능합니다.
DI (Dependency Injection 의존성 주입)
어떤 객체에 스프링 컨테이너가 또 다른 객체와 의존성을 맺어주는 행위
의존성 주입을 하지 않은 예제
Car class
public class car {
}
Person class
public class Person{
private Car car;
public Person(){
car = new Car();
}
}
이렇게 직접 Person 클래스 내부에서 Car 객체를 생성하였기 때문에 의존성 주입을 받은 것이 아니라, Car 객체를 Person객체 안에서 생성한 것입니다.
기존에 IOC에서 보면 Spring Container에서 미리 만들어서 의존성을 주입한 것이 아닌 의존성을 스스로 만든 것입니다.
의존성 주입을 한 예제
public class car {
}
public class Person{
@Autowired
private Car car;
}
이렇게 Spring Container에서 객체를 알아서 생성해서 객체를 주입해 줍니다.
그림이 이게 맞는지 모르겠지만 애플리케이션 실행과 동시에 객체의 생성과 의존성 주입을 시작한다고 합니다.
소감
처음 배우는 것이라 생소한 느낌이 듭니다. 특히 객체를 제어하는 방식도 너무 다양해서 알아가야 할 것들이 참 많습니다.
다음 시간에는 xml 관련해서 들을 작성해 보려고 합니다. 아직 잘 모르지만 최대한 상세히 알아가 보도록 하겠습니다.
'코딩 개발 > Spring' 카테고리의 다른 글
Spring - @Configuration , @ComponentScan, @Repository, @Service, @Autowired (2) | 2023.07.07 |
---|---|
applicationContext.xml - @Component Annotation 사용하기 (0) | 2023.07.07 |
xml 파일을 이용한 제어의 역전(IOC)(applicationContext.xml, Maven) (0) | 2023.07.07 |
Eclipse 에서 Spring 사용하기 (0) | 2023.07.07 |
SOLID (객체 지향 설계 원칙) (0) | 2023.07.06 |