먼저 Spring이란,
Java/Kotlin 기반의 웹 프레임 워크, 03년 6월에 최초 공개. 20년 12월 기준 최신버전은 5.3.2. 이를 간편하게 설정할 수 있도록 도와주는 서브 프로젝트 스프링부트(Springboot)가 있으며, 현재는 부트 위주로 기능이 추가되고 있다.
Spring vs Spring boot
https://jojoldu.tistory.com/43
SpringBoot의 깨알같은 팁
소개 이번에 출간된 스프링부트 코딩 공작소를 읽고나서 해당 내용을 정리도 할겸, 기존에 SpringBoot에 대해서 깨알같이 사용하던 내용들도 포함해서 한번에 정리하게 되었다. 스프링 부트 코딩
jojoldu.tistory.com
'스프링'이라는 이름의 유래는 이전 Java EE(엔터프라이즈 에디션)의 스펙을 구현한 EJB(엔터프라이즈 자바빈)가 복잡도가 증가해서 성능이 느렸던 것을 탈피, EJB 시절을 "겨울"에 빗대어 겨울 후 "봄"으로 새로운 시작한다는 걸 의미하는 스프링이 되었다.
JVM에서 작동, Apache 라이센스 2.0을 따르는 오픈소스 프레임워크.
국내에서 커진 이유는 한국 전자정부표준프레임워크의 기반 기술이며, 한국정보화진흥원에서 공공기관의 웹 서비스 제공시 스프링을 권장하고 있기 때문이다. 대한민국에서는 Java / Spring이면 취업가능하다고 하는 이유
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션.
엔터프라이즈급 개발이란 뜻대로만 풀이하면 기업을 대상으로 하는 개발. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로 부터 행해지는 거대한 규모의 환경을 엔터프라이즈 환경.
Spirng Framework는 경량 컨테이너로 자바 객체를 담고 직접 관리합니다. 객체의 생성 및 소멸 그리고 라이프 사이클을관리하며 언제든 Spring 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있습니다.
이는 Spirng이 IOC 기반의 Framework임을 의미합니다.
Spring 하면 튀어나와야되는 특징
* POJO(Plain Old Java Object) 방식 : Java EE의 EJB를 사용하며 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하면 나타난 용어. 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다.
* AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 : 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있음. AspectJ를 포함하여 사용할 수 있고, 스프링에서 지원하는 실행에 조합하는 방식도 지원. 이 분리 관리한다는 개념이 처음에 이해하기 어려운데, 추상/부모/클래스나 인터페이스로 관리된다는 게 아니라 모듈을 관리해주는 모듈을 상하/인터페이스 관계없이 따로 마련한다는 개념에 가깝다. 쉽게 얘기하자면 군대에서 보급품을 받는다고 가정할때, 상급부대(연대, 사단)에서 보급품을 내려받는 게 아니라, 국군복지단이나 군수사령부에서 직접 가져다 주는걸 생각해보면 쉽다. 당연히 군수사령부 예하부대 사람들도 대대 소속이므로 상하 관계가 없지만 보금품에 한해서만 배부해주는 것. 전공자들을 위해 설명하자면 C언어에서 중복 할당을 줄이기 위해 간접적으로 값을 가리키는 포인터로 가리키는데, Spring에서는 반복할당을 줄이기 위해 포인터 대신 스프링 어노테이션을 사용하는것으로 보면 된다.
* DI(Dependency Injection) 의존성 주입 : 프로그래밍에서 구성요소 간의 의존 관계가 내부가 아닌 외부에서 설정을 통해 정의되는 방식. 코드 재사용율을 높이며 소스코드를 다양한 곳에 사용할 수 있으며 모듈간 결합도도 낮춘다. 계층, 서비스 간에 의존성이 존재하는 경우 스프링 프레임워크가 서로 연결시켜준다.
* IoC(Inversion of Control) 제어 역전 : 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리 코드를 호출해서 이용했다. 제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉 제어권이 프레임워크에 있어서 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출한다.
: 흔히 IoC를 DL과 DI에 의해 구현된다 하는데, 여기서 DI란 위에 나온 의존성 주입이고, DL(Dependency Lookup)이란 의존성 검색으로 컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 빈을 저장하는데 저장소에 저장되어 있는 개발자들이 컨테이너에서 제공하는 API 를 이용하여 사용하고자 하는 빈을 검색하는 방법.
* 생명주기 관리 : 스프링 프레임 워크는 Java 객체의 생성, 소멸을 직접 관리하여 필요한 객체만 사용할 수 있다.
스프링 프레임워크 모듈 설명
* Core : 제어 역전(IoC)과 의존성주입(DI) 기능을 제공. 제어 역전은 전체적인 프로세스의 흐름은 개발자가 아닌 Spring에 의해 결정된다는 뜻. 개발자는 프레임워크가 정한 틀에 따라 적절히 코드를 작성해 넣기만 하면 된다. 의존성 주입은 객체 생성에 관한 뜻. 클래스 A, B가 있을ㄷ 때, A의 메소드 내에서 B의 객체를 생성하여 비즈니스 로직에 사용하면 A는 B에 의존하는 관계가 된다. 그리고 A, B 클래스가 아닌 외부에서 A 클래스의 메소드를 호출하고, 파라미터 값으로 전달받은 B 객체를 전달한다면 이것은 '주입'이 된다. 의존성 주입은 두 상황을 합치면 된다. 파라미터 값으로 전달받은 B 객체를 A 클래스의 메소드 내에서 비즈니스 로직에 사용하는 것을 의미한다. 즉 A와 B의 '의존' 관계가 외부에서의 '주입'을 통해 이루어 진 것이다.
* DAO(Data Acess Object) : JDBC 추상 계층을 제공. JDBC는 Java DataBase Connector. 데이터가 담겨있는 VO(Value Object) 클래스를 이용해 사용한다.
* ORM(One Run Method) : JPA, Hibernate와 같은 ORM이나 MyBatis 같은 데이터베이스 API 등과 통합할 수 있는 기능을 제공
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
JPA, Hibernate, 그리고 Spring Data JPA의 차이점
개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레
suhwan.dev
* AOP(Spring AOP) : 공통 로직을 한군데서 관리해서 공동으로 사용한다는 개념 자체는 어렵지 않으나, 데이터와 변수가 어디서 어디로 오고가는지를 따지면 복잡해진다. 스프링 공부하는 도중 최악의 난이도를 지닌 구간. 처음 공부할때는 대충, 나중에 계속 공부하는 것을 추천. 실질적으로는 로그 찍기용이 대부분.
* Web : Spring Web MVC, Struts, WebWork 등 웹 어플리케이션 구현에 도움되는 기능을 제공.
* JEE : EJB, JMX 등의 엔터프라이즈 J2EE 스펙에 관한 기능을 제공.
여담 : 22년 후반기 출시 예정인 스프링 프레임워크 6는 최소 자바 버전을 17로 상향한다고 밝혔다. 5.0 버전 부터 자바 8을 최소 요구사항으로 설정한 방침과 달리 파격적..
'Dev. > Spring' 카테고리의 다른 글
| [Spring] Configuration 비교 (0) | 2022.05.18 |
|---|