Java "엔터프라이즈 개발에 이용"되는 "오픈소스" "경량급" "애플리케이션 프레임워크"
애플리케이션 프레임워크 : 특정 계층이나 기술 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크
경량급 프레임워크 : 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다.
엔터프라이즈 개발 용이 : 개발자가 실수하기 쉬운 보안, 인증, 트랜잭션 등 low level의 개발에 신경쓰지 않고 비지니스 로직에만 전념할 수 있도록 해준다.
오픈 소스 : 이 모든 걸 무료로!
AOP
(Aspect Oriented Programming; 관점지향 프로그래밍) : 애플리케이션 로직을 담당하는 코드에 남아있는 기술 관련 코드를 분리해서 별도의 모듈로 관리하게 해주는 기술.
DI
(Dependency Injection; 의존성 주입) : DI는 유연하게 확장 가능한 객체를 만들어 두고 그 의존 관계는 외부에서 동적으로 설정하는 방식이다. 모듈간의 결합도를 낮추고 소스코드를 다양한 곳에서 재사용할 수 있다.
A객체가 B, C 객체를 New 생성자를 통해서 직접 생성한다면 모듈간의 결합도가 높아진다. Spring이 제공하는 DI는 A객체가 외부에서 생성된 B, C 객체를 setter()를 통해서 가져올수 있도록 한다.
A객체에서 다른 객체를 사용(의존)할 때, A 객체에서 직접 생성하지 않고 외부(IoC 컨테이너*)에서 생성된 B, C 객체를 주입시켜 setter나 생성자를 통해 사용한다. 이 때, IoC컨테이너에 들어있는 객체를 Bean
이라고 부르며, 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸까지 생명주기를 관장하는 역할을 Bean 컨테이너가 담당한다.
IoC
(Inversion of Control; 제어의 역전)
IoC는 메소드나 객체의 호출작업을 개발자가 결정하지 않고 외부에서 결정한다.(제어의 역전)
기존의 개체가 만들어지고 실행되는 워크플로우와 IoC 도입이후 변경된 흐름의 변화는 다음과 같습니다.
기존 : 객체생성 -> 의존성 객체 생성(클래스 내부) -> 의존성 객체 메소드 호출
변경 : 객체생성-> 의존성 객체 주입(제어는 스프링이 수행) -> 의존성 객체 메소드 호출
따라서 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
스프링이 모든 Bean을 스프링이 실행될 때, 전부 만들어두고 필요한 곳에 주입을 시켜주는 방식이라 Bean들은 모두 싱글톤 패턴*을 가집니다.
싱글톤 패턴?
싱글톤 패턴이란 JVM에서 클래스의 객체가 단 하나만 존재하게 하는 디자인 패턴이다. 웹 어플리케이션이 수많은 클라이언트에서 서비스를 요청받고 그 때마다 클래스 인스턴스를 생성하게 되면 JVM 메모리 사용량이 과하게 증가하고 서버 부하를 감당 할 수 없다.
이 때, 스프링 컨테이너는 싱글톤 객체를 생성, 관리하고 Java 코드로 일일히 구현하지 않고도 싱글톤 패턴을 사용할 수 있다.
스프링을 사용하기에 앞서 Spring을 100% 활용하기 위해 객체지향 프로그래밍을 이해해야 한다. 어렵지 않은 내용일 것이다.
Spring DI, IoC 정리
Spring(프레임워크)
[spring] 서블릿 컨테이너란?
[spring] 스프링의 DI/IoC 란?
[Spring] 싱글톤 패턴(Singleton Pattern) 개념, 싱글톤 컨테이너와 스프링 컨테이너 (1/2)
[Spring/스프링] 싱글톤패턴(Singleton pattern) 과 @Scope prototype
인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술)