Spring Framework

SpringBoot Framework 왜 쓸까?

baekchan 2023. 11. 27. 17:42

Framework란?

  • 프레임워크는 뼈대나 기반 구조를 뜻하고, 제어의 역전 개념이 적용된 대표적 기술
  • 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
  • 객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법 중 하나라고 할수 있다.

Framework와 Library 차이는 멀까?

“ 제어 흐름에 대한 주도성이 누구에게, 어디에 있는가”

  • 프레임워크는 전체적인 흐름을 스스로 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는다.
  • 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓴다.
  • 즉 라이브러리는 사용하고 호출하는 측에 주도성이 있고 프레임워크는 틀안에 이미 제어 흐름에 대한 주도성이 내재되어 있다.
  • 사용자가 흐름에 따라 필요한 라이브러리 기능을 쓴다 (사용자 → 라이브러리)
  • 프레임워크가 흐름에 따라 사용자가 만든 코드를 사용한다. (프레임워크 → 사용자)

프레임워크가 흐름에 따라 사용자가 만든 코드를 사용한다고?

  • 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다.
  • 제어의 역전이란, 코드의 흐름을 제어하는 주체가 바뀌는 것이다. (프레임워크 → 사용자)
  • 따라서 프레임 워크는 특정 디자인 패턴이나, 전처리 후처리에 필요한 동작과 기능들을 수행하기 위해서 프레임워크가 실행되다가 중간 중간 특정 비즈니스나 특정 구현 단에서만 사용자의 코드를 LookUp하여 사용하는 형태이다.
  • 프레임워크는 이미 프로그래밍할 규칙이 정해져있다.
    • 어떤 함수를 추가적으로 작성해야 한다.
    • 소스 파일을 어디 위치에 넣어야 한다.
    • DB와 연동하기 위해 무엇을 써넣어야 한다.
    • 등등
  • 프레임워크가 미리 코드로 구조를 구성해두고 개발자가 해당 구조에 코드를 짜 맞추는 방식이다.

우리는 왜 Framework를 쓸까?

  • 개발자의 개발 경험이나 스타일에 따라 결과물의 형태가 다르다.
  • 개인이 운영하는 시스템일 경우에는 큰문제가 되지 않지만 여러 사람이 공동작업을 진행할 경우 문제가 발생한다.
  • 서로 다른 결과물을 공유하는 데 있어서 상대방의 스타일을 이해하는 데 시간이 필요하며 개발 스킬의 차이가 클 경우 이해하기 힘든 경우도 발생한다.
  • 그러나 프레임워크는 구조화된 코드를 통해 개발자의 코드 패턴을 정형화 할 수 있도록 되어있으며 개발자가 반복적으로 해야하는 공통부분을 최소화 할 수 있다. 이를 통해 개발자는 자신이 맡은 세부 업무 개발에 집중할 수 있으며 개발표준 준수 및 개발 품질 향상에 도움을 준다.
  • 장점
    • 체계적인 코드관리로 유지보수가 용이하다.
    • 기본설계 및 기능 라이브러리를 제공하여 개발 생산성이 높다.
    • 코드에 대한 재사용성이 높다.
    • 추상화된 코드 제공을 통해 확장성이 좋다.
  • 단점
    • 학습 난이도가 높다.
    • 기본 설계된 구조에 의해 자유로운 개발에 한계가 있다.
    • 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있다.
    • 제공되는 기능만큼 프로젝트의 용량이 증가한다.

Spring Framework 선정 이유

  1. POJO 기반의 구성 (Plain Old Java Object)
    1. 코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미한다.
    2. Java 코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다.
    3. 덕분에, 자유롭게 객체지향적 설계를 구현할 수 있다.
  2. DI(의존성 주입)을 통한 객체 관계 구성
    1. 의존성 주입은 제어의 역전이 일어나는 것을 전제로 스프링 내부의 객체들 간의 관계를 관리할 때 사용한다.
    2. 메서드나 객체(Bean)의 호출 작업은 제어의 역전을 통해 외부에서 이루어진다.
    3. 제어의 역행을 전제조건으로 의존성 주입이 일어난다.
    4. 의존성을 가진 객체에 대해 스프링에서 의존성 주입이 발생하도록 한다.
    5. 의존성 주입 특징으로 인해 개발자가 POJO개발이 가능하게 된다.
    6. 실무에서는 주로 정형화된 컨트롤러, 서비스, 레포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
    7. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 Configuration을 통해 스프링 빈으로 등록한다.
    의존성 주입 방법
    1. 필드 주입
    2. setter 주입
    3. 생성자 주입 (권장)
    • 생성자 주입 권장 이유
      • 순환 의존성 확인: 필드 주입으로는 순환 의존성을 파악하기 어렵다. 생성자 주입을 하게 되면 서버 기동 시 순환 의존성을 가지는 요소들을 파악할 수 있게 에러 메세지를 표시하면서 서버 기동이 되지 않는다.
      • 불변성 : 필드 주입은 final을 선언할 수 없지만 생성자 주입은 final을 선언함으로써 객체가 변하지 않도록 방지해준다.
      • 단일 책임 원칙 위반 확인
  3. AOP(관점 지향 프로그래밍) 지원
    1. AOP를 통해 반복적인 코드를 줄이고 개발자가 핵심 비즈니스 로직에만 집중할 수 있도록 한다.
  4. WAS에 독립적인 개발 환경
    1. 웹서버는 정적인 데이터를 처리하는 서버로 단순 이미지 HTML을 처리하는 서버이며, WAS는 동적인 데이터를 처리하는 서버로 DB 연동 데이터 조작등과 같은 처리를 WAS에서 한다.
    2. Spring Boot 기본 내장 WAS는 Apache Tomcat이다.
    3. @SpringBootApplication을 실행하면 자동으로 웹 서버가 실행된다. Spring Boot가 내장된 웹 서버를 자동으로 구동시킨다
    4. Spring Boot의 내장 WAS를 꼭 사용해야 하는 것은 아니고, 자유롭게 변경해 사용할 수 있다.

참고문헌

https://joychae.tistory.com/26

https://www.playnexacro.com/#show:insight:893

https://joychae.tistory.com/27