프레임워크
A framework could be a collection of libraries.
프레임워크는 라이브러리의 모음일 수 있습니다.
Frameworks has the control to call an action.
프레임워크는 액션을 호출할 수 있는 제어권을 가지고 있습니다.(제어의 역전)
요약 해보자면 프레임워크는 라이브러리의 모음이고 제어권을 가지고 있다라고 할 수 있다.
프레임워크를 표현하면 아래와 같다.
프레임워크는 라이브러리의 모음일 수 있고 제어권을 갖고 우리의 코드나 라이브러리 코드를 호출하고 있는 것을 표현하였다.
라이브러리
A library is a collection of precompiled routines available for a computer program to use.
라이브러리는 컴퓨터 프로그램에서 사용할 수 있는 재사용 가능한 동작의 모음입니다.
If a resource is needed, the program calls the library for it.
리소스가 필요한 경우 프로그램이 라이브러리를 호출합니다.
요약을 해보자면 라이브러리는 재사용 가능한 동작의 모음이고 프로그램에 의해서 호출된다라고 할 수 있다.
프레임워크와 라이브러리의 관계로 표현을 해보면 위와같다. 여전히 프레임워크는 제어권을 갖고 우리의 코드나 라이브러리의 코드를 호출하고 있다. 그리고 이렇게 호출된 우리의 코드는 필요한 기능이 있을 경우 라이브러리를 호출해서 필요한 기능을 수행하고 있는 모습이다.
그런데 계속해서 프레임워크는 제어권을 가지고 있다. 그리고 라이브러리는 프로그램에 의해서 호출을 당한다라고 하는데 이 개념이 잘 와닿지 않을 수 있다. 그래서 내부적으로 어떤 동작의 차이가 있는지 알아보려고 한다.
이것은 AssertJ라는 라이브러리를 통해서 값을 검증하는 코드이다. 호출 스택을 보면 우리가 실행한 메인 메서드가 실행 되고 메인 메서드에서 필요한 라이브러리인 AssertJ 라이브러리를 호출하고 있는 것을 확인할 수 있다. 이처럼 라이브러리는 프로그램에 의해 호출이 된다라는 것을 확인할 수 있다. 그리고 이것을 다시 관계식으로 표현 해보면 오른쪽 그림과 같이 실행된 우리의 코드가 필요한 기능을 실행하기 위해서 라이브러리를 호출하고 있는 모습이다. 이것은 간단한데 프레임워크와는 어떤 차이가 있을까?
위에는 JUnit이라는 프레임워크를 사용해서 단위 테스트를 진행한 호출 스택이다. 먼저 여기에 invoke라는 좀 생소한 메서드가 나와 있는데 간단히 말해서 메서드를 실행하는 메서드라고 이해를 하면 된다. invoke가 실행하고 있는 메서드가 뭔지 따라가 보면 단위 테스트를 하고 싶었던 CalculatorTest라는 클래스에 addTest() 라는 메서드를 담고 있다. 결과적으로 invoke가 실행되어 위와같이 addTest() 메서드가 실행되었다. 그리고 addTest()에서는 값을 검증하기 위해 AssertJ라는 라이브러리를 호출하고 있다.
프레임워크가 제어권을 갖고 우리의 코드를 호출하고 호출이 된 우리의 코드에서 다시 필요한 기능이 있을 경우 라이브러리를 호출하는 형상을 띄고 있다. 그렇다면 Spring은 프레임워크일까? 라이브러리일까? 프레임워크이다.
이것 또한 제어권을 통해서 한번 살펴보자. 이 호출 스택은 컨트롤러에 요청이 들어왔을 때 어떻게 동작하는지에 대해서 기록한 호출 스택이다. 위와 같이 invoke라는 메서드가 호출되고 있어서 invoke라는 메서드가 담고 있는 것을 찾아가보니
MainController.hello()라는 메서드를 실행하고 있다. 그래서 hello() 메서드가 결과적으로 실행되고 우리의 코드를 필요에 의해서 사용하므로 제어권이 Spring에 있다. 따라서 'Spring은 프레임워크다' 라고 할 수 있는 것이다.
API (Application Programming Interface)
An application programming interface (API) is a set of tools, definitions, and protocols for integrating application software and services.
API(애플리케이션 프로그래밍 인터페이스)는 애플리케이션 소프트웨어와 서비스를 통합하기 위한 도구, 정의 및 프로토콜의 집합입니다.
Application: 응용프로그램 (서비스)
Programming: 개발
Interface: 접점, 경계면
=> 응용프로그램 개발에 쓰이는 접점
우리의 코드가 필요한 라이브러리가 있는데 그 라이브러리를 호출하는 것 또한 개발에 쓰이는 접점을 제공해 주는 것이다. 그래서 이런것 또한 API라고 할 수 있고 프레임워크에서 우리의 코드가 필요할 경우 호출하는 것 또한 API라고 할 수 있다. 예를 보자면, 먼저 Math 라이브러리에서 난수를 생성하는 메서드가 필요할 경우에 random()이라는 메서드를 호출을 한다.
이렇게 개발에 필요한 접점을 제공함으로 이것 또한 Math 라이브러리 API라고 할 수 있다. 그리고 어노테이션을 달아 스프링 프레임워크에서 필요한 우리 라이브러리를 호출할 수 있도록 알려주는 것 또한 개발에 필요한 접점을 제공하는 것이므로 API라고 할 수 있다.
이러한 개념을 확장하면 서로 다른 서비스 간에 개발에 필요한 접점을 제공하는 것 또한 API라고 할 수 있다. 그리고 서로 다른 응용 프로그램 간에 개발에 필요한 접점을 제공하는 것 또한 API라고 할 수 있다. 일반적으로는 이러한 서로 다른 서비스 혹은 서로 다른 응용 프로그램 간에 생기는 접점을 API라고 한다.
정리
먼저 프레임워크, 라이브러리, API의 포함 관계인데 앞에서 알아본 것과 같이 프레임워크는 라이브러리를 포함할 수 있으므로 프레임워크가 라이브러리보다 더 상위의 개념이다 라고 말할 수 있다. 그리고 일반적으로 API는 서로 다른 서비스 혹은 응용 프로그램 간에 접점을 제공하는 것을 API라고 했는데, 이러한 API는 프레임워크나 아니면 라이브러리를 통해서 개발되므로 API가 프레임워크나 라이브러리를 품고 있다라고 포함관계를 위와 같이 정리하였다.
그리고 호출인데 프레임워크의 경우에는 호출 제어권을 갖고 코드나 라이브러리를 호출하는 것을 알 수 있다. 그래서 프레임워크는 능동적인 호출 제어권을 갖고 있고 라이브러리와 API의 경우에는 필요에 의해서 호출이 되므로 수동적인 호출 제어권을 갖고 있다라고 정리했다.
그렇다면 각각을 언제 사용해야 하는가?
프레임워크의 경우에는 기본적인 틀이 갖춰진 상태에서 개발을 원할 때 프레임워크를 사용할 수 있다.
라이브러리의 경우에는 프레임워크보다 유연한 동작이 필요할 때 라이브러리를 사용할 수 있다.
API의 경우에는 서로 다른 서비스나 프로그램 간의 연결이 필요할 때 API를 사용할 수 있다.
참고
https://www.youtube.com/watch?v=yKEwNVbAFC0&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
'개발 관련 강의 정리 > 10분 테코톡' 카테고리의 다른 글
[10분 테코톡] 참새의 history api 정리 (0) | 2023.06.17 |
---|---|
[10분 테코톡] 파인의 쿠키와 웹 스토리지 정리 (0) | 2023.06.16 |
[10분 테코톡] 기론, 리버의 JDK Dynamic Proxy와 CGLIB 정리 (0) | 2023.06.14 |
[10분 테코톡] 🍻주모의 SPA 정리 (0) | 2023.06.13 |
[10분 테코톡] 꼬재의 클로저 정리 (0) | 2023.06.12 |
댓글