Spring에 대하여

황남욱·2022년 2월 15일
0
post-thumbnail

Spring이란?

Spring은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크 입니다.
공식사이트에 의하면 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model을 제공한다. 라고 언급했습니다.

여기서 프레임워크라고 하였는데 프레임워크는 무엇일까요? 그리고 또 라이브러리는 무엇일까요?

라이브러리(Library)란?

라이브러리는 도서관이라는 영어 뜻을 갖고있고 도서관은 필요할 때 마다 꺼내볼 수 있는 책이 모여있는 곳입니다.
프로그래밍에서의 라이브러리는 개발에 필요한 기능들이 모여있는 코드의 묶음 이라고 생각할 수 있습니다.

프레임워크(Framework)란?

프레임워크의 의미는 어플리케이션 개발에 바탕이 되는 템플릿과 같은 역할을 하는 클래스들과 인터페이스의 집합으로 설명되며
쉽게말해 어떤 프로그램을 만들기 위한 기본 틀 이라고 생각하면 됩니다.

라이브러리 vs 프레임워크

라이브러리와 프레임워크의 가장 큰 차이점은 코드 흐름의 제어권이 누구에게 있느냐입니다.

라이브러리는 사용하고자 하는 라이브러리의 객체나 함수를 개발자가 직접 호출하여 사용하지만
프레임워크는 개발자가 구현한 메서드가 프레임워크에 의해 호출됩니다. 이를 제어의 역전(IoC : Inversion of Control)이라고 합니다.

Framework의 종류

  • Java개발에 사용되는 Spring
  • Python개발에 사용되는 Django, Flask
  • Javascript개발에 사용되는 React, Angular, Vue.js
  • node.js개발에 사용되는 Express
  • Ruby개발에 사용되는 Ruby on Rails




다시 스프링으로 넘어가서 개발자 입장에서 검증된 코드를 이용해서 최소한의 부분만 바꾸어 빠르게 개발하기 위해 프레임워크를 사용합니다.
자바개발자로서 스프링을 사용하면서 어떤 이점이 있을까요?

스프링의 특징

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

IoC란 인스턴스의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스프링 컨테이너가 대신 해주는 것을 의미합니다.
즉, 제어권이 개발자가 아닌 IoC에 있으며 IoC가 개발자의 코드를 호춣하여 그 코드로 생명주기를 제어하는 것입니다.

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

DI는 제어의 역전이 일어나는 것을 전제로 스프링 내부의 객체들 간의 관계를 관리할 때 사용합니다.
자바로 프로그래밍을 하면서 객체를 생성할때 클래스에 new연산자를 이용하여 생성했습니다. 하지만 DI는 개발자가 직접 코딩하여 객체를 생성하는것이 아닌 컨테이너가 이를 생성시켜주어 관련된 코드에서는 직접적인 연관관계가 발생하지 않아 각 클래스간에 결합도를 낮춰줍니다.

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

AOP는 관점 지향 프로그래밍이라고 불리며, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법입니다.
즉, 여러곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지보수 혹은 재사용에 용이하도록 프로그래밍 하는 것입니다.

  1. POJO(Plain Old Java Object)

POJO는 말그대로 해석하자면 오래된 방식의 간단한 자바 오브젝트 라는 말로 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 뜻합니다.

  1. PSA(Portable Service Abstraction)

PSA란 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조를 말합니다.
즉, 잘 만든 인터페이스를 뜻하며 스프링에서는 Spring Web MVC, Spring Transaction, Spring Cache등의 다양한 PSA를 제공합니다.

마무리

위에서 간단하게 스프링에 대하여 정리를 해봤습니다.
자바 개발자라면 스프링을 많이 사용하는데 어떠한 특징이 있고 스프링이 어떻게 동작하는지 알고 사용하는 것이 좋을 것 같고
저도 그러기 위해 스프링에 대해서 정리하며 공부해보았고 스프링의 특징들은 다른 포스트에 자세하게 다루어 보겠습니다.

profile
안녕하세요👋 주니어 백엔드 개발자입니다.

0개의 댓글