Framework란?
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을
재사용이 가능하게끔 일련의 협업화된 형태로
클래스들을 제공하는 것
Frame = 어떤 대상의 큰 틀이나 외형적인 구조
소프트웨어 관점에서의 Framework? -> 어떠한 애플리케이션을 만들기 위한 틀, 구조를 제공
Java의 Interface => 추상 메서드만 정의되어 있는 뼈대 구성!
ex) Collection Framework
: Map, Set, List 같은 자료 구조들은 자주 사용하기 때문에
비슷한 유형들의 데이터들을 가공, 처리하기 쉽도록
표준화된 방법 제공
--> 인터페이스와 인터페이스들을 구현한 구현체들의 집합.
따라서 Framework = 기본적으로 프로그래밍 하기 위한 틀, 구조 제공
장점
1. 효율적으로 코드 작성 가능
기본 구조가 있으니, 핵심 로직 개발에만 집중 가능
2. 정해진 규약 有 --> 애플리케이션 효율적 관리 가능
규약이 있으면 유지보수, 코드 재사용, 기능 확장이 쉬움
단점
1. Framework 학습 필요
2. 자유롭고 유연한 개발 어려움
집의 뼈대를 바꾸게 된다면 큰 공사가 필요하듯이..
(Framework) vs (Library)
Library = 애플리케이션을 개발하는데 사용되는 일련의 데이터 및 프로그래밍 코드
애플리케이션을 개발할 때 필요한 기능 미리 구현해놓은 집합체
ex) 자동차의 경우
자동차의 차체, 뼈대 = Framework
자동차의 부품(바퀴, 핸들, ...) = Library
자동차의 뼈대는 바꾸기 어렵지만 부품 교체는 비교적 쉽다!
ex) IoC(Inversion Of Control, 제어의 역전)
Library : 개발자가 필요한 기능이 있을 시 라이브러리를 호출해서 사용
애플리케이션 흐름의 주도권 = 개발자!
↕
Framework : Framework에서 개발자가 작성한 코드를 사용해서 애플리케이션의 흐름 생성
애플리케이션 흐름의 주도권 = Framework! (개발자 X)
Spring Framework란?
Spring Framework의 장점
- POJO(Plan Old Java Object)기반의 구성
- DI(Dependency Injection) 지원
- AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원
- Java 언어를 사용함으로써 얻는 장점
4 : Java = 정적 타입 언어
변수 타입, 메서드 입출력 타입 강제해줌
코드 수정, 보완 시 오류 사전 방지 가능
* Java를 사용하는 Framework :
Apache Struts2, Apache Wicket, JSF(Java Server Faces), Grails 도 있음!
이 중 Spring Framework를 많이 쓰는 이유는 Spring이
기본목적 (개발 생산성 향상 & 애플리케이션 유지 보수 용이)
그 이상을 달성할 수 있게 해주기 때문!
Spring Framework을 학습하게 되면
1. 객체 지향 설계 원칙에 잘 맞는 재사용, 확장 가능한 애플리케이션 개발 스킬을 향상시킬 수 있다
2. 보다 나은 성능, 서비스의 안정성이 필요한 기업용 엔터프라이즈 시스템을 제대로 구축하기 위한 능력
을 기를 수 있다
Spring Framework를 배워야 하는 이유
Spring을 본격적으로 도입하기 전의 기술들
1. JSP (= Java Server Page)
: View 페이지쪽 코드 + 서버쪽 코드 섞여있는 형태
(html / JavaScript + Java)
So, 웹 디자이너/퍼블리셔, 프론트/백 개발자 간의 효율적 협업이 어렵다.
코드 자체가 길어져서 가독성이 떨어지고, 복잡했다.
2. 서블릿 (Servlet)
: Servlet? 클라이언트 웹 요청 처리에 특화된 Java 클래스의 일종
(* Spring 웹 요청시에도 내부 Servlet 사용 중)
Servlet 사용? : Servlet위한 자바 코드가 클라이언트 코드에서 분리됨 -> 별도의 Java 클래스로 관리
--> 클라이언트 / 서버 간 역할 어느정도 분리 됨
but 코드 자체가 길고,
데이터를 가공하는 비즈니스 로직이 없고,
데이터 액세스 로직(가공된 데이터 db에 저장)이 존재하지 않는다.
*서블릿 컨테이너 (Servlet Container)
Servlet 기반의 웹 애플리케이션 실행해줌
+ Servlet 생명주기 관리, Thread Pool 생성 --> Servlet ~ Thread 매핑해줌
ex) 아파치 톰캣(Apache Tomcat)
3. Spring MVC
서블릿에서는 클라이언트 요청 데이터를 꺼내오는 작업, 캐릭터셋 모두 개발자가 지정해주어야 함
Spring MVC --> 이런 작업들을 모두 Spring에서 처리해줌
Java 웹 애플리케이션의 제작 방식이 획기적으로 변하게 됨!
but Spring 기반 애플리케이션의 기존 구조를 잡는
설정 작업이 여전히 불편하다 (web.xml, ...)
4. Spring Boot
Spring MVC의 설정이 복잡했던 문제가 개선된 Framework
데이터 베이스 액세스 처리까지 가능하다
코드의 길이는 크게 바뀌지 않고 오히려 깔끔해짐!
설정의 복잡함도 대신 처리해줌 --> '애플리케이션 핵심 비즈니스 로직 개발'에만 집중할 수 있음!
'Spring' 카테고리의 다른 글
[Spring] 아키텍쳐(Architecture)란? / Spring Framework 모듈 구성 보기 (0) | 2022.10.12 |
---|---|
[Spring] PSA 란? (Portable Service Abstraction) (0) | 2022.10.12 |
[Spring] AOP란? (Aspect Oriented Programming) (0) | 2022.10.12 |
[Spring] IoC(Inversion of Control) / DI(Inversion of Control) 이란? (0) | 2022.10.12 |
[Spring] POJO란? (Plain Old Java Object) (0) | 2022.10.11 |
댓글