가장 대표적인 Java 기반의 오픈소스 애플리케이션 프레임워크
⛓️ 아니고 🌷 이다.
용수철(이 없어서 체인으로 대신함) 아니고 "봄"이다.
나뭇잎이 새싹을 의미하는 듯?!
Java 개발자들에게 겨울이 지나고 봄이 찾아왔다는 의미다.꽃샘추위가 더 추울지도...
기존의 자바 개발 방식에 비해 훨씬 간편하고 편리하게 개발 가능하다.
1. 스프링이란?
- 스프링이라고 많이 부르지만 정확한 표현은 "스프링 프레임워크(Spring Framework)"다.
- Java 기반의 오픈소스 애플리케이션 프레임워크다.
- 오픈소스 : 소스를 공개(오픈)해서 누구나 개발에 사용 가능
- 애플리케이션 : 응용 프로그램 또는 응용 소프트웨어
- 프레임워크 : 소프트웨어에서 사용 가능하도록 누군가 만들어 놓은 뼈대
- 기존에 비해 생산성, 품질 보증, 유지보수의 용이성의 면에서 뛰어나다.
- 한국 공공기관에서 웹 서비스를 개발할 때 권장하는 "전자정부 표준프레임워크"의 기반이다.
2. 스프링의 특징
2-1. 경량 컨테이너
- 크기와 부하의 측면에서 경량화되어 자바 객체를 직접 관리한다.
- jar 파일을 이용해서 모든 개발이 가능하다.
- 모든 객체의 생성, 소멸 같은 라이프 사이클을 관리하며 필요한 객체를 가져올 수 있다.
2-2. POJO (단순한 자바 오브젝트) 방식
- POJO : Plain Old Java Object 단순한 자바 오브젝트
- 별도의 API 없이 일반 자바 코드로 객체를 가져올 수 있다.
- 특별한 제한에 종속되지 않고 클래스 path를 필요로 하지 않는다.
- 기존에 Java EE 등 무거운 프레임워크를 사용하며,
그에 종속된 무거운 객체 사용에 반발하며 사용한 용어다.
- 자바의 객체지향적 특징을 살린 비지니스 로직의 충실한 개발이 가능하도록 한다.
예) ORM을 적용하고 싶다면 JPA를 통해서 사용해야 한다. Hibernate를 직접 의존하면 POJO가 아니다.
2-3. IoC (제어의 역전)
- IoC : Inversion of Control 제어의 역전 (제어 역행)
- 애플리케이션의 느슨한 결합을 도모한다.
- Spring에게 컨트롤의 제어권이 있어서 Spring이 사용자의 코드를 호출할 수 있다.
- 개발자가 제어하던 프로그램의 흐름, 객체의 생성, 소멸 등을
컨테이너가 제어하기 때문에 제어의 역전이라고 부른다.
2-4. DI (의존성 주입)
- DI : Dependency Injection 의존성 주입
- 각 서비스 간에 의존성이 존재할 경우, 프레임워크가 서로를 연결시켜준다.
- 의존성 : 한 객체가 다른 객체 없이 제대로 된 역할 수행 불가함
- 주입 : 외부에서 밀어 넣는 것
- DI의 장점
- 주입 받는 입장에서는 어떤 객체인지 신경 쓸 필요 없다.
- 어떤 객체에 의존하든 자신의 역할은 변하지 않는다.
- Spring의 DI
- ApplicationContext : 필요한 객체 생성, 필요한 객체 주입하는 역할
- Bean : ApplicationContext이 관리하는 객체 (스프링이 관리하는 객체)
- XML, 애노테이션 등 : 빈들의 의존관계를 처리하는 역할
- DI 방식 : 생성자 이용 (추천) / setter 메서드 이용 / 필드 주입 (비추)
2-5. AOP (관점 지향 프로그래밍)
- AOP : Aspect Oriented Programming 관점 지향 프로그래밍
- (쉬운 말) 반복적인 코드를 제거한다.
- (어려운 말) 횡단 관심사(흩어진 관심사)를 모듈로 분리하는 프로그래밍의 패러다임이다.
- 횡단 관심사 cross-concern : 대부분의 시스템이 공통으로 가지고 있는
보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분
- 횡단 관심사 cross-concern : 대부분의 시스템이 공통으로 가지고 있는
- 취지 : 흩어진 반복된 부분을 모듈화하고 핵심 비즈니스 로직에서 분리해 재사용하겠다.
- Spring의 AOP
- Bean에만 적용 가능하다.
- 프록시 패턴 기반의 AOP를 구현한다. == 외부에서 메서드를 호출할 때만 적용 가능하다.
2-6. 트랜잭션 관리
- 추상화된 트랜잭션 관리를 지원하며
설정파일(xml, java, property, 애노테이션 등)을 이용한 선언적인 방식 및
프로그래밍을 통한 방식을 모두 지원한다. - 트랜잭션 transaction : 하나의 작업을 수행하기 위한 데이터베이스의 연산들의 묶음으로,
데이터베이스에서 하나의 논리적인 작업 단위가 된다.
Reference
반응형
댓글