생각의 흐름대로 정리
프레임워크란, 개발을 편하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 모아둔 것
프레임워크의 특징
- 개발자들이 따라야 할 가이드라인을 가진다
- 따라서 개발할 수 있는 범위가 정해져 있다
- 개발자들을 위한 다양한 도구들이 지원된다.
프레임워크의 장단점
- 장점 : 개발 시간을 줄일 수 있고 품질이 향상되며 유지보수가 편리하다
- 단점 : 습득하고 이해하는 데 오랜 시간이 걸리며 자유롭고 유연하게 개발하는 데 한계가 있다.
라이브러리와 프레임워크의 차이점
라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이고, 프레임워크는 프로그래밍을 진행할 때 필수적인 코드와 알고리즘 같은 뼈대나 구조를 지원해주는 것이다.
스프링 프레임워크는 자바를 기반으로 다양한 애플리케이션을 개발하기 위한 경량급 프레임워크입니다.
몇 가지 특징으로 프로그래머가 편리하게 개발을 할 수 있도록 하고, DI, AOP 등의 기본적인 디자인 패턴을 강제적으로 사용하게 함으로서 코드 구조 퀄리티의 최소한을 보장하는 장점이 있다.
스프링 부트는 스프링 프레임워크가 기능이 많아 환경설정이 복잡한 단점을 보완하기 위해 개발되었다.
Embedded Tomcat을 사용하기 때문에 Tomcat을 설치하거나 매번 버전 관리해 주어야 하는 수고로움이 덜었다.
starter를 통한 dependency의 자동화가 가능하다. 스프링에서는 각각의 dependency들의 호환되는 버전을 일일이 맞춰주어야 하는 어려움이 있었지만 스프링부트에서는 starter가 대부분의 dependency를 관리해 주기 때문에 이러한 걱정을 덜게 되었다.
XML 설정을 하지 않아도 된다.
jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다. 스프링의 경우 war 파일을 web application server에 담아 배포
스프링의 특징
- 경량 컨테이너로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링으로부터 필요한 객체를 얻어올 수 있다. - POJO(Plain Old Java Object) 방식의 프레임워크
- 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.
- POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 한다. - 의존성 주입(DI) 지원
- 객체 간의 의존성이 존재할 경우 개발자가 직접 객체를 생성하거나 제어하는 것이 아니라, IOC에 의하여 특정 객체에 필요한 다른 객체를 프레임워크가 자동으로 연결시켜주는 것을 말한다. 개발자는 선언만 할 뿐 할당은 프레임워크에 의해서 자동으로 이루어진다.
- DI에는 세 가지 방법이 있는데(Field Injection, Setter Injection, Constructor Injection), 생성자 주입이 주로 권장된다.
- IOC(제어의 역행)란 컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어, 객체나 메서드의 호출 작업이 개발자가 아닌 외부에서 결정됨을 의미한다. - 관점 지향 프로그래밍(AOP) 지원
- 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리 할 수 있다.
- OOP에서 공통적인 기능을 Class로 분리했음에도 여전히 중복코드가 발생하는 단점을 해결하고자 나온 방식이며, 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나눠보고 각각 모듈화한다.
- 핵심적인 관점은 개발자가 적용하고자 하는 핵심 비즈니스 로직이고, 부가적인 관점은 핵심 로직을 수행하기 위해 필요한 DB연결, 로깅, 파일 입출력 등이 있다. - 영속성과 관련된 다양한 서비스를 지원
- iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결 할 수 있는 인터페이스를 제공 - 확장성이 높다
- 다른 프레임워크들과의 통합을 지원하기 때문에 이미 수많은 라이브러리가 스프링에서 지원되고 있고 라이브러리를 별도로 분리하기에도 용이하다.
스프링 컨테이너는 자바 객체의 생명주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부른다.
객체의 생성과 소멸 등, 제어의 흐름을 관리하고, 객체들 간의 의존 관계를 런타임 과정에서 알아서 만들어준다.
@Autowired
필요한 의존 객체의 타입에 해당하는 빈을 찾아서 주입
의존성 주입 대상을 찾지 못하면 애플리케이션 구동에 실패한다.
스프링의 실행 순서
- web.xml에 등록된 DispatcherSevlet을 통해 요청에 대해 진입
- DispatcherServlet은 클라이언트로부터 들어온 URL을 HandlerMapping이라는 곳으로 전송 후, URL을 분석하여 알맞은 Controller 이름을 다시 DispatcherServlet으로 보냄
- 전달받은 Controller를 실행
- 실행된 Controller는 스프링에서 제공하는 ModelAndView 객체에 View Page에 전달할 객체와 View Page의 이름을 담고 DispatcherServlet으로 보냄
- ViewResolver를 통해 보여질 View Page를 탐색한 후, View Page를 보여줌
한 줄 정리
프레임워크란, 개발을 편리하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 모아둔 것 입니다.
가이드라인이 있고 개발자를 위한 다양한 도구가 지원되어 개발 시간을 줄일 수 있고 품질이 향상되며 유지보수가 편리하다는 장점이 있지만, 습득하고 이해하는 데 오랜 시간이 걸리며 자유롭고 유연하게 개발하는 데 한계가 있습니다.
라이브러리와 프레임워크의 차이점은, 라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이고, 프레임워크는 프로그래밍을 진행할 때 필수적인 코드, 알고리즘 등과 같은 뼈대나 구조를 지원해준다는 점입니다.
스프링 프레임워크는 자바 언어 기반의 오픈소스 애플리케이션 프레임워크입니다.
경량 컨테이너로서 자바 객체를 직접 관리하고, POJO 방식의 프레임워크이며, DI, IOC, AOP 지원, 영속성 관련 서비스 지원, 높은 확장성 등의 특징이 있어 개발자가 편리하게 개발을 할 수 있고 최소한의 코드 구조 퀄리티를 제공하여 많이 사용됩니다.
스프링 컨테이너는 객체의 생성 및 소멸과 같은 라이프 사이클을 직접 관리하고, 객체들 간의 의존관계를 런타임 과정에서 알아서 만들어 줍니다.
POJO(Plain Old Java Object)는 Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스를 뜻합니다.
불필요한 상속과 같이 기술에 맞는 환경에 의존하는 것을 피하고 필요에 따라 재활용 될 수 있는 방향으로 설계된 오브젝트 입니다.
DI(Dependency Injection)는 개발자가 직접 객체를 생성하는 것이 아니라 컨테이너에서 객체를 생성하고 데이터 간의 의존성을 주입해 의존성을 줄이는 방식입니다.
IOC(Inversion Of Controll)는 컨트롤의 제어권이 개발자가 아닌 프레임워크에 있어, 객체나 메서드의 호출이 외부에서 이루어짐으로써 결합도를 줄이고 유연한 코드를 작성할 수 있게 합니다.
AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍으로, 기존 객체 지향 프로그래밍이 공통적인 기능으로 Class를 분리했음에도 여전히 중복코드가 발생하는 단점을 해결하고자 나왔습니다. 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나눠 각각 모듈화 하며, 핵심적인 관점은 개발자가 적용하고자 하는 핵심 비즈니스 로직이고, 부가적인 관점은 핵심 로직을 수행하기 위한 DB연결, 파일 입출력 등이 있습니다.
IBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다.
다른 프레임워크와의 통합을 지원하기 때문에 많은 라이브러리가 스프링에 지원되고 있고, 또 라이브러리를 별도로 분리하기에도 용이하여 확장성이 높습니다.
스프링부트는 스프링 프레임워크의 복잡한 환경설정을 보완하고자 개발되었습니다.
- Embedded Tomcat 사용
- Starter를 통한 dependency의 자동화로 버전을 맞춰야 하는 불편을 해소
- XML 설정 x
- jar 파일로 간단하게 배포(기존 스프링 프레임워크는 war 파일을 web application server에 담아 배포)
Spring 실행 순서
1. web.xml에 등록된 DispatcherServlet은 클라이언트로부터 들어온 URL을 HandlerMapping에 전송 합니다.
2. HandlerMapping은 URL을 분석하여 알맞은 Controller의 이름을 다시 DispatcherServlet으로 보냅니다.
3. DispatcherServlet이 Contrller를 실행하고, Controller는 ModelAndView 객체에 View Page에 전달할 객체와 View Page 이름을 담아 DispatcherServlet으로 보냅니다.
4. ViewResolver를 통해 보여질 View Page를 탐색한 후 해당 View Page를 보여줍니다.