Fat models 에 대한 고찰_
멘토님께서 백엔드의 코드에 대해 피드백을 주셨다! 팀원분과 얘기해 본 결과 views.py 에 모든 로직이 들어가있어 너무 방대해진 것이라는 의견에 도달했다! (맞는지는 아직 모르겠다) 그래서 한번 보내주신 링크를 참고해서 공부를 진행해봤다.
참고 자료
https://www.softkraft.co/django-best-practises/
+ Two scoops of Django 3.X (https://product.kyobobook.co.kr/detail/S000001033038)
일단 일차적으로 Fat models 에 대해 매우 라이트하게 읽었을 때 배운 점
1. business logic 을 모델에 넣을 수 있다!(예를 들어 create 하는 함수나, validation 하는 함수들을 class 마다 구현한다)
2. 근데 만약 models.py 에 클래스에 너무 많은 함수가 들어가게 되면 수빠한 클래스가 된다!
3. 수빠한 클래스가 되어버렸다면 테스트 하기도 힘들고 너무 많은 권한을 가지게 된다
일단 이런식으로 찾아봤는데 일단 다시 읽어봐야겠다...
Logging
로깅을 적용할거다!
열심히 적용해볼거다!
일단 아무것도 모르는 상태이니 이것저것 찾아봤다
4-14 로깅
`[완성 소스]` : [github.com/pahkey/jump2django/tree/4-14](https://github.com/pahkey/jump2django/tree/4-…
wikidocs.net
약간 슬금슬금 찾아본 바로는 딱히 django에서 로깅을 딱! 해주는 뭔가 깔끔하고 알아서 잘 예쁘게 해주는 건 딱히 없는 것 같다.
오픈소스가 있는 것 같긴 했는데 아직 로깅을 잘 몰라서 대략 적용해볼 예정이다! (테스트겸)
일단 우리 코드에 적용해봤는데 아무것도 로깅이 되지 않았다. 왜인지 모르겠다. logs 폴더에 파일도 생성되지 않았다. 혹시나 해서 500 오류도 일부러 내서 log가 남는지 확인해봤는데 log도 딱히 남지 않아서 다른 방법을 강구했다.
https://docs.djangoproject.com/ko/5.0/howto/logging/
로깅 구성 및 사용 방법 | Django 문서
The web framework for perfectionists with deadlines.
docs.djangoproject.com
역시 공식 문서를 따라해봤다. ^^b
역시 공식문서는 깔끔하게 성공했다. 근데 이거 작성하고 나니 위에서 왜 안된건지 모르겠다가 생각해보니 logger 를 등록도 안하고 views.py 에 넣지도 않았구나를 알게되었다..
일단 성공한 스크린샷!
이런식으로 나오게 진행했다.
근데 좀 쓸데 없이 많다는 느낌은 들지만 일단 이대로 진행하고 나중에 뭔가 필요한 것만 남기는 게 나을 것 같다.
이제 모든 view에 넣어줘야 한다... 근데 이 과정이 생각보다 길어질 것 같다.
일단 우리 팀의 룰루루 팀장님의 의견을 들어본 결과 미들웨어로 로깅을 진행하는 방법도 좋다고 하셨다!
그래서 지금 일단 로깅을 성공하긴 했으니 이거 해보고 뭐가 더 편한지 결정하는 편이 나을 것 같다
그래서 django 의 미들웨어 공부 진행중..
https://velog.io/@qlgks1/Django-Middleware-custom-middleware-%EB%A7%8C%EB%93%A4%EA%B8%B0
Django Middleware - custom middleware 만들기
Django의 요청 / 응답 처리에 대한 후크 프레임 워크로써 Django 상의 모든 API 입출력을 전역적으로 변경하기 위한 플러그인 시스템. "Django의 입력 또는 출력을 전역적으로 변경하기 위한 가볍고 낮
velog.io
https://docs.djangoproject.com/en/5.0/topics/http/middleware/
Middleware | Django documentation
The web framework for perfectionists with deadlines.
docs.djangoproject.com
https://github.com/Rhumbix/django-request-logging/tree/master/request_logging
django-request-logging/request_logging at master · Rhumbix/django-request-logging
Django middleware that logs http request body. Contribute to Rhumbix/django-request-logging development by creating an account on GitHub.
github.com
위의 링크들에서 많은 도움을 얻었다. 일단 로깅의 기본도 몰라서 오픈소스쓰기 뭐해서 그냥 처음부터 스슥 만들어봤다.
일단 진행하면서 느낀점
1. views.py 에 logger 를 넣으면 너무 귀찮다.
1-1 모든 함수에 logger.info 등을 넣어줘야 해서 귀찮다.
1-2 관리하기도 어렵다
2. 그래서 middleware에 넣으려고 했는데 생각보다 자료가 너무 적었다.
2-1 middleware에 대해서도 다시 공부해야했다..
2-2 근데 막상 적용하니 제일 편한 방법이긴 하다.
외전. chatgpt babo... nea mamdo molla..
룰루루 팀장님과 함께 middleware 단에서 log 만드는 걸 성공했다!
middleware.py 파일이다.
처음에 settings.py 있는 폴더에 생성헀는데 log 자체가 앱만 인식하길래 todos 파일에 옮겼다.
그리고 account 쪽에도 생성하려고 했는데 막상 돌려보니까 다 인식이 되길래 그냥 내버려뒀다..
아 그리고 settings.py 파일이다.
MIDDLEWARE = [
'todos.logging_middleware.SimpleMiddleware',
...
# 제일 뒤에도 해봤는데 제일 뒤는 너무 많은 로그가 떠서 제일 앞에 뒀다..
# 제일 뒤에 놓고 싶다면 level을 info 로 높이는 편이 나을 것 같다.
]
# logging settings
LOGGING = {
'version' : 1,
"disable_existing_loggers": False,
"handlers" : {
"file" : {
"class" : "logging.FileHandler",
"filename" : BASE_DIR / "logs/general.log",
"formatter" : "verbose",
},
},
"loggers" : {
"file" : {
"handlers" : ["file"],
"level" : "DEBUG",
},
"todos.views" : {
"handlers" : ["file"],
"level" : "DEBUG",
},
'todos.logging_middleware': {
'handlers': ['file'],
'level': 'DEBUG',
},
"accounts.views" : {
"handlers" : ["file"],
"level" : "DEBUG",
},
},
"formatters" : {
"verbose" : {
"format" : "{name} {levelname} {asctime} {module} {process:d} {thread:d} {message}",
"style" : "{",
},
"simple" : {
"format" : "{levelname} {message}",
"style" : "{",
},
},
}
이런식으로 작성했다.
그래서 이런 식으로 나온다
일단 뭐가 어떻게 필요할 지 모르겠어서 대부분의 모든 정보를 내놓도록 해봤는데..
내일 데모 버전 나오면서 슬슬 바꿔야할것같다!
로깅은 일단 종료!
내일은 llm 관련 api 좀 하고, fat models 에 대해서 좀 더 공부해보고 프로젝트에 한번 슬슬 적용해봐야겠다.
'소프트웨어 마에스트로 > BackEnd(Django)' 카테고리의 다른 글
[백엔드] manager 넣어보기! (0) | 2024.08.01 |
---|---|
[백엔드] django chatgpt prompting + api 제작기 (0) | 2024.08.01 |
[백엔드] django serializer 관련 여러가지 요청사항 (0) | 2024.07.30 |
[백엔드] django serializer (1) | 2024.07.24 |
[백엔드] nested serailizer, lexorank 적용기 2차.. (4) | 2024.07.22 |