728x90
이 글은 ASAC 06기를 수강하며 강의 자료 참고 및 추가 자료 수집을 통해 작성된 글입니다.
라이브러리와 프레임워크의 차이
해결하는 문제 비교
- 라이브러리 : 단일 문제, 단일 목적을 위해서 개발되었다. 그래서 라이브러리는 목적이 뚜렷하다.
- 프레임워크 : 다수 문제, 다수 목적을 위해 개발된 라이브러리의 집합이다.
- 다수의 라이브러리 제공
ex) Message Converter, Security, DB 제어를 위한 기능 등 - 다수의 인터페이스 제공
- 선택권이 쥐어지지만, 흐름에 대한 제어권은 개발자에게 없다. 프레임워크에 어느 정도 제어권이 마련된 상태.
- 다수의 라이브러리 제공
좀 더 정확하고 기술적인 차이 : 개발의 흐름에 대한 제어권이 어디에 있는가??
제어권 관점에서의 비교
- 라이브러리
- 합친다 : 라이브러리는 상세 구현체를 제공하고, 개발자는 필요한 기능 사용을 위해 라이브러리를 가져와 코드와 합친다.
- 결합을 위해 라이브러리에 대한 이해, 자신이 작성한 코드에 대한 이해 필요.
- 즉, 개발자는 라이브러리 사용에 대한 책입과 모든 제어권을 갖는다
- 프레임워크
- 꽂는다 : 인터페이스에 원하는 라이브러리를 쓰거나 로직 구현
- 프레임워크는 껍데기만 주어질 뿐 구현체는 개발자가 직접 개발하거나 다른 라이브러리들을 가져와 꽂는다.
- 무한한 자유도(다수의 라이브러리, 다수의 인터페이스 제공)를 가지지만,
짜여진 틀 안에서 상세 구현을 해야하는 제약이 있다. - IoC(Inversion of Control, 제어권의 역전) : 개발, 흐름 제어권이 개발자에서 프레임워크로 이동
프레임워크에서 라이브러리 관리
프레임워크는 개발 편의성을 위한 다수의 라이브러리를 제공한다. 라이브러리를 추가, 삭제, 업데이트하기 위해서 보통 Package Manager 를 사용한다.
ex) Javascript-npm, Python-pip, Ruby-bundler, Java-Maven, Gradle
Package Manager를 사용할 때 보통 세 가지를 명시한다.
웹 애플리케이션 프레임워크
왜 사용할까?
백엔드 프레임워크는 개발을 위한 다양한 편의를 제공한다. 백엔드 프레임워크를 사용하지 않는다면 개발자는 다음과 같은 문제들로 매우 고통받을 것이다.
- 어떤 요청이 들어왔는지 일일이 확인해서 요청을 매핑해야 한다.
=> RequestMapping을 직접 개발해야 한다. - Request : json 형태로 오는 요청 데이터를 객체 로 변환하기 위해서 역직렬화 가 필요하다.
- Response : 객체 인 응답 데이터를 json으로 변환하여 반환하기 위해 직렬화 가 필요하다.
=> Request와 Response를 위해 MessageConverter (잭슨. json 변환)를 직접 개발해야 한다.
등장
Java, C, C#, Ruby, Python 등은 본래 애플리케이션 개발을 위한 언어
- WAS 등장
- 웹 애플리케이션 프레임워크 등장 : 웹 서버 개발의 모든걸 제공
=> 언어마다 웹 개발을 지원하는 프레임워크를 제공함. 애플리케이션 뿐만 아니라 웹 개발에서도 사용하게 되었다.
Python-Django, Java-Spring, C#-ASP.NET 등
제공 기능
웹 애플리케이션 프레임워크의 제공 기능
- Request Mapping : 요청 매핑
- Thread 관리
=> 애플리케이션(요청 처리), db 접급 스레드 생성, 할당, 관리 - DB 동시성 제어
=> 트랜잭션 스케줄 직렬화. (4번의 직렬화(데이터 변환)과 다름.) - Serialization / Deserialization
=> 데이터 변환 json <> object - Security
=> CORS 등 보안 관련 정의 및 처리 - Authentication / Authorization
=> 매 요청마다 해당 요청이 권한에 맞게 요청한건지 보안 처리
728x90
'ASAC' 카테고리의 다른 글
[ASAC 06] 데이터 직렬화와 역직렬화 (0) | 2024.08.28 |
---|---|
[ASAC 06] 백엔드 개발의 목적 (1) | 2024.08.28 |
[ASAC 06] SSL 인증서 (0) | 2024.08.27 |
[ASAC 06] CSS 개발 확장 도구 (0) | 2024.08.27 |
[ASAC 06] Javascript 프레임워크 동작원리(2) - Bundling & Code Splitting (0) | 2024.08.27 |