Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

영우

프레임워크와 라이브러리 본문

CS

프레임워크와 라이브러리

duddn 2023. 11. 20. 03:39

프레임워크는 무엇인지 ?

  • A framework is a structure that you can build software on.
  • 프레임워크는 소프트웨어를 구축할 수 있는 구조임

왜 프레임워크를 사용해야하는가 ?

  • 처음부터 작업할 필요가 없으므로 시간이 절약됨
  • 충분히 테스트 된 프레임워크를 사용할 경우 오류위험이 줄어듬
  • 구조화가 잘 되어있어 코드의 유지보수가 용이함

웹 프레임워크 종류

  • Django, Rails, Angular, Nest, React 등등

프레임워크 vs 라이브러리

  • 공통점
    • 우리의 프로젝트를 위해 누군가가 작성한 코드를 사용함
    • 어플리케이션을 만드는데 도움을 받을 수 있음
  • 라이브러리
    • 자신만의 코드를 작성하는데 사용할 수 있는 이전에 작성된 코드세트
    • 내가만드는 프로그램에 필요한 부품들을 잘 정리한 소프트웨어
    • 내가 라이브러리를 호출함
    • 원하면 빠르게 다른 라이브러리로 대체 가능함
  • 프레임워크
    • 구체적인 내용이 필요한 지원 구조
    • 프레임워크는 프로젝트의 공통적인부분은 프레임워크가 만들어 놓고, 달라지는 부분을 우리가 수정하도록 해주는 반제품을 제공함
    • 프레임워크가 나의 코드를 호출함(제어의 역전)
    • 프레임워크의 규칙에 따라 코딩

  • 프레임워크에는 종종 라이브러리가 포함된다
  • 라이브러리와 프레임워크의 개념이 모호한 경우 많음
  • 리액트의 경우 라이브러리와 프레임워크의 구분이 모호함리액트가 우리의 컴포넌트를 부름 → 이 측면에서는 프레임워크
  • 내 애플리케이션이 UI를 빌드할때 내가 리액트를 부름 → 이 측면에서 라이브러리

프레임워크 구현

프레임워크가 나의 코드를 호출하는 방법을 알아보기위해, 제어의 역전을 구현해보자.

유저의 코드를 사용하는 내가만든 프레임워크이다.

import userClass from './usercode.js';

console.log('node app.js');
new userClass().userLogic();

내가 만든 프레임워크의 규칙은 다음과같다.

  1. usercode.js파일을 만들것.
  2. 클래스와 userLogic메서드를 구현하고, 클래스를 export default 할 것.

내 프레임워크의 규칙을 따라 파일을 만들고, 메서드를 구현하면 프레임워크가 내 코드를 실행시켜준다.

이것이 제어의 역전 개념이다. 프레임워크가 나의 코드를 불러 실행시키게 된다.

유저코드 예시이다.

export default class myClass{
    userLogic(){
        console.log("유저의 영역");
    }
}

실행결과이다

node app.js
유저의 영역

NEST에서 확인해보자

NEST의 처음 실행부분인 bootstrap 함수이다.

NestFactory.create로 나의 루트모듈이 들어있는 AppModule을 전달해 서버를 뚝딱 만들어낸다.

우리는 NestFactory의 create메서드를 사용했다. 우리의 코드로 create를 제어했기 때문에 제어권이 우리에게 있댜.

또한 app.listen(3000)으로 listen할 포트를 내가 정할 수 있다.

💡 쉬는시간) NestFactory 클래스의 실제 구현체 이름은 NestFactoryStatic이다. 하지만 static클래스는 자바스크립트에 존재하지 않는다. 대신 코어모듈에서 *exports*.NestFactory = new NestFactoryStatic(); 로 인스턴스화 시켜 사용한다.

NEST에는 lazy-loading module이 있다. 이 모듈은 필요시 유저의 모듈을 지연로딩하는 기능을 제공한다.

  • lazy-loading-module이란
  • 기본적으로 NEST의 모든 모듈은 즉시 로드되지만, 실행시간이 중요한 서버리스 환경에서 시작되는 앱의 경우 병목현상이 발생할 수 있다. 지연로딩은 필수적인 모듈만 로드하여 시작하는 시간을 줄이고, 다른 모듈은 필수적인 모듈의 로딩이후 비동기적으로 로딩할 수 있게 한다.

아래는 LazyModuleLoader클래스의 메서드이다. 유저의 코드인 모듈인스턴스를 불러와 관리한다.

어디선가 아래의 클래스로 나의 모듈을 등록하고 NEST가 알아서 나의 코드를 실행시킬것이다. 이는 내 코드의 제어를 프레임워크가 하는것으로 해석할 수 있다.

루트모듈로 전달하는 AppModule의 일부이다.

  • 위의 사례들을 라이브러리와 프레임워크에 초점을 맞추어 해석하였다.
  1. 라이브러리
    1. 내가 제어권을 가짐
      1. NestFactory.create()나 app.listen을 보면 내가 NEST의 코드조각을 불러와 내 프로젝트에 활용한다.
      2. 이것은 분명 내가 NEST의 코드를 제어하므로 라이브러리의 특성이다.
  2. 프레임워크
    1. 프레임워크가 제어권을 가짐
      1. 분명히 프레임워크가 lazyLoader에 나의 모듈을 등록한 후, 나의 코드를 호출할 것이다.
      2. 이것은 프레임워크가 나의 코드를 제어하므로 프레임워크의 특성이다.
    2. 프레임워크의 규칙을 따름
      1. NEST에는 엄격한 규칙이 있다.
      2. 당장 프로그램을 시작하는 부분인 bootstrap부분만 보아도 프레임워크의 규칙으로 create와 listen을 실행해야 원하는방향으로 동작한다.
      3. 부트스트랩으로 프로그램을 실행시키고, 모듈로 컨트롤러, 프로바이더를 관리하는 규칙을 지켜야한다.

출처

'CS' 카테고리의 다른 글

도커는 뭘까?  (0) 2024.06.28
segmentation fault란 뭘까?  (0) 2024.06.12
함수형 프로그래밍은 왜 레이스 컨디션이 발생하지 않을까?  (0) 2024.06.04