성장通

개발배경지식3) 라이브러리와 프레임워크 본문

컴퓨터 공학 기본/개발배경지식

개발배경지식3) 라이브러리와 프레임워크

백악기작은펭귄 2021. 11. 4. 13:12

"Admin Page를 만들기 위해 백엔드 프레임워크는 무엇을 사용하는 게 좋을까? 그리고 그 안의 추가 기능을 위한 라이브러리는 무엇이 필요할까?"

- 어느 웹개발자의 질문 -

개발자와 협업을 하다보면 프레임워크와 라이브러리란 용어를 자주 듣게 된다. 이것이 무엇이길래 이렇게 자주 언급되는 것일까?

그 개념에 대해 간략하게 알아보자.


프레임워크 (Framework)

프레임워크는 코드의 큰 틀(Frame)을 제공해주고, 그 틀 안에서 개발을 진행할 수 있도록 도와준다.

대표적인 웹프레임워크로는 프런트의 React, Vue, Angular 등이 있고, 백엔드의 node.js, django, Flask 등이 있다.

이러한 프레임워크는 개발에 필요한 아키텍처를 미리 구성하고 있기 때문에, 이를 따로 개발하지 않아도 개발이 가능해 편의성과 안정성을 높여준다.

뼈대가 튼튼해야 멋지고 안전한 건물을 지을 수 있다

프레임워크의 특징

  • 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어 있다.
  • 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.
  • 컴포넌트들은 재사용이 가능하다.
  • 높은 수준에서 패턴들을 조작화 할 수 있다.

라이브러리 (Library)

라이브러리는 프로그램의 특정 기능을 미리 구축해둔 코드의 집합이다.

영상을 재생하는 단순한 기능을 구현하려고 해도 브라우저 대응, 배속 변경, 해상도 변경 등 다양한 기능이 필요하다. 그런데 이때 이러한 기능들을 모두 직접 구현하려고 한다면 개발에 소모되는 시간이 너무 길어지고 실수로 빠뜨리거나 잘못 구현하는 기능이 생길 수도 있을 것이다.

이러한 상황을 방지하기 위해, 영상 재생에 필요한 모든 기능을 미리 구현해 둔 것이 바로 라이브러리이다.

코드 내에서 필요한 라이브러리를 불러와서 필요한 기능들을 그 라이브러리를 통해 구현한다면, 쉽고 빠르게, 또 안정적이게 서비스를 개발할 수 있다.

대표적으로 JQuery, Dojo 등이 있다.

필요한 책이 있다면, 그 책이 있을만한 도서관에 가서 책을 꺼내 읽으면 된다.


결론적으로, 라이브러리와 프레임워크는 모두 '쉽고 안전한 개발을 위해, 누군가가 이미 작성해둔 코드를 가져다 쓰는 것'이라고 할 수 있다.

그렇다면 이 둘의 차이점은 어떤 것이 있을까?

둘을 가르는 가장 대표적인 차이점은 주도성이다. 누가 전반적인 Flow의 주도권을 쥐고 있느냐가 가장 큰 차이점인데, 이에 대해 좀 더 자세히 살펴보자.

일단 라이브러리는, 내가 어떤 기능을 필요로 할 때 그 라이브러리를 우리가 불러와서 사용하게 된다. 흐름의 주도권을 개발자가 갖고 있는 것이다. 그렇기 때문에 쉽게 다른 것으로 대체될 수 있고, 그만큼 비슷한 기능을 하는 라이브러리도 굉장히 많다.

웹 스크래핑 기능을 원할 때, 우리는 request를 사용하기도 하고, BeautifulSoup나 Selenium을 사용하기도 한다. 물론 각각에 약간씩 차이점이 있고, 그래서 목적에 맞는 최적의 라이브러리를 사용하는 것이 중요하지만, 기능 구현 자체에만 초점을 맞춘다면, 어떤 것을 사용해도 무방하다.

반면, 프레임워크의 경우, 반대에 가깝다. 라이브러리는 우리가 필요할 때, 자유롭게 불러와서 사용할 수 있었다면, 프레임워크는 그렇지 않다. 오히려 프레임워크가 정해놓은 규칙에 맞춰서 개발을 해야한다. 무엇을 하기 위해 어떤 부분에 어떤 코드를 어떻게 넣어야 하는지 등을 일일이 정해준다. 그런 만큼, 규칙을 따라가기만 하면 정상적으로 작동하는 프로그램을 만들 수 있지만, 자유도가 낮아 조금이라도 규칙에 어긋나면 프로그램 전체가 망가지기도 한다.

따라서 프레임워크의 구조를 이해하는 것은 중요하며, 하나의 프레임워크를 배우기 위해 수 개월간 공부하기도 한다.

이처럼 라이브러리와 프레임워크는 차이점이 분명히 존재한다. 하지만 개중에는 이 둘의 경계가 명확하지 않은 경우도 다수 존재하는데, 대표적으로 Reacat JS가 그렇다.

React는 기본적으로 라이브러리의 성격을 띄기 때문에 우리가 필요할 때 React를 호출해서 사용한다. 하지만 React는 Component의 작성 규칙을 우리에게 알려주고, 그 규칙에 맞는 Componenet를 작성했을 경우 React는 그것을 불러와서 화면에 띄워준다.

그래서.. 이게 라이브러리야 프레임워크야..?

앞에서 거창하게 설명했지만, 결론적으로 둘을 구분하는 것은 그닥 의미가 없다. 상당수의 개발, 특히 웹 프론트엔드에서는 이 경계가 굉장히 모호하기 때문이다. 실제 개발에서 이 둘의 차이를 정확히 알아야 할 필요도 딱히 없고 말이다.

라이브러리가 뭐고, 프레임워크가 뭐고에 대해서는 대충 개념만 알고, 그 내부의 작동 규칙과 사용법을 익히는 것이 더욱 중요하다.