Spring
JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용하며 Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크입니다.
- 애플리케이션 프레임워크 : 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크
- 경량급 프레임워크 : 단순한 웹컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용합니다.
- 엔터프라이즈 개발 용이 : 개발자가 복잡하고 실수하기 쉬운 Low Level(보안, 인증, 트랜잭션 etc)에 신경 쓰지 않고 business Logic 개발에 전념할 수 있게 제공합니다.
프레임워크(Frame Work)
프레임워크는 어떠한 목적을 달성하기 위해, 복잡하게 얽혀 있는 문제를 쉽게 해결하기 위한 약속이자 도구이며, 소프트웨어 개발에 하나의 뼈대 역활을 합니다. 또한 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음입니다.
라이브러리와 프레임워크의 차이점
1. 라이브러리
- 개발자가 개발을 진행하다. 라이브러리의 필요한 순간을 인지하고 라이브러리를 추가한다.
- 소프트웨어를 개발 할 때 사용되는 자원의 모임, 필요 할때 자유롭게 사용하는 도구입니다.
2. 프레임워크
- 개발을 수월하게 하기위해 제공된 소프트웨어 개발 환경입니다. 사용자가 세세하게 신경쓰지 않아도 기능을 확장하거나 유지보수 할 수 있게 클래스의 구조나 데이터를 처리하는 절차 등에 대한 설계 등에 대한 구조를 제공받는 가이드라인이라 할 수 있습니다.
- 라이브러리 + 설계도 의 개념으로 의자를 만든다고 가정 할때 의자를 만들 수 있는 공방의 개념입니다. 의자를 만드는 설계도, 망치나 못 같은 도구, 어느 정도 자동화된 도구 선택 방식 등이라 할 수 있습니다.
Spring 주요특징
1. IoC(Inversion of Control, 제어 반전)
- 개발자는 JAVA 코딩시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성, 소멸시킨다.
여기서 IoC란 객체의 생성부터 소멸까지 개발자가 아닌 스프링컨테이너가 대신 해주는 것이다 - 제어권이 개발자가 아닌 IoC에 있으며, IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸 하며 생명주기를 관리하는 것이다.
2. DI(Dependency Injection, 의존성 주입)
- 프로그램에서 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의 되는 방식이다.
- 코드 간의 재사용을 높이고, 소스코드를 다양한 곳에 사용하며 모듈 간의 결합도를 낮출 수 있다.
- 대표적으로 라이브러리나 API, 프레임워크를 연동 할 때 연결하는 소스코드를 직접 작성하는게 아닌 외부 파일을 연결해 불러오는 방식이다.
3. AOP(Aspect Object Programming, 관점 지향 프로그래밍)
- 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리 할 수 있다.
- 각각의 클래스가 있다고 가정하자. 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많다. 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않다. 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋다.
- 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.
4. POJO(Plain Old Java Object) 방식
- POJO는 Java EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.
- 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.
- 즉, getter/setter를 가진 단순한 자바 오브젝트를 말한다.
'코딩 공부 > web & Java' 카테고리의 다른 글
[Spring] Dispatcher-Servlet (0) | 2022.12.17 |
---|---|
[MyBatis] MyBatis (0) | 2022.12.14 |
[Java] Maven (0) | 2022.11.28 |
[Web] Component (0) | 2022.11.18 |
[Java/JSP] JSTL(JavaServer Pages Standard Tag Library) (0) | 2022.11.13 |