Spring을 왜 사용할까??

이동엽·2023년 8월 7일
0

배운게 Spring뿐이지만, 유독 이게 많이 쓰이는 이유를 알고 싶어 찾게 되었습니다.

Spring을 왜 사용할까?

우리가 Spring을 쓰면서 얻는 이점, 여러가지 특징을 알아 보겠습니다.

스프링 프레임워크란?


  • Spring FrameWork는 자바 기반의 웹 애플리케이션 개발을 위한 프레임 워크(오픈소스)이다.
  • 동적인 웹 사이트를 개발 하기 위해 여러가지 서비스를 지원해준다.
    1. framework :개발할 때 설계 기본이 되는 뼈대나 구조 및 환경 즉, 소프트웨어의 특정 문제를 해결 하기 위해 상호 협력하는 클래스와 인터페이스의 집합.
    • Framework와 Library의 차이
      • Library : 개발자가 만든 클래스에서 호출에 의한 제어(개발자 제어), 단순 활용 가능한 도구들 집합.
      • framework : 프로그램의 흐름이 프레임워크에 의해 제어, 기능 확장 가능, 자체는 수정 불가. (IoC 개념이 작용된 기술)
    • Framework 사용하는 이유
      • 시스템 구축 할때 마다 개발자가 일일히 할 필요 없이 반복적으로 비기능 요소를 구현할 필요가 없다.

Untitled

스프링의 장단점


장점

  • 개발에 필요한 구조 및 환경을 이미 만들어 놓고 시작하기 때문에 실력에 상관없이 필요한 부분을 조립하는 형태의 개발이 가능합니다.
  • 회사 입장에선 일정한 품질이 보장 될수 있습니다.
  • 개발자 입장에선 완성된 구조에 자기 코드를 넣어서 개발하기 때문에 개발 시간을 단축할 수 있다.
  • 다른 프레임 워크들을 혼용해서 사용할수 있다.
  • 프로젝트 전체 구조를 설계할 때 유용한 프레임워크이다.

단점

  • 많은 기능을 제공하고 탑재하기 때문에 그만큼 무겁다.

스프링 특징


경량 컨테이너

  • 자바 객체를 직접 관리한다.
  • 각각의 객체 생성 및 소멸 같은 라이프 사이클을 관리하며 스프링에서 필요한 객체를 얻어 올수 있다.

POJO 기반의 구성

  • POJO : 평범한 자바 객체를 뜻함.
  • POJO는 특정 규약과 특정 환경에 종속 되면 안되고, 객체 지향 설계를 잘 지켜야 한다는 조건이 있습니다.

DI를 통한 객체 간의 관계 구성

DI**(Dependency Injection, 의존성 주입)**

  • DI란 스프링이 다른 프레임 워크와 차별화 되어서 제공하는 의존 관계 주입 기능입니다.
  • 객체를 직접 생성하는게 아닌 외부에서 생성하고 주입 시켜서 구성 요소 간의 의존 관계가 정의 된다.
  • DI를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
  • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결 시켜준다.

IOC**(Inversion of Control, 제어의 역전)**

  • 객체의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스프링 컨테이너가 대신 해주는 것을 말한다.
  • 스프링에서는 객체를 Bean이라고 부르고, 관리하는 곳을 Bean 컨테이너 라고 부른다.
  • 의존성을 역전 시키면 결합도를 줄이고, 유연한 코드를 작성할수 있어서 코드 중복을 줄이고 유지 보수를 편하게 할 수 있다.
  • 스프링에서 객체 만들어 지고 실행 되는과정
    • 객체 생성 → 의존성 객체 주입(스프링이 제어권) → 의존성 객체 메소드 호출
  • Bean들은 싱글톤 패턴의 특징을 가지며, 제어의 흐름을 개발자가 컨트롤 하는게 아닌 스프링에 맡긴다.

Untitled

AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)

  • OOP를 보완하는 수단으로,애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능들을 모듈화해서 분리 하는것이다.
  • 분리하는 이유
    • 코드 간결성 유지
    • 객체 지향 설계 원칙에 맞는 코드 구현
    • 코드 재사용
  • 장점으로는 중복 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이하다.
  • ex) @Transactional 어노테이션

WAS에 독립적인 개발환경

  • 웹 서버는 정적인 데이터를 처리하는 서버로 단순 이미지 HTML을 처리하는 서버이며, WAS는 동적인 데이터를 처리하는 서버로 DB 연동 데이터 조작등과 같은 처리를 WAS에서 한다.
  • 스프링 Boot 기본내장 WAS는 Apache Tomcat이다.
  • SpringBootApplication을 실행하면 자동으로 웹서버가 실행된다.

특징,장점 정리하면

spring이 제공하는 기능들이 프로그래머가 편리하게 개발할 수 있게 해줘서 비즈니스 로직에만 집중 할수 있게 해주는것이다.

왜? → 모든 상황 기본적인 코드들은 이미 다 짜여져 있어, 프로그래머는 프로그래머는 해당 상황에 최적화 시키기 위해 비즈니스 로직과 관련한 변수와 메소드를 개발하는 데 집중할 수 있다.

그리고 개발자가 기본적인 디자인 패턴(DI,AOP,서비스 추상화) 등들을 강제적으로 사용하게 해 코드 구조 퀄리티를 보장 한다.

Spring,Spring Boot, Spring MVC

Spring

스프링은 Spring Framework, Spring Boot, Spring data 등 여러 프로젝트들의 모음이다

핵심요소는 앱 수준의 인프라 지원이다.(환경 지원)

  • JDBC,JSP 및 Java Servlet 같은 기존 Java 프레임 워크 및 API에 비해 웹 애플리케이션 개발이 훨씬 쉬워진다.
  • DI,IOC를 통해 객체 간의 결합도를 낮아져 코드 중복을 제거하고 단위 테스트를 용이하다.
    • AOP,POJO,DI 와 같이 좋은 기술들을 사용해 애플리케이션 개발
  • Spring ORM(개체 관계형 매핑), Spring Web Flow 및 Spring Web MVC 등 다양한 모듈 제공.
    • 모듈을 별도로 사용할 수 있다.
    • 모듈은 웹 응용 프로그램에 더 나은 기능을 제공 하기 위해 그룹화 가능하다.
  • 개발자는 최소한의 작업을 수행하기 위해 많은 코드(보일러 플레이트 코드)를 작성합니다.
  • 스프링 프레임워크의 주요 기능은 종속성 주입입니다.

Spring Boot

기존 Spring 위에 구축, 자동 구성 기능이 핵심

  • 스프링의 모든 기능을 제공하면서 보다 쉽게 사용 가능하다.
    • 개발에 필요한 모듈의 라이브러리 조합이 자동으로 완성되어 있음
  • 모든 것이 자동으로 구성
    • Spring FrameWork는 Bean으로 등록해야하지만 Spring Boot는 의존성만 추가해주면 yml 파일을 통해 자동으로 주입 시켜 설정해준다.
  • REST API를 개발하는데 널리 사용된다.
  • WAS에 배포하지 않고도 실행 가능한 jar 파일로 웹앱 개발 가능하다.
  • H2와 같은 내장형 및 인메모리 데이터베이스 관련 작업을 위한 여러 플러그인을 제공합니다.

Spring MVC

웹 애플리케이션을 구축하기 위한 Web MVC 프레임 워크입니다. 여기엔 다양한 기능을 위한 많은 구성 팔이 포함되어 있다.

  • HTTP 지향 웹 애플리케이션 개발 프레임워크입니다.
  • 웹 응용 프로그램을 빌드하는 데 사용할 수 있는 기능을 제공합니다.
  • 빌드 구성을 수동으로 수행해야 합니다.
  • 배포 구성이 필요하다.

참고

https://steady-coding.tistory.com/457

DI,IOC https://velog.io/@gillog/Spring-DIDependency-Injection

AOP https://ittrue.tistory.com/213

AOP 용어 https://yeoncoding.tistory.com/175

https://hongs-coding.tistory.com/112

https://joychae.tistory.com/27

Spring,Spring Boot, Spring MVC https://jjeongil.tistory.com/2131

https://12bme.tistory.com/157

예상 면접 질문 및 답변

스프링의 가치, 특징, 장점

특징으로는

  • 경량급 컨테이너
  • IoC,DI
  • AOP(관점지향 프로그래밍)
  • POJO 프로그래밍을 지향해서 객체지향 설계를 제한 없이 적용할 수 있다.
  • PSA(일관된 서비스 추상화) : JDBC처럼 특정 기술과 관련된 서비스를 추상화 해서 일관된 방식으로 사용할수 있도록 한다.

그래서 스프링을 왜 사용할까요?

spring이 제공하는 기능들이 개발자가 편리하게 개발할 수 있게 비즈니스 로직에만 집중 할수 있게 해줍니다.
왜 편리 하냐? -> 개발에 필요한 구조, 환경 을 이미 완성되어 있고 개발 시작 하기 때문에 실력에 상관없이 필요한 부분을 조립하는 형태의 개발이 가능합니다.
그래서 회사 입장에선 일정한 품질이 보장되고, 개발자 입장에선 완성된 구조에 자기 코드만 넣으면 되기 때문에 개발 시간을 단축할 수 있습니다.
그리고 다른 프레임 워크들을 혼용해서 사용할 수 있고, 프로젝트 전체 구조를 설계할 때 유용한 프레임워크입니다.

스프링 프레임워크는 어떤가요?

스프링 프레임워크는 자바 기반의 웹 애플리케이션 개발할려고 쓰는 오픈소스 기반 프레임 워크입니다.
동적인 웹 사이트를 개발 하기위해 여러가지 서비스를 지원해줍니다.

Spring vs Spring boot vs Spring MVC

Spring은 Spring Framework, Spring Boot, Spring data 등 여러 프로젝트들의 모음이다.
핵심인건 엄청 좋은 인프라(환경) 지원입니다.
Spring Boot는 기존 Spring 위에 구축, 자동 구성 기능이 핵심입니다. 개발에 필요한 모듈의 라이브러리 조합이 자동으로 완성되어 있어 쉽게 사용 가능하다.
그리고 Rest API를 개발하는데 널리 쓰이고 WAS에 배포 하지 않고도 실행 가능한 jar 파일로 웹앱 개발 가능하며, 인메모리 DB 관련 작업을 위한 여러 플러그인을 제공한다.
Spring MVC는 웹 애플리케이션을 구축하기 위한 Web MVC 프레임워크입니다. 그래서 웹 응용 프로그램을 빌드하는 데 사용할 수 있는 기능을 제공합니다.

profile
씨앗

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기