From d1909e0cad118ebd00fe7d96dcbfdd910a8be650 Mon Sep 17 00:00:00 2001 From: aminseo1023 <68811482+aminseo1023@users.noreply.github.com> Date: Thu, 8 Sep 2022 20:06:35 +0900 Subject: [PATCH] Update Week1.md refactor: framework vs library --- Week1.md | 64 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/Week1.md b/Week1.md index 3f5479e..ea6f6ad 100644 --- a/Week1.md +++ b/Week1.md @@ -1,28 +1,64 @@ # [백엔드 스터디 in 큐시즘 - D조] Week 1: 스프링의 전반적인 이해 ## #1. 스프링이란 무엇인가 -> 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 -### 1-1. 애플리케이션 프레임워크란? +## #2. 스프링과 스프링 부트의 차이는 무엇인가 -- 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크 -- 애플리케이션 개발의 전 과정을 빠르게, 편리하게, 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크 -- 프레임워크는 애플리케이션의 특정 계층에서 동작하는 하나의 기술에 집중 -- 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 각 분야에 맞는 필요를 채워주고 있기 때문에 빠르고 효과적인 애플리케이션 개발이 가능함. -### 1-2. 경량급? +## #3. 프레임워크와 라이브러리의 차이는 무엇인가 - -- 과거 EJB가 동작하려면 고가의 느리고 무거운 자바 서버(WAS)필요함. 그에 반해 스프링은 가장 단순한 서버환경인 톰갯에서 완벽하게 동작. 즉 만들어진 코드가 지원하는 기술수준은 비슷하더라고 그것을 훨씬 빠르고 간편하게 작성하게 해줌으로서 생산성과 품질 면에서 유리 +1) 프레임워크(≒밀키트) +- 뼈대나 기반구조를 뜻함 +- 제어의 역전 개념이 적용된 대표적인 기술 +- 애플리케이션 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동 등과 같은 기능을 위해 어느 정도 뼈대를 제공해주는 것 +- 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있으며, 완성된 어플리케이션이 아닌 프로그래머가 완성시키는 작업을 해야합니다. +- 객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법 중 하나라고 할 수 있습니다. -### 1-3. 자바 엔터프라이즈 개발을 편하게? +- 프레임워크의 특징 +• 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어 있습니다. +• 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의합니다. +• 컴포넌트들은 재사용이 가능합니다. +• 높은 수준에서 패턴들을 조작화 할 수 있습니다. -- 스프링이 제공하는 기술이 아니라 개발자 자신이 작성하는 애플리케이션 로직에 더 많은 시간과 관심을 쏟게 해줌. +- 프레임워크 예시 +• Java 서버 개발에 사용되는 Spring +• Python 서버 개발에 사용되는 Django, Flask +• 안드로이드 앱 개발에 사용되는 Android +• 아이폰 앱 개발에 사용되는 Cocoa Touch +• 웹 개발에 사용되는 Angular, Vue.js 등 +• 자바 기반의 JSP를 위한 프레임 워크 Struts +• 루비로 작성된 MVC패턴을 이용하는 Ruby on Rails -### 1-4. 오픈소스? +2) 라이브러리(≒팬트리) -- 소스 모두에게 공개, 특별한 라이센스 취득할 필요없이 자유롭게 이용해도 됨. → 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조 +- 단순 활용가능한 도구들의 집합 -## #2. 스프링과 스프링 부트의 차이는 무엇인가 +- 즉, 개발자가 만든 클래스(개발하는데 필요한 것들을 모아둔 도구들의 나열)에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취함 + +- 라이브러리 예시 +• Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등등) +• C++의 표준 템플릿 라이브러리 (STL) +• Node.js에서 npm으로 설치한 모듈 +• HTML의 클라이언트 사이드 조작을 단순화하는 JQuery +• 웹에서 사용자 인터페이스 개발에 사용되는 React.js + + +3) 프레임워크와 라이브러리의 차이점 + +라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게/어디에 있는가(어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐)에 있음 +프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣으며 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있습니다. + +프레임워크는 가져다가 사용한다기보다는 거기에 들어가서 사용한다는 느낌/관점으로 접근할 수 있음 +라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어 +단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용 +반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용됨 + 애플리케이션의 코드가 프레임워크에 의해 사용 +애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 됨 + +* 제어의 역전이란?? -## #3. 프레임워크와 라이브러리의 차이는 무엇인가 +프로그래머가 직접 객체의 생성과 소멸 객체간 관계같은 객체의 제어를 수행하는 것이 아니라, 여러 프레임워크, 컨테이너에서 제어를 수행하는 것 +확장 가능하고 모듈화된 프로그램을 구성하는 느슨한 결합을 달성하기 위해 다양한 종류의 컨트롤을 반전하는 것을 의미 +여기에는 응용 프로그램의 흐름에 대한 제어와 개체 생성 또는 종속 개체 생성 및 바인딩의 흐름에 대한 제어가 포함됨 +이러한 제어의 역전은 클래스간의 결합을 느슨하게 설계하여 테스트가 가능하고 유지보수가 용이하게 만드는데 도움이 됨 ## #4. 스프링 프레임워크의 특징은 무엇인가 - 유빈 스프링의 특징으로 자주 언급되는 내용들은 아래와 같다.