어제 중간평가 끝나서 좀 쉬고 오늘 다시 시작해본다!
할 일
sentry 손보기
testcode 리팩토링 (하드코딩 비중 줄이기 + 파일 좀 더 작게 쪼개기)
prompt 고민하기
일단 sentry 를 손봐본다.
지금까지의 문제는 다음과 같다.
로그는 잘 찍히지만 앞단에서 오류가 발생했을 때 찾을 수가 없다.
400인지 200인지, 400 이라면 왜 떴는지 그리고 무엇보다 메소드가 안보인다.
저번에도 이 로그로 파악하려니 그냥 서버 들어가서 로그 확인하는게 더 빨랐다.
그래서 파악이 잘 되도록 메소드 이름과 이때의 response 를 보여주는 작업을 시작해본다.
려고 했으나 포기했다.
시도한 사항
1. docs 잘 뒤져보기 -> 발견 못했다..
https://docs.sentry.io/product/explore/metrics/
Metrics
Metrics help you track and visualize the data points you care about, making it easier to monitor your application health and identify issues.
docs.sentry.io
2. chatgpt 에게 물어보기 ( 하지만 못 찾았다.. UI에서 설정할 수 있다고 해서 다시 docs 를 찾았지만 못 찾았다..)
3. github에서 사용한 예시있는지 찾아보기 -> 자료가 다 똑같은 공식 docs 를 가르키고 있었고.. 따라해봤지만 뭔가 되었지만 원하는 상황은 아니였다.
그래서 현재 상황은 metrics 를 추가했다.
cpu사용량, api call 수, 등등이 나오도록 변경해보았다. 나머지는 잘 모르겠다..
적다보니 내가 찾는 쪽은 Trace 였다는 사실을 다시 상기하고 찾아보았다.
Instrument HTTP Requests | Sentry for Python
Learn how to manually instrument your code to use Sentry's Requests module.
docs.sentry.io
일단 여기에 나와있는 코드를 작성해봤다.
views.py 에 있는 모든 코드들에 넣을것이니 좀 보편적으로 사용될 수 있게 약간만 수정했다.
def sentry_data(method, url, status_code, headers):
span = sentry_sdk.start_span(
op="http.request",
description="%s %s" % (method, url),
)
span.set_data("http.reqeust.method", method)
span.set_data("http.request.url", url)
span.set_data("http.response.status_code", status_code)
span.set_data("http.response_content_length", headers["content-length"])
span.finish()
그리고 일단 가장 사용하기 쉬운 todo 를 가져오는 함수에 넣고 절차를 확인해봤다.
달라지는 게 하나도 없다.
뭔가 status_code, content_length 이런 것도 넣었는데, 아래의 sentry 를 연결하면 보여주는(어떠한 설정도 하지 않은) 화면과 차이를 모르겠다
일단 나머지 하고 다시 해봐야할 것 같다.
테스트코드를 리팩토링한다!
하드코딩 되었던 테스트코드..
이 친구를 이런식으로 변경했읍니다..
저기 order 의 경우에 조금 헤맸는데
처음에 fixture 가 따로 인자를 못받는다는 말을 듣고 지피티에게 물어보니 아래의 해답을 주었다.
@pytest.fixture
def order():
orders = ["0|azzzzz:", "0|hzzzzz:", "0|lzzzzz:"]
def get_order(index):
return orders[index]
return get_order
이런식으로 주면 인덱스로 호출이 되었다
이제 두번째로 약 한 파일당 300줄 가량의 코드인 상태인데 이것을 다시 잘 나눠볼 예정이다.
일단 코파일럿에게 물어본 결과 method 별로 나누라고 해서 일단 이렇게 한번 해보았다.
흠.. 일단 모든 파일이 200줄 이내로 들어갔으니.. 일단 테스트코드 개선은 여기까지 해도 괜찮을 것 같다.
아 그리고 우리 모델의 경우 on_delete 가 cascade 로 설정되어있다.
일단 soft delete 방식이라 client 단에서 db 내에서 삭제되는 경우는 적을 것이라 생각은 되는데
https://hunstory.tistory.com/69
[Django] Django model on_delete 종류
목차on_delete란? ForeignKey의 on_delete 옵션은 참조되는 객체가 삭제되면 Django 인수에 의해 지정된 SQL 제약 조건의 동작이다. on_delete 종류1. CASECADE: 참조된 객체가 삭제 될 때 해당 객체도 함께 삭제
hunstory.tistory.com
일단 팀원분들과 이야기는 해봐야할 것 같다.
일단 내 생각은 protect 가 맞을 것 같지만..? (soft delete 라.. 삭제되는 걸 하나도 고려하지 않았드아...)
소프트 delete 방식이라 참조하고 있는 객체가 삭제되는 걸 방지할 수 있다고 생각했다.
일단 소프트로 사용하고 있는 경우가 데이터를 좀 더 보존할 수 있기 때문이기도 했고..
하지만,
팀원분들에게 얘기해보고 수정해야할 것 같다.
prompt 관련으로 공부하기
https://github.com/anthropics/courses/blob/master/prompt_engineering_interactive_tutorial/README.md
courses/prompt_engineering_interactive_tutorial/README.md at master · anthropics/courses
Anthropic's educational courses. Contribute to anthropics/courses development by creating an account on GitHub.
github.com
여기 너무나 잘 나와있다. 멘토님이 추천해주셨는데 열심히 공부해야할것같다.
일단 이것저것 따라해봤는데 당연히 claude 3.5 인가 결제하고 사용하고 있어서 사용할 수 있는 줄 알았는데
openAI APi 쓸때와 마찬가지로 뭔가 다른 곳인 것 같다. 따로 또 결제해야하는 시스템인것같다. 흠..
그래서 오늘은 여기까지..
https://console.anthropic.com/dashboard
'소프트웨어 마에스트로 > BackEnd(Django)' 카테고리의 다른 글
[prompt] prompt 실험기 4회차 (0) | 2024.08.30 |
---|---|
[prompt] prompt 실험기 3 (injection 방지하기) (2) | 2024.08.29 |
[백엔드] pytest testcode 개편 (0) | 2024.08.16 |
[백엔드] pytest 관련 서치 및 nested_serializer 손보기 (0) | 2024.08.16 |
[백엔드] ruff 적용 및 테스트 코드 관리 (1) | 2024.08.15 |