Spring Framework
SpringBoot Framework 왜 쓸까?
baekchan
2023. 11. 27. 17:42
Framework란?
- 프레임워크는 뼈대나 기반 구조를 뜻하고, 제어의 역전 개념이 적용된 대표적 기술
- 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
- 객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법 중 하나라고 할수 있다.
Framework와 Library 차이는 멀까?
“ 제어 흐름에 대한 주도성이 누구에게, 어디에 있는가”
- 프레임워크는 전체적인 흐름을 스스로 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는다.
- 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓴다.
- 즉 라이브러리는 사용하고 호출하는 측에 주도성이 있고 프레임워크는 틀안에 이미 제어 흐름에 대한 주도성이 내재되어 있다.
- 사용자가 흐름에 따라 필요한 라이브러리 기능을 쓴다 (사용자 → 라이브러리)
- 프레임워크가 흐름에 따라 사용자가 만든 코드를 사용한다. (프레임워크 → 사용자)
프레임워크가 흐름에 따라 사용자가 만든 코드를 사용한다고?
- 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다.
- 제어의 역전이란, 코드의 흐름을 제어하는 주체가 바뀌는 것이다. (프레임워크 → 사용자)
- 따라서 프레임 워크는 특정 디자인 패턴이나, 전처리 후처리에 필요한 동작과 기능들을 수행하기 위해서 프레임워크가 실행되다가 중간 중간 특정 비즈니스나 특정 구현 단에서만 사용자의 코드를 LookUp하여 사용하는 형태이다.
- 프레임워크는 이미 프로그래밍할 규칙이 정해져있다.
- 어떤 함수를 추가적으로 작성해야 한다.
- 소스 파일을 어디 위치에 넣어야 한다.
- DB와 연동하기 위해 무엇을 써넣어야 한다.
- 등등
- 프레임워크가 미리 코드로 구조를 구성해두고 개발자가 해당 구조에 코드를 짜 맞추는 방식이다.
우리는 왜 Framework를 쓸까?
- 개발자의 개발 경험이나 스타일에 따라 결과물의 형태가 다르다.
- 개인이 운영하는 시스템일 경우에는 큰문제가 되지 않지만 여러 사람이 공동작업을 진행할 경우 문제가 발생한다.
- 서로 다른 결과물을 공유하는 데 있어서 상대방의 스타일을 이해하는 데 시간이 필요하며 개발 스킬의 차이가 클 경우 이해하기 힘든 경우도 발생한다.
- 그러나 프레임워크는 구조화된 코드를 통해 개발자의 코드 패턴을 정형화 할 수 있도록 되어있으며 개발자가 반복적으로 해야하는 공통부분을 최소화 할 수 있다. 이를 통해 개발자는 자신이 맡은 세부 업무 개발에 집중할 수 있으며 개발표준 준수 및 개발 품질 향상에 도움을 준다.
- 장점
- 체계적인 코드관리로 유지보수가 용이하다.
- 기본설계 및 기능 라이브러리를 제공하여 개발 생산성이 높다.
- 코드에 대한 재사용성이 높다.
- 추상화된 코드 제공을 통해 확장성이 좋다.
- 단점
- 학습 난이도가 높다.
- 기본 설계된 구조에 의해 자유로운 개발에 한계가 있다.
- 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있다.
- 제공되는 기능만큼 프로젝트의 용량이 증가한다.
Spring Framework 선정 이유
- POJO 기반의 구성 (Plain Old Java Object)
- 코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미한다.
- Java 코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다.
- 덕분에, 자유롭게 객체지향적 설계를 구현할 수 있다.
- DI(의존성 주입)을 통한 객체 관계 구성
- 의존성 주입은 제어의 역전이 일어나는 것을 전제로 스프링 내부의 객체들 간의 관계를 관리할 때 사용한다.
- 메서드나 객체(Bean)의 호출 작업은 제어의 역전을 통해 외부에서 이루어진다.
- 제어의 역행을 전제조건으로 의존성 주입이 일어난다.
- 의존성을 가진 객체에 대해 스프링에서 의존성 주입이 발생하도록 한다.
- 의존성 주입 특징으로 인해 개발자가 POJO개발이 가능하게 된다.
- 실무에서는 주로 정형화된 컨트롤러, 서비스, 레포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
- 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 Configuration을 통해 스프링 빈으로 등록한다.
- 필드 주입
- setter 주입
- 생성자 주입 (권장)
- 생성자 주입 권장 이유
- 순환 의존성 확인: 필드 주입으로는 순환 의존성을 파악하기 어렵다. 생성자 주입을 하게 되면 서버 기동 시 순환 의존성을 가지는 요소들을 파악할 수 있게 에러 메세지를 표시하면서 서버 기동이 되지 않는다.
- 불변성 : 필드 주입은 final을 선언할 수 없지만 생성자 주입은 final을 선언함으로써 객체가 변하지 않도록 방지해준다.
- 단일 책임 원칙 위반 확인
- AOP(관점 지향 프로그래밍) 지원
- AOP를 통해 반복적인 코드를 줄이고 개발자가 핵심 비즈니스 로직에만 집중할 수 있도록 한다.
- WAS에 독립적인 개발 환경
- 웹서버는 정적인 데이터를 처리하는 서버로 단순 이미지 HTML을 처리하는 서버이며, WAS는 동적인 데이터를 처리하는 서버로 DB 연동 데이터 조작등과 같은 처리를 WAS에서 한다.
- Spring Boot 기본 내장 WAS는 Apache Tomcat이다.
- @SpringBootApplication을 실행하면 자동으로 웹 서버가 실행된다. Spring Boot가 내장된 웹 서버를 자동으로 구동시킨다
- Spring Boot의 내장 WAS를 꼭 사용해야 하는 것은 아니고, 자유롭게 변경해 사용할 수 있다.
참고문헌
https://joychae.tistory.com/26