DolphinDash

CharField의 max_length는 기준이 뭘까? ( django ) 본문

개발Log

CharField의 max_length는 기준이 뭘까? ( django )

DolphinDash 2023. 8. 12. 05:43

모델을 짤 때 max_length가 나오는데 이건 도대체 기준이 뭘까?

아스키 코드처럼 byte단위로 한글을 넣으면 2byte, 영어를 넣으면 1byte인가?

javascripts처럼 UTF-8인코딩을 해서 3byte가 나올려나?

지금 생각하면 이상한 방향으로 생각하고 있었는데 학교 선배가 답을 말했다.

파이썬이니까 len()만큼 나오지 않을까?

처음엔 에이 ~ 하고 넘겼는데 생각해보니 django는 파이썬이고 당연히 그것 먼저 생각해야했는데...생각이 짧았다.

그래서 확실히 확인 하기 위해서 코드를 뜯어봤다. (구글링에도 안나옴, 너무 바보같은 질문 아닐까)

__init__.py

먼저 CharField에 max_length를 선언해주는 곳을 발견했다. 다른건 대충 넘기고 self에 선언안된 max_length가 있으니 Field에서 상속받았나보다.

같은 파일에 Field에서 생성할 때 max_length를 선언하는 걸 확인했다. 그리고 같은 위치에

check라는 함수도 정의 되있는데 이 중 하나라도 return에 무언가가 담겨서 나오면 이를 출력하는 형식인것 같다. 그래서 return들을 하나씩 확인 하던 도중 반가운 len()을 발견했다.

그리고 그 아래에 반가운 문자열이 보였다.

어?! max_length가 너무 작아서 longest value에 맞지 않는다? 뭔가 말이 이상한데 일단 문자열이 원하는 크기인지 확인하는 것이니 혹시나해서 badrequest를 만들어 에러를 내봤다.

아쉽게도 다른 return이 와서 이에 대해 파고 들어가 봤지만 보이지 않아 구글링을 해보았다.

해당 request의 부분이 코드에서 생략되어 있기에 위에서 Error를 체크하기 위해 len()을 사용했으니 일단은 len()를 사용하는 게 거의 확실하다고 볼 수 있다. 코드 파고 드면서 든 생각이 이런걸 만들 생각을 어떻게 했을까싶다. 이제 파이썬을 꽤나 많이 사용했다고 생각했는데 class의 상속과 함수들이 범벅이 되있는 걸 보고 역시 유명하고 유익한 프로그램을 만드는건 극한의 효율(꼼수)을 추구하는 실력이 깔려있구나 싶었다.