Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Week1.md #3

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 50 additions & 14 deletions Week1.md
Original file line number Diff line number Diff line change
@@ -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. 스프링 프레임워크의 특징은 무엇인가 - 유빈
스프링의 특징으로 자주 언급되는 내용들은 아래와 같다.
Expand Down