AI&ML/환경구축 & basics

module, library(package), framework, SDK, API 용어 개념 정리

21yujin 2023. 2. 13. 21:00
더보기

face recognition 을 이용한 출입 시스템을 구현하라는 임무를 받았다. 일단 구조를 알아보고자, 구글 검색 첫 번째로 나오는 오픈 소스 코드를 다운 받아 실행을 시켜보았다.

지금까지 기능을 처음부터 끝까지 직접 구현하기 보다는, 오픈소스 코드를 가지고 로봇을 작동시키는 데에 초점을 뒀었다. 지금까지 해오던 대로 구축되어 있는 환경에 라이브러리를 설치하여 작동시켜보았다. 

.

.

성능이 그렇게 좋지 않다...

 

특정 모듈(누구인지 판단해주는 기능_face recognition)에서 학습을 더 시켜야겠다고 생각했다. 하지만 module, library.. 등등의 용어 조차 헷갈리는 부분이 있는 수준이니, 이 부터 잡고 가야겠다고 생각했다.

 

항상... 기초부터..... 명심..........

 

1. 용어 개념 정리

 

  • Module:

프로그램을 구성하는 한 부분.

 

  • Library (Package):

컴퓨터 프로그램에서 자주 사용되는 부분 프로그램들을 모아놓은 것이다. (동적 라이브러리와 정적 라이브러리가 있다.)

 

  • Framework:

설계, 구현을 재사용하게끔 협업화된 형태로 클래스를 제공하는 것.

 

  • SDK:

Software Development Kit.

소프트웨어 개발 도구 모음. 

 

  • API:

Application Programming Interface. SDK에 API가 포함된다.

응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스(Interface: 어떤 기계 간의 장치끼리 정보를 교환하기 위한 수단이나 방법)를 뜻한다. API를 사용하면 구현 방식을 알지 못하는 제품 또는 서비스와도 통신할 수 있다. 예를 들어, 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떤 방식으로 정보를 요청해야 하는지, 어떤 데이터를 제공받을 수 있는지에 대한 규격들을 API라고 하는 것이다.

 

  • Package, Module 간의 관계

-> [Image 2] 참고!

Package 는 여러 module을 모아놓은 폴더라고 생각하면 된다. 예를 들어, face recognition 기능을 구현하려고 할 때, 이미지 속에서 사람 얼굴을 찾아주는 기능, 사람 얼굴이라고 판단된 것 중 누가 누군지 구별해주는 기능 이 모든 것을 포함하는 폴더가 패키지 혹은 라이브러리 라고 한다.

Module은 앞서 이야기 했듯, 각각의 용도 별로 기능을 구현한 파일이다. 

하나의 파일 속에 모든 내용을 다 넣어도 되긴 하지만, 그렇게 되면 이후 배포 시에 수정도 힘들고 필요한 부분만 다운로드 하는 데에 어려움이 있어서 다음과 같이 기능 별로 구분하여 코드를 작성하면 좋다.

 

  • Framework와 Library 차이점

프레임워크에서는, 프레임워크가 당신의 코드를 호출하고

라이브러리에서는, 당신의 코드가 라이브러리를 호출한다.

 

예를 들어, 프레임워크는 자동차의 프레임, 즉 기본적으로 구성하고 있는 뼈대를 말하고, 라이브러리는 자동차의 기능을 하는 부품(헤드라이트, 와이퍼)을 의미한다. 한 번 정해진 자동차의 프레임은 바꾸지 못한다. 소형차를 만들기 위해 뼈대를 사용하는데, 이 뼈대로 SUV를 만들 수는 없다. 그러나 바퀴나, 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바뀔 수 있다.

라이브러리는 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리된 일련의 코드들의 집합을 의미하고,

프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다.

더보기

 

 

2. python에서 불러오는 방법

 

  • Module:

import module1 (module1을 현재 코드로 불러온다)

[Image 1]

  • Library (Package):

import package1 (package1 전체를 현재 코드로 불러온다)

import package1.module1 (package1 중 module1만 현재 코드로 불러온다. '.'은 속성에 접근한다는 뜻이다.)

from package1.module.1 import 함수b (module1 중 함수b 만 현재 코드로 불러온다.)

[Image 2]