언어 | 프레임워크 |
Java | Spring |
Python | Django |
Java Script | React |
Node.js | Express |
Ruby | Rails |
웹 개발자라면 혹은 웹 개발자에대해 조금만 흥미를 가지게 되어도 알수있는 것들이다.
특정언어와 그에 해당하는 프레임워크 그렇다면 프레임워크는 무엇일까?
프레임워크란것을 알기위해서는 우선 모듈,패키지,라이브러리의 개념을 알아야한다.
모듈이란?!
- 모듈: 특정 기능을 .py 파일 단위로 작성한 것
- 패키지: 특정 기능과 관련된 여러 모듈을 묶은 것 ( 패키지는 모듈에 네임스페이스(namespace, 이름공간)를 제공한다. )
- 파라이브러리 : 특정 기능과 관련된 여러 패키지와 모듈들을 묶은 것
- * 파이썬에 기본으로 설치된 모듈과 패키지, 내장 함수를 묶어서 파이썬 표준 라이브러리(Python Standard Library)이라고한다.
모듈을 왜 사용하는것일까??
코드로 한번 살펴보자
# project1.py
def add_plus(a,b):
return a+b+3
#엄청나게 긴코드들
print(wecode + add_plus(3,5))
# project2.py
def add_plus(a,b):
return a+b+3
#엄청나게 긴코드들
print(wework + add_plus(9,4))
2개의 다른 프로젝트 파일에서 add_plus()라는 함수를 사용했지만 각기 다른 파일이기에 같은 함수라도 또다시 만들어 줘서 사용하였다.
이럴때 필요한게 모듈이다.
# add_plus.py
def add_plus(a,b):
return a+b+3
# project1.py
import add_plus
#엄청나게 긴코드들
print(wecode + add_plus.add_plus(3,5)) #모듈의 기능을 사용할땐 앞에 모듈이름을 붙여줘야한다.
# project2.py
import add_plus
#엄청나게 긴코드들
print(wecode + add_plus.add_plus(9,4)) #모듈의 기능을 사용할땐 앞에 모듈이름을 붙여줘야한다.
import를 이용해 add_plus.py 를 불러와 각각 프로젝트 파일에서 실행하였다.
이렇게 .py파일 형식으로 되어있어 내부에 특정 클래스,함수,변수들을 담아 놓는게 모듈이다.
패키지란?
패키지(폴더형태)란 저 모듈(.py)들을 모아 놓은것이다.
이것은 코드보단 파일 경로를 보면 좀더 편하다.
package1, package2,subpackage1 은 폴더형태이다.
폴더의 하위에 있는 .py들은 모듈이 되는것이다.
__init__.py 는 패키지를 불러올때 가장 먼저 실행되는 파일이며 특정 버전 이전에서는 패키지를 구분해주는 파일이였다.
(특정 버전 이전 파이썬은 __init__.py파일이 폴더에 없다면 패키지로 인식하지 않았다.)
라이브러리란 뭘까??!
패키지보다 더 상위 개념이다.
더 많은 함수,클래스,모듈,패키지를 속안에 품고 있는것들을 말한다.
프레임 워크란 무엇일까?!
앞에서 본 3가지의 것들은 내가 필요에 의해 코드작성중 불러와서 쓰는것들이다.
요리를 할때 재료를 가져다 쓰는것 처럼 말이다.
하지만 프레임워크는 그것이아니다.
라이브러리 처럼 방대한 모듈,패키지를 보유하고 있는 동시에 규칙을 가지고있다.
프레임워크는 뼈대,기반들을 만들어 놓아 그안에 내 코드를 넣으면 작동하는 방식이고
라이브러리는 내가 작성한 코드에 필요한 코드를 라이브러리에서 불러와서 사용하는 것이다.
카페에서 커피를 레시피에 따라서 만드는것과 집에서 직접 만들때의 차이 같은것이다.
이런 관점에서 라이브러리와 프레임워크를 구분하지만 리액트같은경우에는 라이브러리 처럼 활용할 수 있어서
공식문서에도 라이브러리라고 표기되어있으며 많은사람들이 이와 관련해서 작성한 글들이 많다.
'Python > Django' 카테고리의 다른 글
Project start(2) 프로젝트 기본셋팅 (0) | 2022.06.04 |
---|---|
Project start(1) 미니콘다 설치 및 사용하기 (0) | 2022.06.04 |
가상환경이란? (0) | 2022.06.04 |
백엔드 개발자가 만든다는 API란 무엇일까?! (0) | 2022.06.03 |
Django MVT pattern & work flow (0) | 2022.06.02 |