프레임 워크란 VS 라이브러리
→ 내가 주인지! 도구가 주인지! 이것이 비교의 본점!
라이브러리 : 개발할 때 필요한것들을 가져와서 쓰는것에 목적!
( 내가 주! : 코드 작성중에 시간 단축을 위해 필요한 코드를 불러와서 사용, 코드를 변경 또는 다른 기능으로 사용해도 작동에 문제가 없음!)
프레임워크 : 이미 환경이 어느정도 구성이 되어있는것에 목적!
( 코드(도구)가 주! : 프레임워크가 정해놓은 툴(기반, 정책)을 따라 작성, 코드 작성중 프레임워크가 변경되면 크게 문제가 생김!)
프레임 워크란!
뼈대나 근간을 이루는 코드들의 묶음
개발자는 각 개개인의 능력하이가 큰 직종이며, 개발자 구성에 따라 프로젝트 결과가 역시 큰 차이르 낳는다.
이런 상황을 극복하기 위한 코드의 결과물이 바로 프레임워크!
프로그램의 기본 흐름이나 구조를 정하고 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발한다.
프레임워크 안에 라이브러리가 있기 때문에 프레임워크가 더 큰 개념이다!
장점!
개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에, 실력이 부족한 개발자라고 하더라도 반쯤 완성한 상태에서 필요한 부분을 조힙하는 형대의 개발이 가능하다. 회사 입장에서는 프레임워크를 사용하면 일정한 품질이 보장되는 결과물을 얻을 수 있고, 개발자 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣기 때문에 개발 시간을 단축!
스프링 프레임워크 (경량에 포거스가 잡혀있다. 경량 프레임워크!)
예전 프레임워크는 다양한 경우를 처리할 수 있는 다양한 기능을 가지도록 만들다보니 하나의 기능을 위해 너무 많은 구조가 필요했다. 기술이 너무 복잡해지고 방대했기 때문에 전체를 이해하고 개발하기에는 어려움이 많았다.
이로인해 스프링 프레임워크가 등장했고, 특정 기능을 위주로 간단한 jar파일 등을 이용해서 모든 개발이 가능하도록 구성되어 있다.
장점
복잡함에 반기를 들어서 만들어진 프레임워크
프로젝트 전체 구조를 설계할 때 유용한 프레임워크
다른 프레임워크들의 포용(여러 프레임워크 혼용이 가능)
개발 생산성과 개발도구의 지원
주요 특징
- POJO 기반의 구성
- 의존성 주입(DI)를 통한 객체 간의 구성
- AOP(Aspect-Oriented-Programming) 지원
- 편리한 MVC 구조
- 단위 테스트 JUnit 지원
[POJO(Plain Old Object] 기반의 구성]
스프링프레임워크에서는 객체지향언어인 자바를 사용한다는 의미!
오래된 방식의 간단한 자바 객체라는 의미이며, Java 코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레임워크에서 그대로 사용할 수 있다는 뜻!
[의존성 주입(DI)를 통한 객체 간의 관계 구성]
의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미!
→ A객체가 B객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현한다.
주입(Injection)은 말 그대로 외부에서 밀어 넣는 것을 의미
→ 어떤 객체가 필요한 객체를 외부에서 빌어 넣는 것을 의미
주입 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하던지 자신의 역할은 변하지 않게 된다.
※ 클래스의 전역변수 위치에서 new를 하는것이 문제! (메소드에서 new를 하는것은 의존성과 관련없다.)
▶ 메소드는 없어도 돌아가기 때문에 의존성과 관련이 없는것 !
의존 (a객체에서 b객체를 직접 생성)
ⓐ →→→→→→→ ⓑ
의존성 주입 (a는 b가 필요하다는 신호만 보내고, b객체를 주입하는것은 외부에서 이루어짐)
의존성 주입 방식을 사용하기 위해서는 ? 라는 존재가 필요하다.
스프링 프레임워크에서는 이 ?를 ApplicationContext라고 부르며, 필요한 객체들을 생성하고, 생성한 객체들을 주입해주는 역할을 한다.
따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체를 엮는 (Wiring)작업의 형태로 개발하게 된다.
ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 xml설정, 어노테이션 설정, java설정 방식을 이용할 수 있다.
(그러나 주로 어노테이션 방식을 사용한다.)
[AOP의 지원]
객체지향의 언어를 OOP (Object-Oriented-Programming) 이라 부르는것과 같이
관점지향의 언어를 AOP (Aspect-Oriented-Programming) 이라 부른다.
관점지향 프로그래밍이란 좋은 개발 환경에서는 개발자가 비즈니스 로직에만 집중할 수 있도록 하며, 스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵시 비지니스 로직에만 집중 할 수 있는 방법을 제공한다. +) 이는 추후에 추가로 설명할 예정이다.
[단위 테스트]
전체 Application을 실행하지 않아도 기능별 단위 테스트가 용이하기 때문에 버그를 줄이고 개발시간을 단축할 수 있다.
[+ 스프링부트]
스프링 프레임워크를 사용함에 있어서 초기 설정 및 필요한 라이브러리(이 라이브러리는 서로의 버전도 모두 맞춰주어야 오류가 나지 않는다.)에 대한 설정의 어려움이 많으며, 시간이 너무 많이 걸리기 때문에 자동설정(AutoConfiguration)과 개발에 필요한 모든 것을 관리해주는 스프링부트를 선호한다.
각 코어 및 라이브러리의 버전들도 맞추어 주어야 하지만 스프링부트를 사용하면 이러한 복잡성을 해결하기에도 좋다.
'프로그래밍 공부 > Spring-Boot' 카테고리의 다른 글
[lesson] Spring-boot - DataBase 연결 (0) | 2023.01.10 |
---|---|
[lesson] Spring - REST (0) | 2023.01.10 |
[작성][Error] 메소드 오버라이딩때 Throw문 동작 안됨 (0) | 2022.05.10 |
[lesson] Spring - @ [어노테이션] (0) | 2022.02.04 |
[lesson] Spring-boot - 프로젝트 생성 및 의존성 주입(DI) (0) | 2021.10.06 |