본문 바로가기
ASAC

[ASAC 06] 프레임워크와 라이브러리 차이, 웹 애플리케이션 프레임워크

by suhsein 2024. 8. 28.
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를 사용할 때 보통 세 가지를 명시한다.

웹 애플리케이션 프레임워크

왜 사용할까?

백엔드 프레임워크는 개발을 위한 다양한 편의를 제공한다. 백엔드 프레임워크를 사용하지 않는다면 개발자는 다음과 같은 문제들로 매우 고통받을 것이다.

  1. 어떤 요청이 들어왔는지 일일이 확인해서 요청을 매핑해야 한다.
    => RequestMapping을 직접 개발해야 한다.
  2. Request : json  형태로 오는 요청 데이터를 객체 로 변환하기 위해서 역직렬화 가 필요하다.
  3. Response : 객체 인 응답 데이터를 json으로 변환하여 반환하기 위해 직렬화 가 필요하다.
    => Request와 Response를 위해 MessageConverter (잭슨. json 변환)를 직접 개발해야 한다.

등장

Java, C, C#, Ruby, Python 등은 본래 애플리케이션 개발을 위한 언어

  • WAS 등장
  • 웹 애플리케이션 프레임워크 등장 : 웹 서버 개발의 모든걸 제공
    => 언어마다 웹 개발을 지원하는 프레임워크를 제공함. 애플리케이션 뿐만 아니라 웹 개발에서도 사용하게 되었다.

Python-Django, Java-Spring, C#-ASP.NET 등

제공 기능

웹 애플리케이션 프레임워크의 제공 기능

  1. Request Mapping : 요청 매핑
  2. Thread 관리
    => 애플리케이션(요청 처리), db 접급 스레드 생성, 할당, 관리
  3. DB 동시성 제어
    => 트랜잭션 스케줄 직렬화. (4번의 직렬화(데이터 변환)과 다름.)
  4. Serialization / Deserialization
    => 데이터 변환 json <> object
  5. Security
    => CORS 등 보안 관련 정의 및 처리
  6. Authentication / Authorization
    => 매 요청마다 해당 요청이 권한에 맞게 요청한건지 보안 처리
728x90