Programming

[Spring] 스프링이란?

NegotiationMan 2023. 2. 15. 20:00

스프링(Spring)이란?

  • JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용한다. JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀이라 할 수 있다.
  • 옛날에 비교하면 지금은 JAVA의 활용도가 높아졌고 따라서 프로젝트 규모도 커졌다. JAVA를 이용한 기술은 JSP, MyBatis, JPA 등 여러 가지가 있는데 즉, 이 기술들이 프로젝트에 많이 쓰인다고 할 수 있다. Spring은 이 기술들을 더 편하게 사용하기 위해 만들어진 것이다.
  • 프로젝트를 진행하다 보면 아무리 분업을 해도 분명 중복되는 코드가 있기 마련이다. Spring은 이런 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해줄 수 있다.
  • Spring을 사용하면 다른 사람의 코드를 참조하여 쓰기 편리한데 이 말의 의미는 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조라는 것이다.
  • 결론적으로 Spring이란 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다.

 

프레임 워크(Frame Work)란?

"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것" - Ralph Johnson -

  • 프레임 워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조이자 약속이며, 소프트웨어 개발에 있어서 하나의 뼈대 역할을 한다.
  • 더 간단히 말하자면 **프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합)**이라고 정의할 수 있다.
  • 더더더 간단히 말하자면 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조를 의미한다.
  • 설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 수정, 확장하는데 필요한 라이브러리 이 두 가지 요소가 통합되어 제공되는 형태이다.

 

프레임워크의 장단점

먼저 장점부터 알아보자

  • 효율적으로 코드를 작성할 수 있다.
    • 무에서 유를 창조하는 것보다는 틀이 주어지고 거기에 맞춰서 코드를 짠다면 더욱더 쉽고 빠르게 개발할 수 있을 것이다. 즉, 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 도와준다.
  • 애플리케이션을 효율적으로 관리할 수 있다.
    • 만약에 서랍을 정리하지않고 필요한 물건을 금방 찾기는 어려울 것이다. 마찬가지로 정해진 규약에 맞게 작성된 코드이기 때문에, 비교적 빠른 시간에 코드를 파악하고 수정하기 용이하다.
  • 개발자가 구현하고자 하는 기능을 쉽게 제공해 줄 수 있다.

 

그러면 단점은 무엇이 있을까?

  • 프레임워크에 대해서 공부를 해야한다.
    • 당연히 그냥 개발하는 것보다는 프레임워크에서 정해진 규약들을 학습할 시간이 필요하다.
  • 자유롭고 유연한 개발이 어렵다.
    • 이미 만들어진 애플리케이션에서 프레임워크를 변경하거나, 유연한 개발을 위해 프레임워크를 사용하지 않게 변경할 경우 많은 시간과 노력이 필요하다.

 

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

일단 라이브러리는 무엇일까? 도서관? 그것도 맞는 말이지만(주먹으로 맞는 말) 소프트웨어적인 관점에서 본다면 에플리케이션 개발을 위한 기능을 미리 구현해 놓은 집합체이다.

 

간단한 예를 들자면 우리는 자바에서 문자열을 사용하기 위해서 다른 특별한 작업을 하지 않는다. java.lang 패키지에 있는 String 클래스 라이브러리를 이용해 쉽게 사용할 수 있다.

 

즉, 라이브러리는 부품이다. 프로그램 기능 구현에만 도움을 줄 수 있다.

 

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

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

부품들은 쉽게 교체할 수 있지만 프레임은 쉽게 교체할 수 없다. 이 말을 소프트웨어적인 관점에서 본다면 한번 정해진 프레임 워크를 교체하는 일은 어렵지만. 라이브러리는 쉽게 교체가 가능하며 필요한 라이브러리들을 선택적으로 사용할 수 있다는 의미이다!

 

이를 한 줄로 요약하면 애플리케이션에 대한 제어권의 차이가 있다고 표현할 수 있다.

 

개발자가 짜 놓은 코드 내에서 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용하는 것이 바로 라이브러리다.

즉, 애플리케이션 흐름의 주도권이 개발자한테 있다. (안 쓰면 그만이니!!)

 

그렇다면 프레임워크는 어떨까?

개발자가 메서드 내에 코드를 작성해 두면, 스프링 프레임워크가 개발자가 작성한 코드를 사용해서 애플리케이션의 흐름은 만들어 낸다.

즉, 애플리케이션 흐름의 주도권이 개발자가 아닌 프레임워크에 있다는 것이다.