라이브러리가 뭘까..?

김현재·2021년 7월 15일
4
post-thumbnail

리액트는 자바스크립트 라이브러리다..라니까 쓰긴 하는데..그래서 진짜 라이브러리가 뭘까..?
정확한 라이브러리의 개념을 알아보고 프레임워크와 비교해보자.



라이브러리란

라이브러리란 특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일이다.
library_예시

소프트웨어 개발 시 공통으로 사용할 수 있는 특정한 기능들을 모듈화*한 것으로, 완전한 프로그램이 아닌, 특정한 부분 기능만을 수행하도록 제작된 프로그램이다. 이렇게 자주 쓰이는 함수들을 라이브러리에 모아 프로젝트 시작 시 코드에 해당 라이브러리 파일만 include 시켜주면 그 안에 있는 함수를 쉽게 사용할 수 있다.

💡모듈 : 특정 기능별로 나누어지는 프로그램 덩어리


장점

만약 라이브러리를 사용하지 않고 모든 함수를 main 에 집어 넣는다면, 수정할때 마다 main 코드를 수정한 후, 건건이 컴파일을 해야 된다. 허나 라이브러리를 사용하여 자주 사용되는 특정한 기능을 main 함수에서 분리시키면 프로그램 유지, 디버깅이 수월해지며, 컴파일 시간을 좀더 단축 시킬 수 있다.



종류

표준 라이브러리

특정한 언어의 개발 환경에 기본적으로 포함된 것들을 보통 표준 라이브러리라고 부른다. 기본적인 기능 수행과 더불어 디버깅, 성능측정 등을 위한 별도의 API가 존재한다.

런타임 라이브러리

프로그램이 실제 환경에서 실행되기 위해 필요한 모듈들이다. 대부분 표준 라이브러리에서 필요한 것들만 제공되거나, 스크립트의 실행기 등을 지칭한다.

정적 라이브러리(LIB)

정적 라이브러리는 라이브러리를 내 코드에 include 했을 때, 컴파일 타임에 내 소스와 결합되는 것을 말한다.
즉, 컴파일을 하면 라이브러리 내 함수들이 모조리 복사되어 작업중인 프로그램 소스코드 위에 붙여넣기 된 채로 컴파일 되는 것이다. 이렇게 되면, 간편하게 실행파일만을 건내주면 되기에 배포가 쉽지만, 실행파일의 크기가 링크된 라이브러리 용량에 따라서 커지게 된다. 또한, 컴파일시 적재되므로 유연성이 떨어진다는 단점도 있다. 이런 이유로, 최근에는 정적라이브러리는 지양되고 있는 추세이다.

동적 라이브러리 (DLL)

동적 라이브러리는 프로그램 실행시, 해당 프로그램이 DLL내의 함수가 필요할 때에만 DLL에 접근하여 사용한 후, 다시 프로그램 코드로 돌아오는 방식으로 실행된다!
따라서 DLL파일은 컴파일 후에도 실행파일과 독립되어있으며, 배포시에도 이 DLL파일의 위치를 실행파일에서 설정한 공간에 위치시켜야 한다.

동적 라이브러리의 장점

프로그램 개발은 모듈별로 나뉘는 것이 중요한데, DLL은 바로 이 모듈화를 이루게 해준다.
예를 들면,
실행파일인 내 코드는 아주 간단한 코드이며, DLL을 사용하는 용도만 가지고 있다고 치자.
핵심 코드는 DLL 안에 있는 상황에서 만약 프로그램의 성능을 높이고 싶거나, 핵심 모듈을 수정하고 싶을 때,
정적 라이브러리 방식이었다면 해당 라이브러리를 수정한 후 다시 컴파일을 했겠지만, DLL방식이라면, 코드는 건드리지 않고 해당 DLL만 수정한 후 DLL파일만을 배포하면 자동적으로 프로그램이 업그레이드 된다.



라이브러리와 프레임워크의 차이점

프레임워크란?

설명을 위한 예로, 우리가 장난감 조립 키트를 하나 가지고 있다고 치자. 이걸로 장난감을 만드려면 장난감 키트가 제공해주는 일정한 부품들과 틀을 사용해야 하며, 메뉴얼의 규칙을 지키면서 만들어야 할 것 이다.

이렇듯 일정한 형태의 틀, 부품을 가지고 다양한 형태의 결과물을 만드는 것이 바로 프레임워크이다.

프레임워크는 어떤 프로그램을 쉽게 만들기 위한 코드, 알고리즘, 데이터베이스 연동 등과 같은 기능을 어느정도 제공해 줌으로서 소프트웨어의 생산성과 품질을 높이는 역할을 한다. 이러한 틀과 규약을 제공해주기에 객체 지향 개발을 하면서 일관성 부족 등의 문제를 해결해 주기도 한다.

결론적으로 소프트웨어에서의 프레임워크는 '특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램' 으로 칭할 수 있다.



그래서 둘의 차이점은?

이 둘의 결정적인 차이는 바로 자유도이다.

위 예시의 장난감을 조립하다가 파츠가 너무 작아서 손으로 잘 집히지 않는 상황이라고 치자. 이때 우리는 핀셋을 사용해서 파츠를 조립할 수 도 있고, 그대로 손을 써서 파츠를 조립할 수도 있다. 둘 중 무엇을 써도 장난감을 똑같이 만들 수 있다. 즉, 사용자가 편한대로 알맞은 도구를 써서 제작해 나가면 되는 것이다. 이 때, 사용자가 편한대로 사용하는 도구가 바로 라이브러리로 볼 수 있다!

프레임워크를 가지고 프로그램을 만들기 시작하면 지정된 규약(규칙)을 꼭 지키면서 만들어야한다. 반면 라이브러리는 도구일 뿐이다. 프로그램 제작에 라이브러리를 어떻게 쓰던 전혀 문제되지 않기에, 프레임워크가 가지고 있는 규약을 지키면서 나머지 자유로운 부분은 어떠한 도구를 써도 무방하다.



참고자료

profile
쉽게만 살아가면 재미없어 빙고!

2개의 댓글

comment-user-thumbnail
2021년 7월 17일

이렇게 여러 자료들 함쳐서 정리해주시는거 너무 좋습니다. ✨
라이브러리와 프레임 워크의 차이도 정확히 몰랐는데 👍
이 시리즈... 계속 응원해요!!

1개의 답글