티스토리 뷰

Web/Spring

[Spring] Spring 이란?

쩨리쩨리 2018. 5. 16. 20:43
반응형

* Spring 이란?

 

- JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용한다. JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀이라 할 수 있다.

- 옛날에 비교하면 지금은 JAVA의 활용도가 높아졌고 따라서 프로젝트 규모도 커졌다. JAVA를 이용한 기술은 JSP, MyBatis, JPA 등 여러가지가 있는데 즉, 이 기술들이 프로젝트에 많이 쓰인다고 할 수 있다. Spring은 이 기술들을 더 편하게 사용하기 위해 만들어진 것이다.

- 프로젝트를 진행하다 보면 아무리 분업을 해도 분명 중복되는 코드가 있기 마련이다. Spring은 이런 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해줄 수 있다.

- Spring을 사용하면 다른 사람의 코드를 참조하여 쓰기 편리한데 이말의 의미는 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조라는 것이다.

- 결론적으로 Spring이란 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다.

 

 

 

 

 

* 프레임 워크(Frame Work)란?

 

- 프레임 워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조이자 약속이며, 소프트웨어 개발에 있어서 하나의 뼈대 역할을 한다.

- 더 간단히 말하자면 프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합)이라고 정의할 수 있다.

- 설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 수정, 확장하는데 필요한 라이브러리 이 두가지 요소가 통합되어 제공되는 형태이다.

- 사용자가 이 기반 코드를 이용해 일정 수준 이상의 품질을 보장받는 코드를, 비교적 빠른 시간에 완성 및 유지 보수할 수 있는 환경을 제공해주는 솔루션이다.

- 즉 프레임 워크는 기본적인 설계나 필요한 라이브러리는 알아서 제공해줄꺼니깐 개발자는 만들고 싶은 기능을 구현하는데 집중해라는 취지에서 만들어진 것이다.

- 개발자가 구현하고자 하는 기능을 쉽게 제공해줄수 있다는 점에서 프레임 워크는 라이브러리와 비슷한 면이 있다.

 

 

 

 

 

* 프레임 워크와 라이브러리의 차이점

 

- 라이브러리는 개발자가 프로그램을 짜다가 라이브러리가 필요한 순간에 인지하고 라이브러리를 직접 추가해야겠다는 생각이 들었을때 가져다 쓰는 것이다. 라이브러리는 프로그램 기능 구현에만 도움을 줄 수 있다.

- 하지만 프레임 워크는 필요한 라이브러리와 기능 구현에 필요한 설계도 틀을 함께 제공해준다.

- 설계도 틀이란 확장 가능한 기반코드, 재사용 가능한 형태의 협업화된 클래스와 같은 뜻이다. 사용자가 세세하게 신경쓰지 않아도 수비고 빠르게 기능을 확장하거나 유지보수할 수 있게 해주는 구조에 대한 가이드라인이라 할 수 있다. 즉, 기반이 되는 부모 클래스라 생각하면된다.

- 개발자가 동일한 라이브러리를 쓰는 동일한 기능의 프로그램을 사용할때, 프레임 워크를 사용하면 클래스 관계 구조나, 데이터를 처리하는 절차, 프로그램이 화면에 그려지는 방식 등 일부 틀을 함께 제공 받을 수 있다. 즉, 프레임 워크는 이브러리+설계도가 함께 온다.

 

 

 

 

 

* Spring 주요 특징

 

- Spring은 개발을 더 쉽게 해주는 프로그램 틀이다. 개발을 더 쉽게 해주는 기술들이 Spring에 존재하는데, IoC, Di, AOP 등등이 있다.

- 개발을 더 쉽게 해주는 것들 중 몇가지를 알아보겠다.

 

 

 

1. IoC(Inversion of Control, 제어 반전)

- 개발자는 JAVA 코딩시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.

- IoC란 인스턴스 (객체)의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스피링(컨테이너)가 대신 해주는 것을 말한다.

- 다들 겪어봤겠지만 자신을 믿어선 안된다ㅋㅋ.. 분명 틀린 코드가 없다고 생각했는데 알고보면 항상 오타라던가 이상한 곳에 코드가 있더라.. IoC는 개발자가 실수할 수 있는 생명주기 관리를 대신 해준다.

- 프로젝트의 규모가 커질수록 객체와 자원을 이용하는 방법이 더 복잡해지고 어디서 코드가 꼬일지 모르는 것을 Spring의 IoC는 자동으로 관리해준다.

- 즉, 제어권이 개발자가 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어하는 것이다.

 

 

 

 

2. DI(Dependency Injection, 의존성 주입)

- 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식이다.

- 코드 재사용을 높여 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다.

- 쉽게 말하자면 게임 캐릭터라는 하나의 객체가 존재하는데, 그 객체를 더 잘 이용하기 위해서 무기, 방패 등 아이템을 가져와 결합시키는 것이다. 이 객체는 무기와 방패를 뺐다 꼈다 자유자재로 할 수 있으며 아이템을 갈아끼우는데 어떤 상황에 구애받지도 않는다.

- JAVA에서 데이터를 저장하고 가져오는 기능을 외부의 Oracle Database를 사용할 수도 있고, JDBC, iBatis, JPA 등 다른 프레임 워크를 이용해 짤 수도 있다. 이때 Spring을 이용하면 그때마다 필요한 부분을 뺐다 꼈다 하면서 적절한 상황에 필요한 기능을 해낼 수 있다.

 

 

 

 

3. AOP(Aspect Object Programming, 관점 지향 프로그래밍)

- 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리 할 수 있다.

- 각각의 클래스가 있다고 가정하자. 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많다. 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않다. 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋다.

- 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.

 

 

 

4. POJO(Plain Old Java Object) 방식

- POJO는 Java EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.

- 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.

- 즉, getter/setter를 가진 단순한 자바 오브젝트를 말한다.

 

 

반응형
댓글
공지사항